# nodes

node_type: @bedrijfsdatanl/n8n-nodes-prospectpro.prospectpro
package_name: @bedrijfsdatanl/n8n-nodes-prospectpro
display_name: ProspectPro
description: Get data from the ProspectPro API.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: ocjanssen
author_github_url: https://github.com/ocjanssen/n8n-nodes-prospectpro.git
npm_package_name: @bedrijfsdatanl/n8n-nodes-prospectpro
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:33.168Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "prospects",
      "options": [
        {
          "name": "Prospect",
          "value": "prospects"
        },
        {
          "name": "Contact",
          "value": "contacts"
        },
        {
          "name": "Event",
          "value": "events"
        },
        {
          "name": "Pageview",
          "value": "pageviews"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get_many",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get prospect",
          "routing": {
            "request": {
              "url": "/prospects",
              "method": "GET"
            }
          },
          "description": "Retrieve a prospect from ProspectPro"
        },
        {
          "name": "Get Many",
          "value": "get_many",
          "action": "Get prospects",
          "routing": {
            "request": {
              "url": "/prospects",
              "method": "GET"
            }
          },
          "description": "Retrieve prospects from ProspectPro"
        },
        {
          "name": "Update",
          "value": "patch",
          "action": "Update prospect",
          "routing": {
            "request": {
              "qs": {
                "no_header": 1
              },
              "url": "/prospects",
              "method": "PATCH"
            }
          },
          "description": "Update a prospect in ProspectPro"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "prospects"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get_many",
      "options": [
        {
          "name": "Get Many",
          "value": "get_many",
          "action": "Get pageviews",
          "routing": {
            "request": {
              "url": "/pageviews",
              "method": "GET"
            }
          },
          "description": "Retrieve pageviews from ProspectPro"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pageviews"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get_many",
      "options": [
        {
          "name": "Get Many",
          "value": "get_many",
          "action": "Get contacts",
          "routing": {
            "request": {
              "url": "/contacts",
              "method": "GET"
            }
          },
          "description": "Retrieve contacts from ProspectPro"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create contact",
          "routing": {
            "request": {
              "qs": {
                "no_header": "={{ $value && $value === true ? undefined : 1 }}"
              },
              "url": "/contacts",
              "method": "POST"
            }
          },
          "description": "Create a contact in ProspectPro"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update contact",
          "routing": {
            "request": {
              "qs": {
                "no_header": "={{ $value && $value === true ? undefined : 1 }}"
              },
              "url": "/contacts",
              "method": "PATCH"
            }
          },
          "description": "Update a contact in ProspectPro"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete contact",
          "routing": {
            "request": {
              "url": "/contacts",
              "method": "DELETE"
            }
          },
          "description": "Delete a contact in ProspectPro"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contacts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get_many",
      "options": [
        {
          "name": "Get Many",
          "value": "get_many",
          "action": "Get events",
          "routing": {
            "request": {
              "url": "/events",
              "method": "GET"
            }
          },
          "description": "Retrieve events from ProspectPro"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create event",
          "routing": {
            "request": {
              "qs": {
                "no_header": "={{ $value && $value === true ? undefined : 1 }}"
              },
              "url": "/events",
              "method": "POST"
            }
          },
          "description": "Create an event in ProspectPro"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete event",
          "routing": {
            "request": {
              "url": "/events",
              "method": "DELETE"
            }
          },
          "description": "Delete an event in ProspectPro"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "events"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get prospect",
      "routing": {
        "request": {
          "url": "/prospects",
          "method": "GET"
        }
      },
      "description": "Retrieve a prospect from ProspectPro",
      "resource": "prospects"
    },
    {
      "name": "Get Many",
      "value": "get_many",
      "action": "Get prospects",
      "routing": {
        "request": {
          "url": "/prospects",
          "method": "GET"
        }
      },
      "description": "Retrieve prospects from ProspectPro",
      "resource": "prospects"
    },
    {
      "name": "Update",
      "value": "patch",
      "action": "Update prospect",
      "routing": {
        "request": {
          "qs": {
            "no_header": 1
          },
          "url": "/prospects",
          "method": "PATCH"
        }
      },
      "description": "Update a prospect in ProspectPro",
      "resource": "prospects"
    },
    {
      "name": "Get Many",
      "value": "get_many",
      "action": "Get pageviews",
      "routing": {
        "request": {
          "url": "/pageviews",
          "method": "GET"
        }
      },
      "description": "Retrieve pageviews from ProspectPro",
      "resource": "pageviews"
    },
    {
      "name": "Get Many",
      "value": "get_many",
      "action": "Get contacts",
      "routing": {
        "request": {
          "url": "/contacts",
          "method": "GET"
        }
      },
      "description": "Retrieve contacts from ProspectPro",
      "resource": "contacts"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create contact",
      "routing": {
        "request": {
          "qs": {
            "no_header": "={{ $value && $value === true ? undefined : 1 }}"
          },
          "url": "/contacts",
          "method": "POST"
        }
      },
      "description": "Create a contact in ProspectPro",
      "resource": "contacts"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update contact",
      "routing": {
        "request": {
          "qs": {
            "no_header": "={{ $value && $value === true ? undefined : 1 }}"
          },
          "url": "/contacts",
          "method": "PATCH"
        }
      },
      "description": "Update a contact in ProspectPro",
      "resource": "contacts"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete contact",
      "routing": {
        "request": {
          "url": "/contacts",
          "method": "DELETE"
        }
      },
      "description": "Delete a contact in ProspectPro",
      "resource": "contacts"
    },
    {
      "name": "Get Many",
      "value": "get_many",
      "action": "Get events",
      "routing": {
        "request": {
          "url": "/events",
          "method": "GET"
        }
      },
      "description": "Retrieve events from ProspectPro",
      "resource": "events"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create event",
      "routing": {
        "request": {
          "qs": {
            "no_header": "={{ $value && $value === true ? undefined : 1 }}"
          },
          "url": "/events",
          "method": "POST"
        }
      },
      "description": "Create an event in ProspectPro",
      "resource": "events"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete event",
      "routing": {
        "request": {
          "url": "/events",
          "method": "DELETE"
        }
      },
      "description": "Delete an event in ProspectPro",
      "resource": "events"
    }
  ]

npm_readme:
  # n8n-nodes-prospectpro

  ![n8n.io - Workflow Automation](https://raw.githubusercontent.com/n8n-io/n8n/master/assets/n8n-logo.png)

  An n8n community node for integrating with the [ProspectPro API](https://docs.prospectpro.nl/). This node allows you to manage and retrieve prospect, contact, pageview, and event data directly within your n8n workflows.

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

  ## Installation

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

  ### Community Nodes (Recommended)

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

  ### Docker (Quick Start)

  Run n8n with the ProspectPro node pre-installed:

  ```bash
  ./run.sh
  ```

  Then access n8n at http://localhost:5679

  To update the node after making changes:
  ```bash
  npm run build && docker-compose restart
  ```

  ### Manual Installation

  To get started:

  ```bash
  npm install n8n-nodes-prospectpro
  ```

  ## Credentials

  You need a ProspectPro API key to use this node:

  1. Sign up at [ProspectPro](https://www.prospectpro.nl/)
  2. Get your API key from your account dashboard
  3. In n8n, create new credentials of type "ProspectPro API"
  4. Enter your API key

  ## Supported Operations

  ### Prospects Resource

  #### Get Prospect
  Retrieve a single prospect from ProspectPro.

  #### Get Many Prospects
  Search and retrieve multiple prospects with filtering options.

  #### Update Prospect
  Update prospect information in ProspectPro.

  ### Pageviews Resource

  #### Get Many Pageviews
  Retrieve pageview data for prospects.

  ### Contacts Resource

  #### Get Many Contacts
  Retrieve contact information.

  #### Create Contact
  Create a new contact in ProspectPro.

  #### Update Contact
  Update existing contact information.

  #### Delete Contact
  Remove a contact from ProspectPro.

  ### Events Resource

  #### Get Many Events
  Retrieve event data.

  #### Create Event
  Create a new event in ProspectPro.

  #### Delete Event
  Remove an event from ProspectPro.

  ## ProspectPro Trigger Node

  The package also includes a trigger node that can poll for new or updated prospects. This node supports:

  - Filtering by qualification status
  - Filtering by tags
  - Filtering by audiences
  - Filtering by owner

  The trigger will automatically track the last time it ran to only retrieve new or updated prospects.

  ## Usage Examples

  ### Basic Prospect Search
  Retrieve prospects from ProspectPro:
  ```json
  {
    "resource": "prospects",
    "operation": "get_many",
    "additionalFields": {
      "rows": 10
    }
  }
  ```

  ### Create Contact for a Prospect
  Create a new contact associated with a prospect:
  ```json
  {
    "resource": "contacts",
    "operation": "create",
    "prospectId": "123456",
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@example.com"
  }
  ```

  ### Retrieve Recent Pageviews
  Get recent pageviews data:
  ```json
  {
    "resource": "pageviews",
    "operation": "get_many",
    "additionalFields": {
      "rows": 20,
      "sort_by": "timestamp",
      "sort_order": "desc"
    }
  }
  ```

  ### Create a Custom Event
  Log a custom event in ProspectPro:
  ```json
  {
    "resource": "events",
    "operation": "create",
    "prospectId": "123456",
    "eventType": "meeting_scheduled",
    "eventData": {
      "time": "2023-05-15T14:30:00Z",
      "notes": "Initial consultation"
    }
  }
  ```

  ## Trigger Node Example
  Create an automated workflow that triggers when new qualified prospects are found:
  ```json
  {
    "label": 1,
    "tags": ["high-value", "inbound"],
    "owner": "12345678"
  }
  ```

  ## API Documentation

  For detailed API documentation, visit [docs.prospectpro.nl](https://docs.prospectpro.nl/).

  ## Compatibility

  - **n8n version**: 0.187.0 or later
  - **Node.js version**: 20.15 or later

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [ProspectPro API Documentation](https://docs.prospectpro.nl/)

  ## Development

  ### Prerequisites

  - Node.js 20.15 or later
  - npm or pnpm

  ### Setup

  ```bash
  # Clone the repository
  git clone [your-repository-url]

  # Install dependencies
  npm install

  # Build the node
  npm run build

  # Lint the code
  npm run lint
  ```

  ### Testing

  To test the node locally:

  1. Build the node: `npm run build`
  2. Link it to your global n8n installation: `npm link`
  3. In your n8n directory: `npm link n8n-nodes-prospectpro`
  4. Start n8n: `n8n start`

  OR

  ```bash
  ./run.sh
  ```

  ## License

  [MIT](LICENSE.md)

  ## Support

  If you encounter any issues or have questions:

  1. Check the [ProspectPro API documentation](https://docs.prospectpro.nl/)
  2. Review the [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  3. Open an issue in this repository

  [ProspectPro](https://www.prospectpro.nl/) is a part of [Bedrijfsdata.nl](https://www.bedrijfsdata.nl/)

ai_documentation_summary:
  {"purpose":"An n8n community node that integrates with the ProspectPro API to manage and retrieve prospect, contact, pageview, and event data within workflows.","capabilities":["Retrieve single prospect data","Search and retrieve multiple prospects with filtering","Update prospect information","Retrieve pageview data","Retrieve contact information","Create new contacts","Update existing contacts","Delete contacts","Retrieve event data","Create new events"],"authentication":"API key required","commonUseCases":["Automated lead management workflows","Tracking prospect engagement via pageviews","Creating and updating CRM contacts","Logging custom events for sales tracking","Automated prospect discovery and qualification"],"limitations":["Requires external ProspectPro API key and account","Requires n8n version 0.187.0 or later","Requires Node.js version 20.15 or later","Community node (may have limited support compared to official nodes)"],"relatedNodes":["ProspectPro Trigger Node","ProspectPro API Credentials","n8n Community Nodes"]}


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

updated_at: 2026-07-14 14:40:33
author_name: jtempels
author_github_url: https://github.com/octavehq/octave-n8n.git
npm_package_name: n8n-nodes-octavehq
npm_version: 1.5.0
community_fetched_at: 2026-07-14T14:40:33.169Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "agent",
      "options": [
        {
          "name": "Agent",
          "value": "agent"
        },
        {
          "name": "Async",
          "value": "async"
        },
        {
          "name": "Competitor",
          "value": "competitor"
        },
        {
          "name": "Experiment",
          "value": "experiment"
        },
        {
          "name": "Persona",
          "value": "persona"
        },
        {
          "name": "Playbook",
          "value": "playbook"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "Proof Point",
          "value": "proofPoint"
        },
        {
          "name": "Reference",
          "value": "reference"
        },
        {
          "name": "Segment",
          "value": "segment"
        },
        {
          "name": "Use Case",
          "value": "useCase"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Build Workspace",
          "value": "buildWorkspace",
          "action": "Build workspace",
          "description": "Generate and build a Workspace"
        },
        {
          "name": "Call Prep",
          "value": "callPrep",
          "action": "Generate call prep",
          "description": "Generate call prep content including discovery questions, call scripts, and objection handling"
        },
        {
          "name": "Enrich Company",
          "value": "enrichCompany",
          "action": "Enrich a company",
          "description": "Enrich a company"
        },
        {
          "name": "Enrich Person",
          "value": "enrichPerson",
          "action": "Enrich a person",
          "description": "Enrich a Person"
        },
        {
          "name": "Generate Content",
          "value": "generateContent",
          "action": "Generate content",
          "description": "Generate content for a person"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List agents",
          "description": "List all agents"
        },
        {
          "name": "Qualify Company",
          "value": "qualifyCompany",
          "action": "Qualify a company",
          "description": "Determine if a company is qualified for a given Product and/or Segment"
        },
        {
          "name": "Qualify Person",
          "value": "qualifyPerson",
          "action": "Qualify a person",
          "description": "Determine if a person is qualified for a given Product, Persona, and/or Segment"
        },
        {
          "name": "Run Prospector",
          "value": "runProspector",
          "action": "Run a prospector agent",
          "description": "Find relevant people at a company or lookalike companies"
        },
        {
          "name": "Run Sequence",
          "value": "runSequence",
          "action": "Run a sequence agent",
          "description": "Generate Emails for a person"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List Playbooks",
          "value": "list",
          "action": "List playbooks"
        },
        {
          "name": "Get Playbook",
          "value": "get",
          "action": "Get a playbook by OID"
        },
        {
          "name": "Create Playbook",
          "value": "create",
          "action": "Create a new playbook"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "playbook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a product",
          "description": "Create a new product"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate products",
          "description": "Generate products from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a product",
          "description": "Get a specific product by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List products",
          "description": "List products in the workspace"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a product",
          "description": "Update an existing product"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a persona",
          "description": "Create a new persona"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate personas",
          "description": "Generate personas from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a persona",
          "description": "Get a specific persona by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List personas",
          "description": "List personas in the workspace"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a persona",
          "description": "Update an existing persona"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "persona"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a proof point",
          "description": "Create a new proof point"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate proof points",
          "description": "Generate proof points from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a proof point",
          "description": "Get a proof point by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List proof points",
          "description": "List proof points with optional filtering and pagination"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a proof point",
          "description": "Update an existing proof point"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "proofPoint"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a reference",
          "description": "Create a new reference"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate references",
          "description": "Generate references from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a reference",
          "description": "Get a specific reference by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List references",
          "description": "List references in the workspace"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a reference",
          "description": "Update an existing reference"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reference"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a use case",
          "description": "Create a new use case"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate use cases",
          "description": "Generate use cases from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a use case",
          "description": "Get a specific use case by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List use cases",
          "description": "List use cases in the workspace"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a use case",
          "description": "Update an existing use case"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "useCase"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runAgent",
      "options": [
        {
          "name": "Run Agent",
          "value": "runAgent",
          "action": "Run an agent asynchronously",
          "description": "Triggers an agent to run in the background"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "async"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a competitor",
          "description": "Create a new competitor"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate competitors",
          "description": "Generate competitors from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a competitor",
          "description": "Get a competitor by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List competitors",
          "description": "List competitors with optional filtering"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a competitor",
          "description": "Update an existing competitor"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "competitor"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a segment",
          "description": "Create a new segment"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate segments",
          "description": "Generate segments from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a segment",
          "description": "Get a segment by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List segments",
          "description": "List segments with optional filtering"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a segment",
          "description": "Update an existing segment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "segment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an experiment",
          "description": "Create a new agent experiment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "experiment"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Build Workspace",
      "value": "buildWorkspace",
      "action": "Build workspace",
      "description": "Generate and build a Workspace",
      "resource": "agent"
    },
    {
      "name": "Call Prep",
      "value": "callPrep",
      "action": "Generate call prep",
      "description": "Generate call prep content including discovery questions, call scripts, and objection handling",
      "resource": "agent"
    },
    {
      "name": "Enrich Company",
      "value": "enrichCompany",
      "action": "Enrich a company",
      "description": "Enrich a company",
      "resource": "agent"
    },
    {
      "name": "Enrich Person",
      "value": "enrichPerson",
      "action": "Enrich a person",
      "description": "Enrich a Person",
      "resource": "agent"
    },
    {
      "name": "Generate Content",
      "value": "generateContent",
      "action": "Generate content",
      "description": "Generate content for a person",
      "resource": "agent"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List agents",
      "description": "List all agents",
      "resource": "agent"
    },
    {
      "name": "Qualify Company",
      "value": "qualifyCompany",
      "action": "Qualify a company",
      "description": "Determine if a company is qualified for a given Product and/or Segment",
      "resource": "agent"
    },
    {
      "name": "Qualify Person",
      "value": "qualifyPerson",
      "action": "Qualify a person",
      "description": "Determine if a person is qualified for a given Product, Persona, and/or Segment",
      "resource": "agent"
    },
    {
      "name": "Run Prospector",
      "value": "runProspector",
      "action": "Run a prospector agent",
      "description": "Find relevant people at a company or lookalike companies",
      "resource": "agent"
    },
    {
      "name": "Run Sequence",
      "value": "runSequence",
      "action": "Run a sequence agent",
      "description": "Generate Emails for a person",
      "resource": "agent"
    },
    {
      "name": "List Playbooks",
      "value": "list",
      "action": "List playbooks",
      "resource": "playbook"
    },
    {
      "name": "Get Playbook",
      "value": "get",
      "action": "Get a playbook by OID",
      "resource": "playbook"
    },
    {
      "name": "Create Playbook",
      "value": "create",
      "action": "Create a new playbook",
      "resource": "playbook"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a product",
      "description": "Create a new product",
      "resource": "product"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate products",
      "description": "Generate products from source materials using AI",
      "resource": "product"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a product",
      "description": "Get a specific product by OId",
      "resource": "product"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List products",
      "description": "List products in the workspace",
      "resource": "product"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a product",
      "description": "Update an existing product",
      "resource": "product"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a persona",
      "description": "Create a new persona",
      "resource": "persona"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate personas",
      "description": "Generate personas from source materials using AI",
      "resource": "persona"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a persona",
      "description": "Get a specific persona by OId",
      "resource": "persona"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List personas",
      "description": "List personas in the workspace",
      "resource": "persona"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a persona",
      "description": "Update an existing persona",
      "resource": "persona"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a proof point",
      "description": "Create a new proof point",
      "resource": "proofPoint"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate proof points",
      "description": "Generate proof points from source materials using AI",
      "resource": "proofPoint"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a proof point",
      "description": "Get a proof point by OId",
      "resource": "proofPoint"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List proof points",
      "description": "List proof points with optional filtering and pagination",
      "resource": "proofPoint"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a proof point",
      "description": "Update an existing proof point",
      "resource": "proofPoint"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a reference",
      "description": "Create a new reference",
      "resource": "reference"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate references",
      "description": "Generate references from source materials using AI",
      "resource": "reference"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a reference",
      "description": "Get a specific reference by OId",
      "resource": "reference"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List references",
      "description": "List references in the workspace",
      "resource": "reference"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a reference",
      "description": "Update an existing reference",
      "resource": "reference"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a use case",
      "description": "Create a new use case",
      "resource": "useCase"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate use cases",
      "description": "Generate use cases from source materials using AI",
      "resource": "useCase"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a use case",
      "description": "Get a specific use case by OId",
      "resource": "useCase"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List use cases",
      "description": "List use cases in the workspace",
      "resource": "useCase"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a use case",
      "description": "Update an existing use case",
      "resource": "useCase"
    },
    {
      "name": "Run Agent",
      "value": "runAgent",
      "action": "Run an agent asynchronously",
      "description": "Triggers an agent to run in the background",
      "resource": "async"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a competitor",
      "description": "Create a new competitor",
      "resource": "competitor"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate competitors",
      "description": "Generate competitors from source materials using AI",
      "resource": "competitor"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a competitor",
      "description": "Get a competitor by OId",
      "resource": "competitor"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List competitors",
      "description": "List competitors with optional filtering",
      "resource": "competitor"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a competitor",
      "description": "Update an existing competitor",
      "resource": "competitor"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a segment",
      "description": "Create a new segment",
      "resource": "segment"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate segments",
      "description": "Generate segments from source materials using AI",
      "resource": "segment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a segment",
      "description": "Get a segment by OId",
      "resource": "segment"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List segments",
      "description": "List segments with optional filtering",
      "resource": "segment"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a segment",
      "description": "Update an existing segment",
      "resource": "segment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an experiment",
      "description": "Create a new agent experiment",
      "resource": "experiment"
    }
  ]

npm_readme:
  # n8n-nodes-octavehq

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

  Octave is the AI-powered messaging brain for B2B go-to-market teams, helping you articulate your product's value, synthesize customer interaction data, and deploy consistent, effective messaging across all your execution channels. In a world of rapid product innovation, Octave ensures your go-to-market strategy is always on message and impactful.

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

  [Installation](#installation)
  [Operations](#operations)
  [Resources](#resources)
  [Version history](#version-history)

  ## Installation

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

  ## Operations

  The Octave node supports the following operations, categorized by resource:

  ### Response Format

  All agent operations now return responses that include both the data and API metadata:

  ```json
  {
    "data": {
      // Actual response data from the operation
    },
    "_metadata": {
      "requestId": "unique-request-identifier",
      "timestamp": "2021-01-01T00:00:00.000Z",
      "usage": 0,
      "message": "Additional information about the request"
    }
  }
  ```

  The `_metadata` field provides valuable information for tracking, debugging, and monitoring API usage.

  **Resource: Agent**
  *   **List Agents**: List all agents
      *   Corresponds to `GET /api/v2/agents/list`
  *   **Build Workspace**: Generate and build a Workspace
      *   Corresponds to `POST /api/v2/agents/workspace/build`
  *   **Call Prep**: Generate call prep content including discovery questions, call scripts, and objection handling
      *   Corresponds to `POST /api/v2/agents/call-prep/run`
  *   **Enrich Company**: Enrich a company
      *   Corresponds to `POST /api/v2/agents/enrich-company/run`
  *   **Enrich Person**: Enrich a Person
      *   Corresponds to `POST /api/v2/agents/enrich-person/run`
  *   **Generate Content**: Generate content for a person
      *   Corresponds to `POST /api/v2/agents/generate-content/run`
  *   **Run Sequence**: Generate Emails for a person
      *   Corresponds to `POST /api/v2/agents/sequence/run`
  *   **Run Prospector**: Find relevant people at a company or lookalike companies
      *   Corresponds to `POST /api/v2/agents/prospector/run`
  *   **Qualify Company**: Determine if a company is qualified for a given Product and/or Segment
      *   Corresponds to `POST /api/v2/agents/qualify-company/run`
  *   **Qualify Person**: Determine if a person is qualified for a given Product, Persona, and/or Segment
      *   Corresponds to `POST /api/v2/agents/qualify-person/run`

  **Resource: Async**
  *   **Run Agent Asynchronously**: Triggers an agent to run in the background.
      *   Corresponds to `POST /api/v2/async/agent/run`

  **Resource: Competitor**
  *   **List Competitors**: Retrieves a list of competitors with optional filtering.
      *   Corresponds to `GET /api/v2/competitor/list`
  *   **Get Competitor**: Retrieves a specific competitor by its OId.
      *   Corresponds to `GET /api/v2/competitor/get`
  *   **Create Competitor**: Creates a new competitor.
      *   Corresponds to `POST /api/v2/competitor/create`
  *   **Update Competitor**: Updates an existing competitor.
      *   Corresponds to `PUT /api/v2/competitor/update`
  *   **Generate Competitors**: Generate competitors from source materials using AI.
      *   Corresponds to `POST /api/v2/competitor/generate`

  **Resource: Experiment**
  *   **Create Experiment**: Creates a new agent experiment for A/B testing different agents.
      *   Corresponds to `POST /api/v2/agents/experiment/create`

  **Resource: Persona**
  *   **List Personas**: Retrieves a list of personas.
      *   Corresponds to `GET /api/v2/persona/list`
  *   **Get Persona**: Retrieves a specific persona by its OId.
      *   Corresponds to `GET /api/v2/persona/get`
  *   **Create Persona**: Creates a new persona.
      *   Corresponds to `POST /api/v2/persona/create`
  *   **Update Persona**: Updates an existing persona.
      *   Corresponds to `PUT /api/v2/persona/update`
  *   **Generate Personas**: Generate personas from source materials using AI.
      *   Corresponds to `POST /api/v2/persona/generate`

  **Resource: Playbook**
  *   **List Playbooks**: Retrieves a list of playbooks.
      *   Corresponds to `GET /api/v2/playbook/list`
  *   **Get Playbook**: Retrieves a specific playbook by its OId.
      *   Corresponds to `GET /api/v2/playbook/get`
  *   **Create Playbook**: Creates a new playbook.
      *   Corresponds to `POST /api/v2/playbook/create`
  *   **Update Playbook**: Updates an existing playbook.
      *   Corresponds to `PUT /api/v2/playbook/update`

  **Resource: Product**
  *   **List Products**: Retrieves a list of products.
      *   Corresponds to `GET /api/v2/product/list`
  *   **Get Product**: Retrieves a specific product by its OId.
      *   Corresponds to `GET /api/v2/product/get`
  *   **Create Product**: Creates a new product.
      *   Corresponds to `POST /api/v2/product/create`
  *   **Update Product**: Updates an existing product.
      *   Corresponds to `PUT /api/v2/product/update`
  *   **Generate Products**: Generate products from source materials using AI.
      *   Corresponds to `POST /api/v2/product/generate`

  **Resource: Proof Point**
  *   **List Proof Points**: Retrieves a list of proof points with optional filtering.
      *   Corresponds to `GET /api/v2/proof-point/list`
  *   **Get Proof Point**: Retrieves a specific proof point by its OId.
      *   Corresponds to `GET /api/v2/proof-point/get`
  *   **Create Proof Point**: Creates a new proof point.
      *   Corresponds to `POST /api/v2/proof-point/create`
  *   **Update Proof Point**: Updates an existing proof point.
      *   Corresponds to `PUT /api/v2/proof-point/update`
  *   **Generate Proof Points**: Generate proof points from source materials using AI.
      *   Corresponds to `POST /api/v2/proof-point/generate`

  **Resource: Reference**
  *   **List References**: Retrieves a list of references.
      *   Corresponds to `GET /api/v2/reference/list`
  *   **Get Reference**: Retrieves a specific reference by its OId.
      *   Corresponds to `GET /api/v2/reference/get`
  *   **Create Reference**: Creates a new reference.
      *   Corresponds to `POST /api/v2/reference/create`
  *   **Update Reference**: Updates an existing reference.
      *   Corresponds to `PUT /api/v2/reference/update`
  *   **Generate References**: Generate references from source materials using AI.
      *   Corresponds to `POST /api/v2/reference/generate`

  **Resource: Segment**
  *   **List Segments**: Retrieves a list of segments with optional filtering.
      *   Corresponds to `GET /api/v2/segment/list`
  *   **Get Segment**: Retrieves a specific segment by its OId.
      *   Corresponds to `GET /api/v2/segment/get`
  *   **Create Segment**: Creates a new segment.
      *   Corresponds to `POST /api/v2/segment/create`
  *   **Update Segment**: Updates an existing segment.
      *   Corresponds to `PUT /api/v2/segment/update`
  *   **Generate Segments**: Generate segments from source materials using AI.
      *   Corresponds to `POST /api/v2/segment/generate`

  **Resource: Use Case**
  *   **List Use Cases**: Retrieves a list of use cases.
      *   Corresponds to `GET /api/v2/use-case/list`
  *   **Get Use Case**: Retrieves a specific use case by its OId.
      *   Corresponds to `GET /api/v2/use-case/get`
  *   **Create Use Case**: Creates a new use case.
      *   Corresponds to `POST /api/v2/use-case/create`
  *   **Update Use Case**: Updates an existing use case.
      *   Corresponds to `PUT /api/v2/use-case/update`
  *   **Generate Use Cases**: Generate use cases from source materials using AI.
      *   Corresponds to `POST /api/v2/use-case/generate`

  ## Credentials

  Get your API key from the Octave settings page. We recommend naming the credentials with the Workspace that the API key is associated with.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Library Overview](https://youtu.be/UyU1tDuRE58)
  * [Playbooks Overview](https://youtu.be/SINDvLIfRa8)
  * [Agents Overview](https://www.youtube.com/watch?v=oExCRibGjAU)
  * [Octave + Clay Overview](https://www.youtube.com/watch?v=JjYLBddEn7A)


  ## Version history
  * 0.1.1 - Octave <> N8N. Let the games begin!
  * 1.0.1 - Add `x-request-source` header to indicate request came from n8n
  * 1.0.2 - Add Credentials test + make Octave node usable by AI
  * 1.1.0 - Added Competitor, Segment, and Experiment resources; Added Call Prep agent; Removed Personalize Template agent; Improved modular architecture
  * 1.1.1 - Uses IHttpRequestOptions instead of deprecated IRequestOptions
  * 1.1.2 - Uses httpRequestWithAuthentication instead of httpRequest to be more secure and maintainable
  * 1.2.0 - Removed List API Keys endpoint
  * 1.2.1 - Rebuild to remove deprecated API files from build
  * 1.3.0 - Major expansion: Added full CRUD support (create, update, generate) for all resources; Added new Proof Point resource; Enhanced UX with native collection inputs for generate operations; Improved agent field ordering with LinkedIn Profile prioritization; Enhanced runtime context handling for sequences
  * 1.3.1 - Fixed UI issue in generate operations where "Add Source" button was not displaying Type and Value fields properly
  * 1.3.2 - Update Playbook types
  * 1.4.0 - Enhanced response format: All agent operations now include API metadata (`_metadata`) alongside data, providing request IDs, timestamps, usage information, and additional context for better tracking and debugging
  * 1.5.0 - Added `generate` route to references. Updated documentation.
  * 1.5.1 - Fixed runtime context handling: All agent operations (except Run Sequence) now correctly accept runtime context as a string instead of JSON. Run Sequence continues to use an object structure with step-specific keys.

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Octave V2 API to automate B2B go-to-market messaging, including agent management, content generation, and prospecting.","capabilities":["List and manage agents","Build and manage workspaces","Generate call prep content","Enrich company and person data","Generate marketing content","Run email sequences","Prospect and find relevant leads","Qualify companies and individuals","Manage competitors (list, get, create, update, generate)","Manage personas (list, get, create, update, generate)"],"authentication":"API key required","commonUseCases":["Automating B2B sales outreach and prospecting","Generating personalized call scripts and objection handling","Enriching lead data for sales teams","Creating and managing marketing playbooks","A/B testing different messaging agents"],"limitations":["Community node (may have slower updates or support compared to official nodes)","Requires Octave V2 API access and valid API credentials","Response includes metadata wrapper that may require parsing"],"relatedNodes":["n8n-nodes-octavehq.octave","HTTP Request","JSON Response"]}


node_type: @orisma/n8n-nodes-taximail.taximail
package_name: @orisma/n8n-nodes-taximail
display_name: Taximail
description: Send Email, SMS, OTP via Taximail API with AI content generation or check status/verify OTP
category: AI Agent Tools
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: worngsakorn-orm
author_github_url: https://github.com/wongsakorn-orm/n8n-nodes-taximail.git
npm_package_name: @orisma/n8n-nodes-taximail
npm_version: 1.0.12
community_fetched_at: 2026-07-14T14:40:33.170Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "email",
      "options": [
        {
          "name": "Check Status",
          "value": "check_status"
        },
        {
          "name": "Send Email",
          "value": "email"
        },
        {
          "name": "Send SMS",
          "value": "sms"
        },
        {
          "name": "Send SMS OTP",
          "value": "sms_otp"
        },
        {
          "name": "Verify OTP",
          "value": "verify_otp"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Check Status",
      "value": "check_status"
    },
    {
      "name": "Send Email",
      "value": "email"
    },
    {
      "name": "Send SMS",
      "value": "sms"
    },
    {
      "name": "Send SMS OTP",
      "value": "sms_otp"
    },
    {
      "name": "Verify OTP",
      "value": "verify_otp"
    }
  ]

npm_readme:
  # n8n-nodes-taximail

  This is an n8n community node. It lets you use **Taximail** in your n8n AI Agent workflows as a Tool.

  **Taximail** is a communication service for sending transactional emails and SMS globally. This node allows AI Agents to send messages via Taximail, verify OTP codes, and check message delivery status with intelligent context awareness.

  [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)  
  [AI Agent Configuration](#ai-agent-configuration)  
  [Resources](#resources)

  ---

  ## Installation

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

  Once installed, the `Taximail` node will be available as a **Tool** for AI Agent nodes to use directly.

  ---

  ## Operations

  - **Send Email**: Send transactional emails via Taximail (with `template_key` or custom content).
  - **Send SMS**: Send SMS via Taximail (with `template_key` or custom text).
  - **Send SMS OTP**: Send OTP verification codes via SMS (requires `template_key`).
  - **Verify OTP**: Verify OTP codes entered by users.
  - **Check Status**: Check delivery status of sent messages.

  ---

  ## Credentials

  You will need **Taximail API credentials** to use this node.

  ### Getting Your API Credentials:

  1. Sign up or log in at [https://www.taximail.com](https://www.taximail.com)
  2. Navigate to the Integration section in your dashboard
  3. Generate your API Key and Secret Key
  4. Follow this guide for detailed steps:  
     [https://www.taximail.com/en/support/using-taximail/learn-about-api-integrations](https://www.taximail.com/en/support/using-taximail/learn-about-api-integrations)

  ### Adding Credentials in n8n:

  1. In n8n, create a new credential
  2. Select **"Taximail API"** as the credential type
  3. Enter your credentials:
     - **API Key**: Your Taximail API Key from the Integration section
     - **Secret Key**: Your Taximail Secret Key from the Integration section

  ---

  ## Compatibility

  - Minimum n8n version: `1.45.0` (with AI Agent Tool support)
  - Tested on: `1.45.0`, `1.46.0`
  - No known incompatibilities

  ---

  ## Usage

  This node is designed to be used with **AI Agents** in n8n with intelligent context handling.

  ### Email Operations:

  - **Send Email**: Requires recipient email, sender email, sender name, and either:
    - A `template_key` for using a pre-defined template, or
    - Custom subject and HTML content
  - Returns a `message_id` that can be used to check delivery status later

  ### SMS Operations:

  - **Send SMS**: Requires recipient phone number (MSISDN format with country code) and either:
    - A `template_key` for using a pre-defined template, or
    - Custom SMS text (keep under 160 characters)
  - Returns a `message_id` that can be used to check delivery status later

  ### Smart OTP Operations:

  - **Send SMS OTP**: Requires recipient phone number and a `template_key` (mandatory for OTP)
  - **Verify OTP**: The AI Agent automatically uses the `message_id` from recent OTP sending - no need to ask users for it again!
  - Returns verification status (success/failure)

  ### Status Operations:

  - **Check Status**: Requires a `message_id` from any previous send operation
  - Returns detailed delivery status information

  ### AI Agent Integration:

  When used with AI Agents, the node can:

  - **Smart Context Handling**: Automatically remembers `message_id` from sent OTPs
  - **Intelligent Verification**: Never asks users for `message_id` when it's already available in conversation
  - Detect message type based on context (email vs SMS)
  - Convert phone numbers to proper MSISDN format
  - Ask for missing required parameters
  - Track message delivery with the returned `message_id`

  ### Language support:

  The node works with any language supported by the AI Agent (Thai, English, etc.).

  ---

  ## AI Agent Configuration

  For optimal performance, configure your AI Agent with the following prompt structure:

  ### Recommended AI Agent Prompt:

  ```
  You are a Taximail Communication Assistant, an AI agent specialized in helping users send emails, SMS, and manage OTP communications through the Taximail service.

  ## IMPORTANT: Context Memory Rules

  - **ALWAYS remember information from the current conversation**
  - **When you send an OTP, AUTOMATICALLY save the Message ID for verification**
  - **If user provides an OTP code, use the MOST RECENT Message ID from the conversation**
  - **DO NOT ask for Message ID again if it was already provided in this conversation**

  ## Smart OTP Verification Flow:

  1. When sending OTP → Save Message ID automatically
  2. When user provides OTP code → Use the saved Message ID immediately
  3. Only ask for Message ID if no OTP was sent in this conversation

  ## Example Smart Flow:

  User: "Send OTP to +66891234567"
  You: _Send OTP_ → "OTP sent! Message ID: ABC123 saved for verification"
  User: "The code is 1234"
  You: _Verify immediately using ABC123_ → "Verifying code 1234..."

  Remember: **NEVER ask for information you already have from the conversation context!**
  ```

  ### Memory Configuration:

  Use **Simple Memory** node to store conversation context:

  - **Memory Key**: `taximail_context`
  - **Store**: Message IDs, phone numbers, and verification status
  - **Auto-retrieve**: Recent OTP Message IDs for verification

  ### Example Conversation Flow:

  **Smart Behavior (✅ Correct):**

  ```
  User: "Send OTP to +66891234567"
  Agent: [Sends OTP] "OTP sent successfully! Message ID: XYZ789 saved for verification"
  User: "The OTP code is 5678"
  Agent: [Auto-verifies with XYZ789] "Verifying code 5678 with saved Message ID..."
  ```

  **Poor Behavior (❌ Avoid):**

  ```
  User: "Send OTP to +66891234567"
  Agent: [Sends OTP] "OTP sent successfully! Message ID: XYZ789"
  User: "The OTP code is 5678"
  Agent: "Please provide the Message ID to verify" ← Wrong! Should use XYZ789
  ```

  ---

  ## Resources

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Taximail API Key Creation Guide](https://www.taximail.com/en/support/using-taximail/learn-about-api-integrations)
  - [Taximail Platform Documentation](https://www.taximail.com/en/support/using-taximail)
  - [n8n AI Agent Documentation](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/)

ai_documentation_summary:
  {"purpose":"A community n8n node that enables AI agents to send transactional emails and SMS messages via Taximail API, verify OTP codes, and check message delivery status.","capabilities":["Send transactional emails with custom content or template keys","Send SMS messages with custom text or template keys","Send OTP verification codes via SMS","Verify OTP codes entered by users using saved message IDs","Check delivery status of previously sent messages","Automatic context management for AI agents to track message IDs","Phone number format conversion to MSISDN"],"authentication":"API Key and Secret Key required via n8n credential type 'Taximail API'","commonUseCases":["AI-driven customer communication workflows","Two-factor authentication (2FA) verification flows","Transactional email and SMS notifications","Automated OTP verification without manual user intervention"],"limitations":["SMS text must be under 160 characters","Requires n8n version 1.45.0 or higher","Requires manual setup of Taximail API credentials","AI agent configuration requires specific prompt structure for optimal context handling"],"relatedNodes":["n8n AI Agent node","n8n Simple Memory node","Taximail API node (if available)"]}


node_type: n8n-nodes-awork.awork
package_name: n8n-nodes-awork
display_name: awork
description: Automate your workflows with the awork API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: awork
author_github_url: https://github.com/awork-io/
npm_package_name: n8n-nodes-awork
npm_version: 0.1.62
community_fetched_at: 2026-07-14T14:40:33.171Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "project",
      "options": [
        {
          "name": "Company",
          "value": "company"
        },
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "Project",
          "value": "project"
        },
        {
          "name": "Project Task",
          "value": "projecttask"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get All Projects",
          "value": "getall",
          "action": "Get projects",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/projects",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Get Project by ID",
          "value": "get",
          "action": "Get project by id",
          "routing": {
            "request": {
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get All Project Statuses",
          "value": "getprojectstatuses",
          "action": "Get all project statuses",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/projectstatuses",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Get Project Statuses of Project",
          "value": "getprojectstatusesofproject",
          "action": "Get project statuses of project by id",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/projectstatuses",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Create Project",
          "value": "post",
          "action": "Create a project",
          "routing": {
            "request": {
              "url": "=api/v1/projects",
              "body": {
                "name": "={{$parameter[\"projectName\"]}}",
                "dueDate": "={{$parameter[\"dueDate\"]}}",
                "companyId": "={{$parameter[\"companyId\"] || undefined}}",
                "startDate": "={{$parameter[\"startDate\"]}}",
                "description": "={{$parameter[\"projectDescription\"]}}",
                "projectTypeId": "={{$parameter[\"projectTypeId\"] || undefined}}",
                "projectStatusId": "={{$parameter[\"projectStatusId\"] || undefined}}",
                "projectTemplateId": "={{$parameter[\"projectTemplateId\"] || undefined}}"
              },
              "method": "POST"
            }
          },
          "description": "Create a project by sending project details"
        },
        {
          "name": "Get Task Statuses of Project",
          "value": "gettaskstatuses",
          "action": "Get task statuses of project by id",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/taskstatuses",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Get Task Lists of Project",
          "value": "gettasklists",
          "action": "Get task lists of project by id",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/tasklists",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Create Project Status",
          "value": "postprojectstatus",
          "action": "Create a project status",
          "routing": {
            "request": {
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/projectstatuses",
              "body": {
                "name": "={{$parameter[\"statusName\"]}}",
                "type": "={{$parameter[\"statusType\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Create a project status by sending project status details"
        },
        {
          "name": "Change Project Status",
          "value": "changeprojectstatus",
          "action": "Change the project status",
          "routing": {
            "request": {
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/changestatus",
              "body": {
                "projectStatusId": "={{$parameter[\"projectStatusId\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Changes the project status of a project"
        },
        {
          "name": "Create Task Status",
          "value": "posttaskstatus",
          "action": "Create a task status",
          "routing": {
            "request": {
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/taskstatuses",
              "body": {
                "icon": "={{$parameter[\"taskStatusIcon\"]}}",
                "name": "={{$parameter[\"statusName\"]}}",
                "type": "={{$parameter[\"statusType\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Create a task status by sending task status details"
        },
        {
          "name": "Create Task List",
          "value": "posttasklist",
          "action": "Create a task list",
          "routing": {
            "request": {
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/tasklists",
              "body": {
                "name": "={{$parameter[\"name\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Create a task list for the project"
        },
        {
          "name": "Get Comments",
          "value": "getcomments",
          "action": "Get comments of project",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/comments",
              "method": "GET"
            },
            "operations": {}
          },
          "description": "Get comments of a project by project ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Tasks of Project",
          "value": "gettasksofproject",
          "action": "Get tasks of a project",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/projecttasks",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Get Task by ID",
          "value": "get",
          "action": "Get task by id",
          "routing": {
            "request": {
              "url": "=api/v1/tasks/{{$parameter[\"taskId\"]}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Create Task",
          "value": "post",
          "action": "Create a project task",
          "routing": {
            "request": {
              "url": "=api/v1/tasks",
              "body": {
                "name": "={{$parameter[\"taskName\"]}}",
                "dueOn": "={{$parameter[\"dueDate\"] || undefined}}",
                "baseType": "projecttask",
                "entityId": "={{$parameter[\"projectId\"]}}",
                "description": "={{$parameter[\"taskDescription\"] || undefined}}",
                "taskStatusId": "={{$parameter[\"taskStatusId\"] || undefined}}",
                "typeOfWorkId": "={{$parameter[\"typeOfWorkId\"] || undefined}}",
                "plannedDuration": "={{$parameter[\"plannedDuration\"] || undefined}}"
              },
              "method": "POST"
            }
          },
          "description": "Create a task in a project by sending task details"
        },
        {
          "name": "Set Custom Field",
          "value": "settaskcustomfield",
          "action": "Set a custom field",
          "routing": {
            "request": {
              "url": "=api/v1/tasks/{{$parameter[\"taskId\"]}}/setcustomfields",
              "body": [
                {
                  "textValue": "={{$parameter[\"textValue\"]}}",
                  "customFieldDefinitionId": "={{$parameter[\"customFieldDefinitionId\"]}}"
                }
              ],
              "method": "POST"
            }
          }
        },
        {
          "name": "Add Tag",
          "value": "addtag",
          "action": "Add tag",
          "routing": {
            "request": {
              "url": "=api/v1/tasks/{{$parameter[\"taskId\"]}}/addtags",
              "body": [
                {
                  "name": "={{$parameter[\"tagName\"]}}"
                }
              ],
              "method": "POST"
            }
          }
        },
        {
          "name": "Change Status",
          "value": "changestatus",
          "action": "Change status",
          "routing": {
            "request": {
              "url": "=api/v1/tasks/changestatuses",
              "body": [
                {
                  "taskId": "={{$parameter[\"taskId\"]}}",
                  "statusId": "={{$parameter[\"statusId\"]}}"
                }
              ],
              "method": "POST"
            }
          }
        },
        {
          "name": "Add Comment",
          "value": "comments",
          "action": "Add comment",
          "routing": {
            "request": {
              "url": "=api/v1/tasks/{{$parameter[\"taskId\"]}}/comments",
              "body": {
                "message": "={{$parameter[\"commentMessage\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Set Task Assignee",
          "value": "settaskassignee",
          "action": "Set a task assignee",
          "routing": {
            "request": {
              "url": "=api/v1/tasks/{{$parameter[\"taskId\"]}}/setassignees",
              "body": [
                "={{$parameter[\"userId\"]}}"
              ],
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Types of Work",
          "value": "gettypesofwork",
          "action": "Get types of work",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/typeofwork",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Get Task Lists of Project",
          "value": "gettasklistsofproject",
          "action": "Get task lists of a project",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/tasklists",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Create Type of Work",
          "value": "posttypeofwork",
          "action": "Create a type of work",
          "routing": {
            "request": {
              "url": "=api/v1/typeofwork",
              "body": {
                "icon": "={{$parameter[\"icon\"]}}",
                "name": "={{$parameter[\"name\"]}}",
                "description": "={{$parameter[\"description\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Add Task to Task List",
          "value": "postaddtasktotasklist",
          "action": "Add a task to a task list",
          "routing": {
            "request": {
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/tasklists/{{$parameter[\"taskListId\"]}}/addtasks",
              "body": [
                {
                  "taskId": "={{$parameter[\"taskId\"]}}"
                }
              ],
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Comments",
          "value": "getcomments",
          "action": "Get comments of task",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/tasks/{{$parameter[\"taskId\"]}}/comments",
              "method": "GET"
            },
            "operations": {}
          },
          "description": "Get comments of a task by task ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "projecttask"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get All Users",
          "value": "getall",
          "action": "Get users",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/users",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Get User by ID",
          "value": "get",
          "action": "Get user by id",
          "routing": {
            "request": {
              "url": "=api/v1/users/{{$parameter[\"userId\"]}}",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create Company",
          "value": "create",
          "action": "Create a company",
          "routing": {
            "request": {
              "url": "=api/v1/companies",
              "body": {
                "name": "={{$parameter[\"companyName\"]}}",
                "industry": "={{$parameter[\"companyIndustry\"] || undefined}}",
                "description": "={{$parameter[\"companyDescription\"] || undefined}}"
              },
              "method": "POST"
            }
          },
          "description": "Create a company by sending company details"
        },
        {
          "name": "Get All Companies",
          "value": "getall",
          "action": "Get companies",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/companies",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Get Company by ID",
          "value": "get",
          "action": "Get company by id",
          "routing": {
            "request": {
              "url": "=api/v1/companies/{{$parameter[\"companyId\"]}}",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getall",
      "options": [
        {
          "name": "Get All Documents",
          "value": "getall",
          "action": "Get all documents",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/documents",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Get Document by ID",
          "value": "get",
          "action": "Get document by id",
          "routing": {
            "request": {
              "url": "=api/v1/documents/{{$parameter[\"documentId\"]}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Document Content",
          "value": "getcontent",
          "action": "Get document content",
          "routing": {
            "request": {
              "url": "=api/v1/documents/{{$parameter[\"documentId\"]}}/content",
              "method": "GET"
            }
          },
          "description": "Get the HTML content of a document"
        },
        {
          "name": "Get Documents of Document Space",
          "value": "getdocumentsofdocumentspace",
          "action": "Get documents of a document space",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/documentspaces/{{$parameter[\"documentSpaceId\"]}}/documents",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Get Documents of Project",
          "value": "getdocumentsofproject",
          "action": "Get documents of a project",
          "routing": {
            "send": {
              "paginate": true
            },
            "request": {
              "qs": {
                "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
                "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
              },
              "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/documents",
              "method": "GET"
            },
            "operations": {}
          }
        },
        {
          "name": "Create Document",
          "value": "create",
          "action": "Create a document",
          "routing": {
            "request": {
              "url": "=api/v1/documents",
              "body": {
                "name": "={{$parameter[\"documentName\"]}}",
                "emoji": "={{$parameter[\"emoji\"] || undefined}}",
                "content": "={{$parameter[\"documentContent\"]}}",
                "parentId": "={{$parameter[\"parentId\"] || undefined}}",
                "projectId": "={{$parameter[\"projectId\"] || undefined}}",
                "documentSpaceId": "={{$parameter[\"documentSpaceId\"] || undefined}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Delete Document",
          "value": "delete",
          "action": "Delete a document",
          "routing": {
            "request": {
              "url": "=api/v1/documents/{{$parameter[\"documentId\"]}}",
              "method": "DELETE"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get All Projects",
      "value": "getall",
      "action": "Get projects",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/projects",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "project"
    },
    {
      "name": "Get Project by ID",
      "value": "get",
      "action": "Get project by id",
      "routing": {
        "request": {
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}",
          "method": "GET"
        }
      },
      "resource": "project"
    },
    {
      "name": "Get All Project Statuses",
      "value": "getprojectstatuses",
      "action": "Get all project statuses",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/projectstatuses",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "project"
    },
    {
      "name": "Get Project Statuses of Project",
      "value": "getprojectstatusesofproject",
      "action": "Get project statuses of project by id",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/projectstatuses",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "project"
    },
    {
      "name": "Create Project",
      "value": "post",
      "action": "Create a project",
      "routing": {
        "request": {
          "url": "=api/v1/projects",
          "body": {
            "name": "={{$parameter[\"projectName\"]}}",
            "dueDate": "={{$parameter[\"dueDate\"]}}",
            "companyId": "={{$parameter[\"companyId\"] || undefined}}",
            "startDate": "={{$parameter[\"startDate\"]}}",
            "description": "={{$parameter[\"projectDescription\"]}}",
            "projectTypeId": "={{$parameter[\"projectTypeId\"] || undefined}}",
            "projectStatusId": "={{$parameter[\"projectStatusId\"] || undefined}}",
            "projectTemplateId": "={{$parameter[\"projectTemplateId\"] || undefined}}"
          },
          "method": "POST"
        }
      },
      "description": "Create a project by sending project details",
      "resource": "project"
    },
    {
      "name": "Get Task Statuses of Project",
      "value": "gettaskstatuses",
      "action": "Get task statuses of project by id",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/taskstatuses",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "project"
    },
    {
      "name": "Get Task Lists of Project",
      "value": "gettasklists",
      "action": "Get task lists of project by id",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/tasklists",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "project"
    },
    {
      "name": "Create Project Status",
      "value": "postprojectstatus",
      "action": "Create a project status",
      "routing": {
        "request": {
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/projectstatuses",
          "body": {
            "name": "={{$parameter[\"statusName\"]}}",
            "type": "={{$parameter[\"statusType\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Create a project status by sending project status details",
      "resource": "project"
    },
    {
      "name": "Change Project Status",
      "value": "changeprojectstatus",
      "action": "Change the project status",
      "routing": {
        "request": {
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/changestatus",
          "body": {
            "projectStatusId": "={{$parameter[\"projectStatusId\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Changes the project status of a project",
      "resource": "project"
    },
    {
      "name": "Create Task Status",
      "value": "posttaskstatus",
      "action": "Create a task status",
      "routing": {
        "request": {
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/taskstatuses",
          "body": {
            "icon": "={{$parameter[\"taskStatusIcon\"]}}",
            "name": "={{$parameter[\"statusName\"]}}",
            "type": "={{$parameter[\"statusType\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Create a task status by sending task status details",
      "resource": "project"
    },
    {
      "name": "Create Task List",
      "value": "posttasklist",
      "action": "Create a task list",
      "routing": {
        "request": {
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/tasklists",
          "body": {
            "name": "={{$parameter[\"name\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Create a task list for the project",
      "resource": "project"
    },
    {
      "name": "Get Comments",
      "value": "getcomments",
      "action": "Get comments of project",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/comments",
          "method": "GET"
        },
        "operations": {}
      },
      "description": "Get comments of a project by project ID",
      "resource": "project"
    },
    {
      "name": "Get Tasks of Project",
      "value": "gettasksofproject",
      "action": "Get tasks of a project",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/projecttasks",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "projecttask"
    },
    {
      "name": "Get Task by ID",
      "value": "get",
      "action": "Get task by id",
      "routing": {
        "request": {
          "url": "=api/v1/tasks/{{$parameter[\"taskId\"]}}",
          "method": "GET"
        }
      },
      "resource": "projecttask"
    },
    {
      "name": "Create Task",
      "value": "post",
      "action": "Create a project task",
      "routing": {
        "request": {
          "url": "=api/v1/tasks",
          "body": {
            "name": "={{$parameter[\"taskName\"]}}",
            "dueOn": "={{$parameter[\"dueDate\"] || undefined}}",
            "baseType": "projecttask",
            "entityId": "={{$parameter[\"projectId\"]}}",
            "description": "={{$parameter[\"taskDescription\"] || undefined}}",
            "taskStatusId": "={{$parameter[\"taskStatusId\"] || undefined}}",
            "typeOfWorkId": "={{$parameter[\"typeOfWorkId\"] || undefined}}",
            "plannedDuration": "={{$parameter[\"plannedDuration\"] || undefined}}"
          },
          "method": "POST"
        }
      },
      "description": "Create a task in a project by sending task details",
      "resource": "projecttask"
    },
    {
      "name": "Set Custom Field",
      "value": "settaskcustomfield",
      "action": "Set a custom field",
      "routing": {
        "request": {
          "url": "=api/v1/tasks/{{$parameter[\"taskId\"]}}/setcustomfields",
          "body": [
            {
              "textValue": "={{$parameter[\"textValue\"]}}",
              "customFieldDefinitionId": "={{$parameter[\"customFieldDefinitionId\"]}}"
            }
          ],
          "method": "POST"
        }
      },
      "resource": "projecttask"
    },
    {
      "name": "Add Tag",
      "value": "addtag",
      "action": "Add tag",
      "routing": {
        "request": {
          "url": "=api/v1/tasks/{{$parameter[\"taskId\"]}}/addtags",
          "body": [
            {
              "name": "={{$parameter[\"tagName\"]}}"
            }
          ],
          "method": "POST"
        }
      },
      "resource": "projecttask"
    },
    {
      "name": "Change Status",
      "value": "changestatus",
      "action": "Change status",
      "routing": {
        "request": {
          "url": "=api/v1/tasks/changestatuses",
          "body": [
            {
              "taskId": "={{$parameter[\"taskId\"]}}",
              "statusId": "={{$parameter[\"statusId\"]}}"
            }
          ],
          "method": "POST"
        }
      },
      "resource": "projecttask"
    },
    {
      "name": "Add Comment",
      "value": "comments",
      "action": "Add comment",
      "routing": {
        "request": {
          "url": "=api/v1/tasks/{{$parameter[\"taskId\"]}}/comments",
          "body": {
            "message": "={{$parameter[\"commentMessage\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "projecttask"
    },
    {
      "name": "Set Task Assignee",
      "value": "settaskassignee",
      "action": "Set a task assignee",
      "routing": {
        "request": {
          "url": "=api/v1/tasks/{{$parameter[\"taskId\"]}}/setassignees",
          "body": [
            "={{$parameter[\"userId\"]}}"
          ],
          "method": "POST"
        }
      },
      "resource": "projecttask"
    },
    {
      "name": "Get Types of Work",
      "value": "gettypesofwork",
      "action": "Get types of work",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/typeofwork",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "projecttask"
    },
    {
      "name": "Get Task Lists of Project",
      "value": "gettasklistsofproject",
      "action": "Get task lists of a project",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/tasklists",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "projecttask"
    },
    {
      "name": "Create Type of Work",
      "value": "posttypeofwork",
      "action": "Create a type of work",
      "routing": {
        "request": {
          "url": "=api/v1/typeofwork",
          "body": {
            "icon": "={{$parameter[\"icon\"]}}",
            "name": "={{$parameter[\"name\"]}}",
            "description": "={{$parameter[\"description\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "projecttask"
    },
    {
      "name": "Add Task to Task List",
      "value": "postaddtasktotasklist",
      "action": "Add a task to a task list",
      "routing": {
        "request": {
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/tasklists/{{$parameter[\"taskListId\"]}}/addtasks",
          "body": [
            {
              "taskId": "={{$parameter[\"taskId\"]}}"
            }
          ],
          "method": "POST"
        }
      },
      "resource": "projecttask"
    },
    {
      "name": "Get Comments",
      "value": "getcomments",
      "action": "Get comments of task",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/tasks/{{$parameter[\"taskId\"]}}/comments",
          "method": "GET"
        },
        "operations": {}
      },
      "description": "Get comments of a task by task ID",
      "resource": "projecttask"
    },
    {
      "name": "Get All Users",
      "value": "getall",
      "action": "Get users",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/users",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "user"
    },
    {
      "name": "Get User by ID",
      "value": "get",
      "action": "Get user by id",
      "routing": {
        "request": {
          "url": "=api/v1/users/{{$parameter[\"userId\"]}}",
          "method": "GET"
        }
      },
      "resource": "user"
    },
    {
      "name": "Create Company",
      "value": "create",
      "action": "Create a company",
      "routing": {
        "request": {
          "url": "=api/v1/companies",
          "body": {
            "name": "={{$parameter[\"companyName\"]}}",
            "industry": "={{$parameter[\"companyIndustry\"] || undefined}}",
            "description": "={{$parameter[\"companyDescription\"] || undefined}}"
          },
          "method": "POST"
        }
      },
      "description": "Create a company by sending company details",
      "resource": "company"
    },
    {
      "name": "Get All Companies",
      "value": "getall",
      "action": "Get companies",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/companies",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "company"
    },
    {
      "name": "Get Company by ID",
      "value": "get",
      "action": "Get company by id",
      "routing": {
        "request": {
          "url": "=api/v1/companies/{{$parameter[\"companyId\"]}}",
          "method": "GET"
        }
      },
      "resource": "company"
    },
    {
      "name": "Get All Documents",
      "value": "getall",
      "action": "Get all documents",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/documents",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "document"
    },
    {
      "name": "Get Document by ID",
      "value": "get",
      "action": "Get document by id",
      "routing": {
        "request": {
          "url": "=api/v1/documents/{{$parameter[\"documentId\"]}}",
          "method": "GET"
        }
      },
      "resource": "document"
    },
    {
      "name": "Get Document Content",
      "value": "getcontent",
      "action": "Get document content",
      "routing": {
        "request": {
          "url": "=api/v1/documents/{{$parameter[\"documentId\"]}}/content",
          "method": "GET"
        }
      },
      "description": "Get the HTML content of a document",
      "resource": "document"
    },
    {
      "name": "Get Documents of Document Space",
      "value": "getdocumentsofdocumentspace",
      "action": "Get documents of a document space",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/documentspaces/{{$parameter[\"documentSpaceId\"]}}/documents",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "document"
    },
    {
      "name": "Get Documents of Project",
      "value": "getdocumentsofproject",
      "action": "Get documents of a project",
      "routing": {
        "send": {
          "paginate": true
        },
        "request": {
          "qs": {
            "orderBy": "={{$parameter[\"orderBy\"] || undefined}}",
            "filterBy": "={{$parameter[\"filterBy\"] || undefined}}"
          },
          "url": "=api/v1/projects/{{$parameter[\"projectId\"]}}/documents",
          "method": "GET"
        },
        "operations": {}
      },
      "resource": "document"
    },
    {
      "name": "Create Document",
      "value": "create",
      "action": "Create a document",
      "routing": {
        "request": {
          "url": "=api/v1/documents",
          "body": {
            "name": "={{$parameter[\"documentName\"]}}",
            "emoji": "={{$parameter[\"emoji\"] || undefined}}",
            "content": "={{$parameter[\"documentContent\"]}}",
            "parentId": "={{$parameter[\"parentId\"] || undefined}}",
            "projectId": "={{$parameter[\"projectId\"] || undefined}}",
            "documentSpaceId": "={{$parameter[\"documentSpaceId\"] || undefined}}"
          },
          "method": "POST"
        }
      },
      "resource": "document"
    },
    {
      "name": "Delete Document",
      "value": "delete",
      "action": "Delete a document",
      "routing": {
        "request": {
          "url": "=api/v1/documents/{{$parameter[\"documentId\"]}}",
          "method": "DELETE"
        }
      },
      "resource": "document"
    }
  ]

npm_readme:
  # n8n-nodes-awork

  This is an n8n community node that lets you automate workflows with [awork](https://www.awork.com/), a modern project management tool. It provides seamless integration between awork and n8n, allowing you to manage projects, tasks, and company/client data within your automation workflows.

  ## Installation

  ### n8n Cloud
  1. Select **+** on your canvas and type **awork**
  2. Find **awork** in the **More from the community** section
  3. Select **install**

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

  ### Self-Hosted Instance
  1. Navigate to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-awork` in **Enter npm package name**
  4. Select **Install**
  5. **Restart your n8n instance** after installation

  ## Authentication

  To use the awork node, you'll need API credentials from awork:

  1. **Create an awork account** at [awork.com](https://www.awork.com/) if you don't have one
  2. **Generate an API key** by following the instructions in the [awork API Authentication documentation](https://developers.awork.com/authentication#api-key)
  3. **In n8n**, add new credentials:
     - Select **"awork API"** from the credentials list
     - Enter your API key
     - Test the connection to ensure it's working

  ## Available Operations

  The awork node provide comprehensive access to awork's project management features, including:

  ### Projects
  - **Create Project**: Start new projects with custom settings
  - **Get Project**: Retrieve project information
  - **List Projects**: Get all projects with filtering options
  - **Change Project Status**: Changes the status of a project

  ### Tasks
  - **Create Task**: Add new tasks to projects
  - **Get Task**: Retrieve specific task information
  - **List Tasks**: Get tasks with advanced filtering
  - **Change Task Status**: Changes the status of a task
  - **Set Task Custom Fields**: Sets the value of a task custom field
  - **Add Task Comment**: Adds a comment to a task

  ### Companies
  - **Create Company**: Add new companies to your workspace
  - **Get Company**: Retrieve company details
  - **List Companies**: Get all companies with filtering

  ### Users
  - **List Users**: Get all users with filtering

  ### Other
  - **HTTP**: With a generic HTTP Request, any awork API endpoint can be used

  For detailed information about each operation and its parameters, visit the relevant sections in the [awork Developer Documentation](https://developers.awork.com/):
  - [Projects](https://developers.awork.com/projects)
  - [Tasks](https://developers.awork.com/tasks)
  - [Companies](https://developers.awork.com/companies)
  - [Users](https://developers.awork.com/users)

  ## Example Workflows

  Here are some common use cases for the awork nodes:

  1. **Automated Project Creation**: Create projects in awork when new deals are won in your CRM
  2. **Task Synchronization**: Sync tasks between awork and other project management tools
  3. **Company Management**: Automatically create companies in awork from form submissions
  4. **Status Updates**: Update task statuses based on external triggers
  5. **Reporting**: Extract project and task data for custom reporting dashboards

  ## Resources

  - **awork Developer Documentation**: [developers.awork.com](https://developers.awork.com/)
  - **awork Developer Forum**: [community.awork.com/c/developer-forum/17](https://community.awork.com/c/developer-forum/17)
  - **n8n Documentation**: [docs.n8n.io](https://docs.n8n.io/)
  - **n8n Community**: [community.n8n.io](https://community.n8n.io/)

  ## Support

  If you encounter any issues or have questions:

  - Check the [awork Developer Forum](https://community.awork.com/c/developer-forum/17) for API-related questions
  - Visit the [n8n Community Forum](https://community.n8n.io/) for n8n-specific issues

  ## Local Development

  For contributors and developers who want to test changes locally:

  1. Clone the repository:
     ```bash
     git clone https://github.com/awork-io/n8n-nodes-awork
     cd n8n-nodes-awork
     ```

  2. Install dependencies and build:
     ```bash
     npm install
     npm run build
     ```

  3. Link to your local n8n installation:
     ```bash
     npm link
     cd ~/.n8n/custom
     npm link n8n-nodes-awork
     ```

  4. Start n8n:
     ```bash
     n8n start
     ```

  ## License

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

ai_documentation_summary:
  {"purpose":"This n8n community node automates workflows with awork, a modern project management tool, enabling management of projects, tasks, companies, and users within n8n workflows.","capabilities":["Create projects with custom settings","Retrieve and list projects with filtering","Change project status","Create tasks and set custom fields","Retrieve and list tasks with advanced filtering","Change task status","Add comments to tasks","Create and retrieve company details","List companies with filtering","List users with filtering"],"authentication":"API key required","commonUseCases":["Automated project creation from CRM deals","Task synchronization between project management tools","Automatic company creation from form submissions","Status updates based on external triggers","Extracting project and task data for reporting dashboards"],"limitations":["Community node (may have fewer updates or support compared to official nodes)","Requires manual API key setup in n8n credentials"],"relatedNodes":["HTTP Request","Generic HTTP Request"]}


node_type: n8n-nodes-upload-post.uploadPost
package_name: n8n-nodes-upload-post
display_name: Upload Post
description: Upload content to social media via Upload-Post API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: upload-post
author_github_url: https://github.com/Upload-Post/
npm_package_name: n8n-nodes-upload-post
npm_version: 0.1.48
community_fetched_at: 2026-07-14T14:40:33.172Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "uploads",
      "options": [
        {
          "name": "Upload",
          "value": "uploads"
        },
        {
          "name": "Instagram",
          "value": "instagram"
        },
        {
          "name": "Status & History",
          "value": "monitoring"
        },
        {
          "name": "User",
          "value": "users"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadPhotos",
      "options": [
        {
          "name": "Upload Document",
          "value": "uploadDocument",
          "action": "Upload a document",
          "description": "Upload a document (PDF, PPT, PPTX, DOC, DOCX) as a native carousel/viewer (Supports: LinkedIn only)"
        },
        {
          "name": "Upload Photo(s)",
          "value": "uploadPhotos",
          "action": "Upload photos",
          "description": "Upload one or more photos (Supports: TikTok, Instagram, LinkedIn, Facebook, X, Threads)"
        },
        {
          "name": "Upload Text",
          "value": "uploadText",
          "action": "Upload a text post",
          "description": "Upload a text-based post (Supports: X, LinkedIn, Facebook, Threads)"
        },
        {
          "name": "Upload Video",
          "value": "uploadVideo",
          "action": "Upload a video",
          "description": "Upload a single video (Supports: TikTok, Instagram, LinkedIn, YouTube, Facebook, X, Threads)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "uploads"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStatus",
      "options": [
        {
          "name": "Cancel Scheduled Post",
          "value": "cancelScheduled",
          "action": "Cancel scheduled post",
          "description": "Cancel a scheduled post by its job ID"
        },
        {
          "name": "Edit Scheduled Post",
          "value": "editScheduled",
          "action": "Edit scheduled post",
          "description": "Edit schedule details (like date/time) by job ID"
        },
        {
          "name": "Get Analytics",
          "value": "getAnalytics",
          "action": "Get analytics",
          "description": "Retrieve aggregated analytics for uploads"
        },
        {
          "name": "Get Job Status",
          "value": "getJobStatus",
          "action": "Get job status",
          "description": "Check the status of a scheduled or queued post using the job_id"
        },
        {
          "name": "Get Upload History",
          "value": "getHistory",
          "action": "Get upload history",
          "description": "List past uploads with optional filters"
        },
        {
          "name": "Get Upload Status",
          "value": "getStatus",
          "action": "Get upload status",
          "description": "Check the status of an upload using the request_id"
        },
        {
          "name": "List Scheduled Posts",
          "value": "listScheduled",
          "action": "List scheduled posts",
          "description": "List your scheduled (future) posts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "monitoring"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listUsers",
      "options": [
        {
          "name": "Create User",
          "value": "createUser",
          "action": "Create user",
          "description": "Create a new Upload-Post user (profile name)"
        },
        {
          "name": "Delete User",
          "value": "deleteUser",
          "action": "Delete user",
          "description": "Delete an existing Upload-Post user by profile name"
        },
        {
          "name": "Generate JWT (for Platform Integration)",
          "value": "generateJwt",
          "action": "Generate jwt for platform integration",
          "description": "Generate a connection URL (JWT) for a profile. Only needed when integrating Upload-Post into your own platform."
        },
        {
          "name": "Get Notification Preferences",
          "value": "getNotificationPrefs",
          "action": "Get notification preferences",
          "description": "Get current webhook and notification settings"
        },
        {
          "name": "Get User Preferences",
          "value": "getUserPreferences",
          "action": "Get user preferences",
          "description": "Get user preferences including calendar week start day"
        },
        {
          "name": "List Users",
          "value": "listUsers",
          "action": "List users",
          "description": "List Upload-Post users (profiles)"
        },
        {
          "name": "Update Notification Preferences",
          "value": "updateNotificationPrefs",
          "action": "Update notification preferences",
          "description": "Configure webhook URL and event types for real-time notifications (upload_completed, social_account.connected, social_account.disconnected, social_account.reauth_required)"
        },
        {
          "name": "Update User Preferences",
          "value": "updateUserPreferences",
          "action": "Update user preferences",
          "description": "Update user preferences including calendar week start day (0=Sunday, 1=Monday)"
        },
        {
          "name": "Validate JWT (for Platform Integration)",
          "value": "validateJwt",
          "action": "Validate jwt for platform integration",
          "description": "Validate a connection token from your backend. Only needed for custom platform integration."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "users"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPostComments",
      "options": [
        {
          "name": "Get Post Comments",
          "value": "getPostComments",
          "action": "Get post comments",
          "description": "Retrieve all comments on a specific Instagram post"
        },
        {
          "name": "Private Reply to Comment",
          "value": "privateReplyToComment",
          "action": "Private reply to comment",
          "description": "Send a private reply (DM) to the author of a comment"
        },
        {
          "name": "Public Reply to Comment",
          "value": "publicReplyToComment",
          "action": "Public reply to comment",
          "description": "Post a public reply visible under the original comment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "instagram"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Upload Document",
      "value": "uploadDocument",
      "action": "Upload a document",
      "description": "Upload a document (PDF, PPT, PPTX, DOC, DOCX) as a native carousel/viewer (Supports: LinkedIn only)",
      "resource": "uploads"
    },
    {
      "name": "Upload Photo(s)",
      "value": "uploadPhotos",
      "action": "Upload photos",
      "description": "Upload one or more photos (Supports: TikTok, Instagram, LinkedIn, Facebook, X, Threads)",
      "resource": "uploads"
    },
    {
      "name": "Upload Text",
      "value": "uploadText",
      "action": "Upload a text post",
      "description": "Upload a text-based post (Supports: X, LinkedIn, Facebook, Threads)",
      "resource": "uploads"
    },
    {
      "name": "Upload Video",
      "value": "uploadVideo",
      "action": "Upload a video",
      "description": "Upload a single video (Supports: TikTok, Instagram, LinkedIn, YouTube, Facebook, X, Threads)",
      "resource": "uploads"
    },
    {
      "name": "Cancel Scheduled Post",
      "value": "cancelScheduled",
      "action": "Cancel scheduled post",
      "description": "Cancel a scheduled post by its job ID",
      "resource": "monitoring"
    },
    {
      "name": "Edit Scheduled Post",
      "value": "editScheduled",
      "action": "Edit scheduled post",
      "description": "Edit schedule details (like date/time) by job ID",
      "resource": "monitoring"
    },
    {
      "name": "Get Analytics",
      "value": "getAnalytics",
      "action": "Get analytics",
      "description": "Retrieve aggregated analytics for uploads",
      "resource": "monitoring"
    },
    {
      "name": "Get Job Status",
      "value": "getJobStatus",
      "action": "Get job status",
      "description": "Check the status of a scheduled or queued post using the job_id",
      "resource": "monitoring"
    },
    {
      "name": "Get Upload History",
      "value": "getHistory",
      "action": "Get upload history",
      "description": "List past uploads with optional filters",
      "resource": "monitoring"
    },
    {
      "name": "Get Upload Status",
      "value": "getStatus",
      "action": "Get upload status",
      "description": "Check the status of an upload using the request_id",
      "resource": "monitoring"
    },
    {
      "name": "List Scheduled Posts",
      "value": "listScheduled",
      "action": "List scheduled posts",
      "description": "List your scheduled (future) posts",
      "resource": "monitoring"
    },
    {
      "name": "Create User",
      "value": "createUser",
      "action": "Create user",
      "description": "Create a new Upload-Post user (profile name)",
      "resource": "users"
    },
    {
      "name": "Delete User",
      "value": "deleteUser",
      "action": "Delete user",
      "description": "Delete an existing Upload-Post user by profile name",
      "resource": "users"
    },
    {
      "name": "Generate JWT (for Platform Integration)",
      "value": "generateJwt",
      "action": "Generate jwt for platform integration",
      "description": "Generate a connection URL (JWT) for a profile. Only needed when integrating Upload-Post into your own platform.",
      "resource": "users"
    },
    {
      "name": "Get Notification Preferences",
      "value": "getNotificationPrefs",
      "action": "Get notification preferences",
      "description": "Get current webhook and notification settings",
      "resource": "users"
    },
    {
      "name": "Get User Preferences",
      "value": "getUserPreferences",
      "action": "Get user preferences",
      "description": "Get user preferences including calendar week start day",
      "resource": "users"
    },
    {
      "name": "List Users",
      "value": "listUsers",
      "action": "List users",
      "description": "List Upload-Post users (profiles)",
      "resource": "users"
    },
    {
      "name": "Update Notification Preferences",
      "value": "updateNotificationPrefs",
      "action": "Update notification preferences",
      "description": "Configure webhook URL and event types for real-time notifications (upload_completed, social_account.connected, social_account.disconnected, social_account.reauth_required)",
      "resource": "users"
    },
    {
      "name": "Update User Preferences",
      "value": "updateUserPreferences",
      "action": "Update user preferences",
      "description": "Update user preferences including calendar week start day (0=Sunday, 1=Monday)",
      "resource": "users"
    },
    {
      "name": "Validate JWT (for Platform Integration)",
      "value": "validateJwt",
      "action": "Validate jwt for platform integration",
      "description": "Validate a connection token from your backend. Only needed for custom platform integration.",
      "resource": "users"
    },
    {
      "name": "Get Post Comments",
      "value": "getPostComments",
      "action": "Get post comments",
      "description": "Retrieve all comments on a specific Instagram post",
      "resource": "instagram"
    },
    {
      "name": "Private Reply to Comment",
      "value": "privateReplyToComment",
      "action": "Private reply to comment",
      "description": "Send a private reply (DM) to the author of a comment",
      "resource": "instagram"
    },
    {
      "name": "Public Reply to Comment",
      "value": "publicReplyToComment",
      "action": "Public reply to comment",
      "description": "Post a public reply visible under the original comment",
      "resource": "instagram"
    }
  ]

npm_readme:
  # n8n-nodes-upload-post

  This is an n8n community node package for [Upload Post](https://www.upload-post.com/). It allows you to automate uploading photos, videos, and text posts to various social media platforms supported by the Upload Post API.

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

  ## Installation

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

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

  After installing the node, you can use it in your n8n workflows.

  ## Credentials

  To use this node, you need to configure the Upload Post API credentials:

  1.  Create an API key from your [Upload Post dashboard](https://www.upload-post.com/).
  2.  In n8n, go to **Credentials > New**.
  3.  Search for **Upload Post API** and select it.
  4.  Enter a **Credential Name**.
  5.  Paste your Upload Post API key into the **API Key** field.
  6.  Select **Save**.

  ## Operations

  The node provides the following operations grouped for clarity:

  ### Upload Actions
  - **Upload Photo(s)**: Upload one or more photos to supported platforms.
    - Supports file uploads and photo URLs (comma-separated list).
    - Common parameters: User Identifier, Platform Names or IDs, Title / Main Content, Description (optional), Photos (Files or URLs), Scheduled Date (optional).
    - Title/Description overrides per platform: `instagram_title`, `facebook_title`, `tiktok_title`, `linkedin_title`, `x_title`, `youtube_title`, `pinterest_title`, `threads_title`.
    - Platform-specific parameters available for: Discord, Facebook, Instagram, LinkedIn, Pinterest, Telegram, TikTok, X (Twitter).
    - **Pinterest**: Requires Board selection via dynamic selector.
    - **Instagram**: Media Type (Image/Stories), TikTok: Auto-add music, disable comments, brand content toggles.
    - **Facebook**: Page selection via dynamic selector.
    - **LinkedIn**: Visibility settings (Photos only), Page selection via dynamic selector.
    - **X (Twitter)**: Tagged user IDs, reply settings, geo place ID.

  - **Upload Video**: Upload a single video to supported platforms.
    - Supports file uploads and video URLs.
    - Common parameters: User Identifier, Platform Names or IDs, Title / Main Content, Description (optional), Video (File or URL), Scheduled Date (optional).
    - Title/Description overrides per platform: `instagram_title`, `facebook_title`, `tiktok_title`, `linkedin_title`, `x_title`, `youtube_title`, `pinterest_title`.
    - Platform-specific parameters available for: Discord, Facebook, Instagram, LinkedIn, Pinterest, Telegram, Threads, TikTok, X (Twitter), YouTube.
    - **YouTube**: Custom thumbnail (URL/binary), tags, category, privacy, embeddable, license, public stats, made for kids, synthetic media declaration, geo-restrictions, paid product placement, recording date, default language/audio language.
    - **Facebook**: Page selection, video state (Published/Draft), media type (Reels/Stories).
    - **Instagram**: Media type (Reels/Stories), share to feed, collaborators, cover URL, audio name, user tags, location ID, thumb offset.
    - **TikTok**: Privacy level, disable duet/stitch/comments, cover timestamp, brand content toggles, AI-generated content flag, post mode.
    - **LinkedIn**: Visibility settings, Page selection, video description.
    - **Pinterest**: Board selection, cover image options (URL/base64/keyframe).
    - **X (Twitter)**: Tagged user IDs, reply settings, nullcast, place ID, long text handling.

  - **Upload Text**: Upload a text-based post to supported platforms.
    - Common parameters: User Identifier, Platform Names or IDs, Title / Main Content (used as post content), Scheduled Date (optional).
    - Platform-specific parameters available for: Discord, Facebook, LinkedIn, Reddit, Telegram, Threads, X (Twitter).
    - **Facebook**: Page selection, link URL for preview.
    - **LinkedIn**: Page selection ("Me" for personal profile).
    - **X (Twitter)**: Reply settings, poll options (2-4 options, 5-10080 min duration), post URL, quote tweet ID, geo place ID, super followers exclusivity, community ID, sharing options, direct message deep link, card URI, long text handling.
    - **Threads**: Long text as single post option.
    - **Reddit**: Subreddit selection, flair ID.

  ### Status & History Actions
  - **Get Upload Status**: Check the status/result of an async upload by `request_id`.
    - Parameters: Request ID.
  - **Get Upload History**: List past uploads.
    - Parameters: Page (default 1), Limit (default 20). Limit can be 20, 50, or 100.
  - **Get Analytics**: Retrieve aggregated profile analytics.
    - Parameters: Profile Username, Platforms (required — at least one), Facebook Page ID (required when Facebook is selected), LinkedIn Page URN (optional).
    - Supported: Facebook, Instagram, LinkedIn, Pinterest, Reddit, Threads, TikTok, X, YouTube. Analytics are not available for Bluesky, Discord, Google Business or Telegram.
  - **Get Post Analytics**: Per-post metrics for an upload, by `request_id`.
    - Parameters: Request ID, Platform (optional filter).
  - **Get Post Analytics by Platform ID**: Per-post metrics for a post published outside Upload-Post.
    - Parameters: Platform Post ID, Platform, Profile Username.
  - **Get Total Impressions**: Impressions aggregated across connected platforms.
    - Parameters: Profile Username, Period or Start/End Date, Platforms, Breakdown.
  - **Get Platform Metrics**: Lists which metrics each platform exposes.
  - **Get Reddit Detailed Posts**: Detailed Reddit posts with full media information.
    - Parameters: Profile Username.

  ### Scheduled Posts
  - **List Scheduled Posts**: Lists future scheduled jobs.
  - **Cancel Scheduled Post**: Cancels a scheduled job by its Job ID.
  - **Edit Scheduled Post**: Updates a scheduled job (e.g., new scheduled date/time).
    - Tip: You can schedule any Upload action by providing the `Scheduled Date` during upload.

  ### Platform Selectors (Dynamic)
  - **Facebook Pages**: Dynamic picker for Facebook pages, or enter ID via expression. Required for all Facebook operations.
  - **LinkedIn Pages**: Dynamic picker for organization pages with "Me (Personal Profile)" option, or enter ID via expression.
  - **Pinterest Boards**: Dynamic picker for Pinterest boards, or enter ID via expression. Required for all Pinterest operations.

  ### User Actions (incl. JWT for custom platform integration)
  - ⚠️ **JWT endpoints are only needed if you integrate Upload-Post into your own platform** and want end-users to link their social accounts via your UI.
  - **List Users**: Retrieve Upload-Post profiles created under your API key.
  - **Create User**: Create a new user profile.
    - Parameters: New User Identifier (username).
  - **Delete User**: Delete an existing user profile.
    - Parameters: Username to delete.
  - **Generate JWT (for platform integration)**: Generate a connection URL (JWT) for a given profile so the user can link social accounts.
    - Parameters: User Identifier, optional redirect URL, logo image URL, redirect button text, platform restrictions.
  - **Validate JWT (for platform integration)**: Validate a connection token from your backend.
    - Parameters: JWT token (password field).

  Refer to the [Upload Post API Documentation](https://docs.upload-post.com) for detailed information on parameters and platform requirements.

  ### Waiting for asynchronous uploads

  Some uploads are processed asynchronously and the API returns immediately with a `request_id`. This happens when:
  - You enable "Upload Asynchronously" in the node, or
  - The upload exceeds the server's synchronous wait window, in which case the API switches to async mode automatically.

  Leaving "Upload Asynchronously" enabled is recommended. Turning it off holds the HTTP connection open for the whole upload, which makes a proxy or execution timeout — and therefore a retry — more likely.

  You have two ways to handle this in n8n:

  1) Best-effort polling inside the node
  - In Upload operations (Photos/Video/Text), enable "Wait for Completion".
  - Configure "Poll Interval (Seconds)" (default 10) and "Timeout (Seconds)".
  - The node sleeps between checks (using n8n's `sleep`) and calls `GET /api/uploadposts/status?request_id=...` until success/failure or timeout.
  - Note: This does not guarantee completion in hosted environments with strict execution limits.

  2) Workflow-level polling (recommended for reliability)
  - Use the Upload operation, read `request_id` from its output.
  - Add a Wait node (e.g., 10s), then call "Get Upload Status" passing the `request_id`.
  - Loop with an IF node until the status is final (success/failed) or a max attempts limit is reached.

  ### Duplicate posts and retries

  Every upload sends an `Idempotency-Key`. The API collapses two uploads carrying the same key within a 24-hour window into a single post, so a retried upload does not publish twice.

  The key is derived from the workflow execution, the node and the item index, so it stays the same when n8n's "Retry On Fail" re-runs the node, and changes when you genuinely start a new execution. Set the "Idempotency Key" field yourself only if you drive retries from outside n8n and need to control the key.

  If you saw duplicate posts on an older version of this node, upgrade: versions before 0.1.51 sent no key at all, and a node-level retry after a network timeout would publish the post a second time.

  ### Platform-Specific Options

  #### Facebook
  - **Page Selection**: Dynamic picker for Facebook pages (required for all operations).
  - **Media Type (Video)**: Reels or Stories.
  - **Video State**: Published or Draft.
  - **Link (Text)**: URL for link preview in text posts.

  #### LinkedIn
  - **Page Selection**: Dynamic picker for organization pages ("Me" option for personal profiles).
  - **Visibility (Photos/Video)**: Public, Connections, Logged In, Container (video only).
  - **Video Description**: User commentary for video posts.

  #### Instagram
  - **Media Type**: Image (feed photos), Stories, Reels (video).
  - **Video Options**: Share to feed, collaborators (comma-separated usernames), cover URL, audio name, user tags (comma-separated), location ID, thumb offset.
  - **Photo Cover Index**: Which photo to use as cover (0-based index).

  #### TikTok
  - **Photo Options**: Auto-add music, disable comments, photo cover index, brand content toggles (paid partnerships/third-party brands vs own business).
  - **Video Options**: Privacy level (Public/Mutual Friends/Followers/Self), disable duet/stitch/comments, cover timestamp (ms), brand content toggles, AI-generated content flag, post mode (Direct Post/Media Upload).
  - **Brand Content**: Separate toggles for paid partnerships and own business promotion.

  #### YouTube
  - **Video Metadata**: Tags (comma-separated), category ID, privacy status (public/unlisted/private), embeddable, license, public stats viewable.
  - **Compliance**: Made for kids declaration, self-declared made for kids (COPPA), contains synthetic media (AI transparency), has paid product placement (FTC).
  - **Geo-Restrictions**: Allowed/blocked countries (ISO 3166-1 alpha-2 codes, mutually exclusive).
  - **Language Settings**: Default language (title/description), default audio language.
  - **Recording Date**: ISO 8601 timestamp.
  - **Thumbnail**: Custom thumbnail via URL or binary file.

  #### X (Twitter)
  - **Common Options**: Tagged user IDs (comma-separated), reply settings (everyone/following/mentioned/verified/subscribers), geo place ID, long text as single post.
  - **Video/Photo Options**: Nullcast (promoted-only posts), place ID.
  - **Text Options**: Poll options (2-4 options, 25 chars max each, 5-10080 min duration), poll reply settings, post URL, quote tweet ID, card URI, direct message deep link.
  - **Community Features**: Community ID, share with followers.
  - **Super Followers**: Exclusive content for super followers.
  - **Validation**: Poll options mutually exclusive with card URI, quote tweet ID, and direct message deep link.

  #### Threads
  - **Text Options**: Long text as single post (otherwise creates thread if >500 chars).
  - **Video Options**: Description override support.

  #### Pinterest
  - **Board Selection**: Dynamic picker for Pinterest boards (required).
  - **Link**: Optional link attachment.
  - **Video Cover**: URL, base64 data with content type, or keyframe timestamp.

  #### Reddit
  - **Text Options**: Subreddit (without r/), flair ID for post categorization.

  ### Validation Rules & Restrictions

  #### X (Twitter) Poll Validation
  - **Options Count**: Must contain 2-4 non-empty options.
  - **Option Length**: Each option cannot exceed 25 characters.
  - **Duration**: Must be between 5 and 10080 minutes (5 minutes to 7 days).
  - **Mutually Exclusive**: Poll options cannot be used with Card URI, Quote Tweet ID, or Direct Message Deep Link.

  #### Platform-Specific Requirements
  - **Facebook**: Page selection is required for all operations.
  - **Pinterest**: Board selection is required for all operations.
  - **LinkedIn Photos**: Only supports PUBLIC visibility (API limitation).
  - **YouTube**: Allowed/blocked countries are mutually exclusive.
  - **Instagram Video**: Media type automatically defaults to REELS if invalid, IMAGE for photos.
  - **TikTok Photos**: Media type automatically defaults to IMAGE if invalid.

  #### File Handling
  - **Photos**: Comma-separated list supporting both file paths and URLs.
  - **Videos**: Single file path or URL.
  - **YouTube Thumbnails**: Supports both URL and binary file uploads.
  - **Pinterest Covers**: Multiple options (URL, base64 data with content type, or keyframe timestamp).

  #### Scheduling
  - **Date Format**: Automatic conversion to ISO 8601 with UTC timezone if not provided.
  - **Asynchronous Processing**: Automatic fallback to async mode if upload exceeds 59 seconds.

  ### Title & Description Overrides
  - **`Title / Main Content`**: Generic title used across platforms.
  - **Platform Title Overrides**: `[platform]_title` (e.g., `x_title`, `pinterest_title`, `threads_title`).
    - Available for: instagram, facebook, tiktok, linkedin, x, youtube, pinterest, threads
  - **`Description (Optional)`**: Generic description used for LinkedIn, Facebook, YouTube, Pinterest, TikTok when supported.
  - **Platform Description Overrides**: `[platform]_description` (e.g., `youtube_description`, `linkedin_description`).
    - Available for: facebook, tiktok, linkedin, youtube, pinterest

  **⚠️ Runtime Validations**: The node performs automatic validations at runtime including poll constraints, mutually exclusive field checks, and platform-specific requirements. Invalid configurations will throw descriptive error messages.

  Related docs:
  - Profiles & JWT reference (context): [User Profiles API](https://docs.upload-post.com/api/user-profiles#create-user-profile)

  ## Resources

  *   [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  *   [Upload Post Website](https://www.upload-post.com/)
  *   [Upload Post API Documentation](https://docs.upload-post.com)

  ## Compatibility

  Tested with n8n version 1.x.
  Requires Node.js version 20.15 or later.

  ## Development

  If you want to contribute to this node or run it locally for development:

  1.  Clone this repository: `git clone https://github.com/Upload-Post/n8n-nodes-upload-post` (replace `your-github-username`)
  2.  Install dependencies: `npm i`
  3.  Build the node: `npm run build`
  4.  Link the package to your n8n instance for testing. Refer to [Run your node locally](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/).

  ## License

  [MIT](LICENSE.md)
  <!-- deployed 2026-03-16 17:49 UTC -->

ai_documentation_summary:
  {"purpose":"Automates uploading photos, videos, and text posts to various social media platforms via the Upload Post API, including scheduling and analytics features.","capabilities":["Upload photos to supported platforms","Upload videos to supported platforms","Upload text posts to supported platforms","Get upload status by request ID","Retrieve upload history","Get aggregated analytics","List scheduled posts","Cancel scheduled posts","Edit scheduled posts","Platform-specific content customization (titles, descriptions, tags, privacy settings)"],"authentication":"API Key required","commonUseCases":["Automated social media content publishing","Cross-platform content distribution","Scheduled social media posts","Content performance tracking via analytics"],"limitations":["Community node (fair-code licensed)","Requires external API key from Upload Post dashboard","Some advanced features may depend on specific platform API support"],"relatedNodes":["n8n-nodes-webhook.webhook","n8n-nodes-cron-trigger.cronTrigger","n8n-nodes-credentials.credentials"]}


node_type: n8n-nodes-aimlapi.aimlApi
package_name: n8n-nodes-aimlapi
display_name: AI/ML API
description: Choose from 300+ AI models, from Gemini and ChatGPT to DeepSeek and Llama.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: aiml_api
author_github_url: https://github.com/D1m7asis/
npm_package_name: n8n-nodes-aimlapi
npm_version: 2.0.3
community_fetched_at: 2026-07-14T14:40:33.173Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "chatCompletion",
      "options": [
        {
          "name": "Chat Completion",
          "value": "chatCompletion",
          "action": "Generate text using chat completion models",
          "description": "Generate text using chat completion models"
        },
        {
          "name": "Image Generation",
          "value": "imageGeneration",
          "action": "Generate images from text prompts",
          "description": "Generate images from text prompts"
        },
        {
          "name": "Audio Generation",
          "value": "audioGeneration",
          "action": "Generate music or sound effects from text prompts",
          "description": "Generate music or sound effects from text prompts"
        },
        {
          "name": "Video Generation",
          "value": "videoGeneration",
          "action": "Generate videos from prompts or reference media",
          "description": "Generate videos from prompts or reference media"
        },
        {
          "name": "Speech Synthesis",
          "value": "speechSynthesis",
          "action": "Convert text into speech audio",
          "description": "Convert text into speech audio"
        },
        {
          "name": "Speech Transcription",
          "value": "speechTranscription",
          "action": "Transcribe audio files into text",
          "description": "Transcribe audio files into text"
        },
        {
          "name": "Embedding Generation",
          "value": "embeddingGeneration",
          "action": "Create vector embeddings from text",
          "description": "Create vector embeddings from text"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Chat Completion",
      "value": "chatCompletion",
      "action": "Generate text using chat completion models",
      "description": "Generate text using chat completion models"
    },
    {
      "name": "Image Generation",
      "value": "imageGeneration",
      "action": "Generate images from text prompts",
      "description": "Generate images from text prompts"
    },
    {
      "name": "Audio Generation",
      "value": "audioGeneration",
      "action": "Generate music or sound effects from text prompts",
      "description": "Generate music or sound effects from text prompts"
    },
    {
      "name": "Video Generation",
      "value": "videoGeneration",
      "action": "Generate videos from prompts or reference media",
      "description": "Generate videos from prompts or reference media"
    },
    {
      "name": "Speech Synthesis",
      "value": "speechSynthesis",
      "action": "Convert text into speech audio",
      "description": "Convert text into speech audio"
    },
    {
      "name": "Speech Transcription",
      "value": "speechTranscription",
      "action": "Transcribe audio files into text",
      "description": "Transcribe audio files into text"
    },
    {
      "name": "Embedding Generation",
      "value": "embeddingGeneration",
      "action": "Create vector embeddings from text",
      "description": "Create vector embeddings from text"
    }
  ]

npm_readme:
  # n8n-nodes-aimlapi

  This is an n8n community node for [AI/ML API](https://aimlapi.com/?utm_source=n8n&utm_medium=github&utm_campaign=integration) integration.  
  It allows you to interact with large language models (LLMs) and multimodal models directly from your n8n workflows.

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

  [AI/ML API](https://aimlapi.com/app/?utm_source=n8n&utm_medium=github&utm_campaign=integration) provides access to **300+ AI models**, including Deepseek, Gemini, ChatGPT, and many others — all with **enterprise-grade rate limits and uptimes**.

  ---

  ## Features

  - Chat with any LLM available on AI/ML API
  - Generate AI images with supported diffusion and vision models
  - Create AI music and sound effects with audio-generation models
  - Render text-to-video or image-to-video clips
  - Convert text to speech and speech to text via TTS/STT models
  - Produce text embeddings for search and retrieval workflows
  - Dynamic model selection per modality with shared authentication
  - Parameter tuning (temperature, max tokens, top-p, penalties, etc.)
  - Multiple output formats: raw payloads or curated fields for each modality
  - Credential-based authentication

  ---

  ## Installation

  ### Community Node (Recommended)

  1. Open your n8n instance
  2. Go to **Settings → Community Nodes**
  3. Click **Install**
  4. Enter `n8n-nodes-aimlapi`
  5. Accept the prompt to install the node
  6. After installation, the node will appear under **AI/ML API** in the node palette

  ### Manual Installation (Advanced)

  ```bash
  npm install n8n-nodes-aimlapi
  ```

  Then restart your `n8n` instance.

  ---

  ## Configuration

  ### Credentials

  To use this node, you must configure **AI/ML API** credentials:

  1. Sign up at [https://aimlapi.com/](https://aimlapi.com/?utm_source=n8n&utm_medium=github&utm_campaign=integration)
  2. Go to your [dashboard](https://aimlapi.com/app/?utm_source=n8n&utm_medium=github&utm_campaign=integration) and generate an API key
  3. In n8n, create new credentials of type **AI/ML API**
  4. Paste your API key
  5. Save and use in the node

  📚 You can also refer to the [provider documentation](https://docs.aimlapi.com/?utm_source=n8n&utm_medium=github&utm_campaign=integration) for detailed API specs.

  ### Node Parameters

  - **Operation** – Select the modality (`Chat Completion`, `Image Generation`, `Audio Generation`, `Video Generation`, `Speech Synthesis`, `Speech Transcription`, or `Embedding Generation`).
  - **Model** – Pick a model from the filtered list (dependent on operation) or provide an ID via expression.

  #### Chat Completion

  - **Use Message List** – Switch between a single prompt and a structured list of chat messages.
  - **Prompt/Messages** – Provide either one prompt or multiple messages. Each structured message selects a **Role** (`assistant`, `system`, or `user`) from the dropdown, or choose **Custom…** to enter another role such as `tool`, plus the text **Content**. When using the `tool` role, fill in the required **Tool Call ID** with the identifier returned alongside the assistant tool invocation so the API can pair the response correctly.
  - **Extract From Response** – Decide what to return (`Text Only`, `Assistant Messages`, `Choices Array`, or `Full Raw JSON`).
  - **Options** – Fine-tune completions with **Temperature**, **Top P**, **Max Tokens**, **Presence Penalty**, **Frequency Penalty**, and **Response Format**.

  #### Image Generation

  - **Prompt** – Describe the image you want the model to create.
  - **Extract From Response** – Return the first/all URLs, first/all base64 images, or the raw payload.
  - **Image Options** – Configure **Background**, **Image Count**, **Negative Prompt**, **Quality**, **Response Format**, **Size**, and **Style**.

  #### Audio Generation

  - **Prompt** – Describe the audio clip you want to generate.
  - **Extract From Response** – Return audio URLs, base64 blobs, or the raw payload.
  - **Audio Options** – Adjust **Audio Format**, **Duration**, **Mode**, **Negative Prompt**, **Prompt Strength**, **Seed**, **Reference Audio URL**, **Instrument**, and **CFG Scale**.

  #### Video Generation

  - **Prompt** – Describe the scene for the generated video.
  - **Extract From Response** – Return the first/all video URLs or the raw payload.
  - **Video Options** – Control **Aspect Ratio/Ratio**, **Duration**, **Kling Types & Image Lists**, **Google Veo Tail Images & Prompt Enhancement**, **Alibaba Resolution/Watermark/Prompt Expansion**, **MiniMax Prompt Optimizer & First Frame**, **Runway Last Image**, plus legacy toggles like **Negative Prompt**, **Prompt Strength**, **Reference Media**, **Background Audio**, **CFG Scale**, and **Seed**.

  #### Speech Synthesis

  - **Text** – Content that should be spoken aloud.
  - **Extract From Response** – Return an audio URL, base64 payload, or the raw response.
  - **Speech Options** – Configure **Voice**, **Audio Format**, **Sample Rate**, **Speaking Rate**, and **Style**.

  #### Speech Transcription

  - **Binary Property** – Name of the binary property that contains the audio file.
  - **Extract From Response** – Return transcript text, segment breakdowns, or the raw payload.
  - **Transcription Options** – Provide **Language**, **Prompt**, **Response Format**, and **Temperature**.

  #### Embedding Generation

  - **Input Text** – Text that should be converted into an embedding vector.
  - **Extract From Response** – Return the first vector, all vectors, or the raw payload.
  - **Embedding Options** – Configure **Encoding Format** and **User Identifier** metadata.

  ---

  ## Usage Example

  1. Add a **Manual Trigger**
  2. Add the **AI/ML API** node
  3. Configure credentials
  4. Set a model (e.g. `gpt-3.5-turbo`)
  5. Enter prompt: `What is the capital of France?`
  6. Select `Extract: Text Only`
  7. Execute — you’ll get `Paris`

  ---

  ## Troubleshooting

  - If the node doesn't show up, try restarting your instance
  - If the icon or name doesn't render, make sure you ran `npm run build && gulp build:icons`
  - To debug model list: ensure credentials and `/models` endpoint return valid JSON

  ---

  ## Support

  Please open an issue or pull request in the [GitHub repository](https://github.com/D1m7asis/n8n-nodes-aimlapi) if you encounter problems.

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with 300+ AI models from providers like Gemini, ChatGPT, and DeepSeek to perform text, image, audio, video, and speech tasks.","capabilities":["Chat completion with LLMs","Image generation (diffusion and vision models)","Audio generation and sound effects","Text-to-video and image-to-video rendering","Text-to-speech (TTS)","Speech-to-text transcription (STT)","Text embedding generation for search/retrieval","Dynamic model selection per modality","Parameter tuning (temperature, top-p, max tokens, penalties)","Multiple output formats (raw payloads, curated fields, base64, URLs)"],"authentication":"API key required (entered via Credentials node)","commonUseCases":["Integrating enterprise-grade LLMs into automation workflows","Generating AI images or videos based on text prompts","Creating voiceovers or transcribing audio files","Building search and retrieval systems with text embeddings"],"limitations":["Community node (may lack official support compared to n8n core nodes)","Requires separate API key subscription at aimlapi.com","README truncated, full troubleshooting details not available"],"relatedNodes":["Credentials","Manual Trigger","Code"]}


node_type: n8n-nodes-zigpoll.zigpollTrigger
package_name: n8n-nodes-zigpoll
display_name: Zigpoll Trigger
description: Triggers when a specific Zigpoll survey is completed
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: zigpoll
author_github_url: https://github.com/JasonZigelbaum/
npm_package_name: n8n-nodes-zigpoll
npm_version: 0.1.9
community_fetched_at: 2026-07-14T14:40:33.174Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-zigpoll

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

  Zigpoll is a contextual survey platform that lets you understand what customers think & feel about your product by running highly targeted surveys inside and outside of your product at key moments.

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

  [Installation](#installation)  
  [Operations](#operations)  
  [Credentials](#credentials) <!-- delete if no auth needed -->  
  [Compatibility](#compatibility)  
  [Usage](#usage) <!-- delete if not using this section -->  
  [Resources](#resources)

  ## Installation

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

  ## Operations

  Run workflows on new responses you receive for your surveys.

  ## Credentials

  You only need a Zigpoll API Key for this. Please check out the [Zigpoll Docs](https://docs.zigpoll.com/integrations/n8n) for more information.

  ## Compatibility

  This package was developed & tested with n8n > 1.4.0.

  ## Usage

  Please check out the [Zigpoll Docs](https://docs.zigpoll.com/integrations/n8n) for more information on how to use the integration.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Zigpoll Docs](https://docs.zigpoll.com/integrations/n8n)

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows when a specific Zigpoll survey is completed, enabling automation based on customer survey responses.","capabilities":["Trigger workflow execution on new survey responses","Integrate with Zigpoll contextual survey platform","Enable targeted survey automation inside and outside of products"],"authentication":"API Key required","commonUseCases":["Automate responses to customer feedback surveys","Trigger follow-up actions based on survey results","Monitor product sentiment through contextual surveys"],"limitations":["Requires Zigpoll API Key configuration","Compatible only with n8n version 1.4.0 and above"],"relatedNodes":["Zigpoll Trigger","Zigpoll Webhook","Zigpoll HTTP Request"]}


node_type: n8n-nodes-scraping-dog.scrapingDog
package_name: n8n-nodes-scraping-dog
display_name: ScrapingDog
description: Get data from ScrapingDog API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: darshan_sd12
author_github_url: https://github.com/Darshan972/scrappingDog.git
npm_package_name: n8n-nodes-scraping-dog
npm_version: 0.4.2
community_fetched_at: 2026-07-14T14:40:33.175Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Scrape URL",
          "value": "scrapeUrl"
        },
        {
          "name": "Google Search",
          "value": "googleSearch"
        },
        {
          "name": "Google Images",
          "value": "googleImages"
        },
        {
          "name": "Google News",
          "value": "googleNews"
        },
        {
          "name": "Bing Search",
          "value": "bingSearch"
        },
        {
          "name": "Amazon Search",
          "value": "amazonSearch"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Scrape URL",
          "description": "Scrape a URL"
        }
      ],
      "routing": {
        "request": {
          "qs": {
            "url": "={{$parameter[\"url\"]}}",
            "wait": "={{$parameter[\"dynamic\"] === true && $parameter[\"wait\"] ? $parameter[\"wait\"] : undefined}}",
            "image": "={{$parameter[\"image\"] === true ? \"true\" : \"false\"}}",
            "api_key": "={{$credentials.apiKey}}",
            "country": "={{$parameter[\"premium\"] === true && $parameter[\"country\"] ? $parameter[\"country\"] : undefined}}",
            "dynamic": "={{$parameter[\"dynamic\"] === true ? \"true\" : \"false\"}}",
            "premium": "={{$parameter[\"premium\"] === true ? \"true\" : \"false\"}}",
            "ai_query": "={{$parameter[\"additionalFields\"] && $parameter[\"additionalFields\"][\"aiQuery\"] ? $parameter[\"additionalFields\"][\"aiQuery\"] : undefined}}",
            "markdown": "={{$parameter[\"markdown\"] === true ? \"true\" : \"false\"}}",
            "super_proxy": "={{$parameter[\"superProxy\"] === true ? \"true\" : \"false\"}}",
            "custom_headers": "={{$parameter[\"customHeaders\"] === true ? \"true\" : undefined}}",
            "session_number": "={{$parameter[\"sessionNumber\"] || undefined}}",
            "ai_extract_rules": "={{$parameter[\"additionalFields\"] && $parameter[\"additionalFields\"][\"aiExtractRules\"] ? $parameter[\"additionalFields\"][\"aiExtractRules\"] : undefined}}"
          },
          "url": "scrape",
          "method": "GET",
          "returnFullResponse": true
        },
        "returnFullResponse": true
      },
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "scrapeUrl"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Google search",
          "description": "Perform a Google Search"
        }
      ],
      "routing": {
        "request": {
          "qs": {
            "page": "={{$parameter[\"page\"]}}",
            "query": "={{$parameter[\"query\"]}}",
            "api_key": "={{$credentials.apiKey}}",
            "country": "={{$parameter[\"location\"]}}",
            "results": "={{$parameter[\"results\"]}}",
            "advance_search": "={{$parameter[\"advance\"]}}"
          },
          "url": "google",
          "method": "GET"
        }
      },
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "googleSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search Google Images",
          "description": "Search Google Images"
        }
      ],
      "routing": {
        "request": {
          "qs": {
            "tbs": "={{$parameter[\"timePeriod\"] || undefined}}",
            "imgsz": "={{$parameter[\"imageSize\"] || undefined}}",
            "query": "={{$parameter[\"query\"]}}",
            "api_key": "={{$credentials.apiKey}}",
            "country": "={{$parameter[\"country\"] || undefined}}",
            "results": "={{$parameter[\"results\"]}}",
            "language": "={{$parameter[\"language\"] || undefined}}",
            "licenses": "={{$parameter[\"usageRights\"] || undefined}}",
            "image_type": "={{$parameter[\"imageType\"] || undefined}}",
            "image_color": "={{$parameter[\"imageColor\"] || undefined}}",
            "safe_search": "={{$parameter[\"safeSearch\"] || undefined}}"
          },
          "url": "google_images",
          "method": "GET"
        }
      },
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "googleImages"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search Google News",
          "description": "Search Google News"
        }
      ],
      "routing": {
        "request": {
          "qs": {
            "lr": "={{$parameter[\"additionalFields\"] && $parameter[\"additionalFields\"][\"lr\"] || undefined}}",
            "tbs": "={{$parameter[\"additionalFields\"] && $parameter[\"additionalFields\"][\"tbs\"] || undefined}}",
            "nfpr": "={{$parameter[\"additionalFields\"] && $parameter[\"additionalFields\"][\"nfpr\"] === true ? \"1\" : \"0\"}}",
            "page": "={{$parameter[\"additionalFields\"] && $parameter[\"additionalFields\"][\"page\"] || undefined}}",
            "safe": "={{$parameter[\"additionalFields\"] && $parameter[\"additionalFields\"][\"safe\"] || undefined}}",
            "uule": "={{$parameter[\"additionalFields\"] && $parameter[\"additionalFields\"][\"uule\"] || undefined}}",
            "query": "={{$parameter[\"query\"]}}",
            "domain": "={{$parameter[\"additionalFields\"] && $parameter[\"additionalFields\"][\"domain\"] || undefined}}",
            "api_key": "={{$credentials.apiKey}}",
            "country": "={{$parameter[\"additionalFields\"] && $parameter[\"additionalFields\"][\"country\"] === \"custom\" ? $parameter[\"additionalFields\"][\"customCountry\"] : $parameter[\"additionalFields\"][\"country\"] || undefined}}",
            "results": "={{$parameter[\"results\"]}}",
            "language": "={{$parameter[\"additionalFields\"] && $parameter[\"additionalFields\"][\"language\"] || undefined}}"
          },
          "url": "google_news",
          "method": "GET"
        }
      },
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "googleNews"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Bing search",
          "description": "Perform a Bing Search"
        }
      ],
      "routing": {
        "request": {
          "qs": {
            "page": "={{$parameter[\"page\"]}}",
            "query": "={{$parameter[\"query\"]}}",
            "api_key": "={{$credentials.apiKey}}",
            "country": "={{$parameter[\"country\"]}}",
            "filters": "={{$parameter[\"filters\"]}}",
            "results": "={{$parameter[\"results\"]}}"
          },
          "url": "bing/search",
          "method": "GET"
        }
      },
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "bingSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Amazon search",
          "description": "Perform a Amazon Search"
        }
      ],
      "routing": {
        "request": {
          "qs": {
            "page": "={{$parameter[\"page\"]}}",
            "query": "={{$parameter[\"query\"]}}",
            "domain": "={{$parameter[\"domain\"]}}",
            "api_key": "={{$credentials.apiKey}}",
            "country": "={{$parameter[\"country\"]}}",
            "postal_code": "={{$parameter[\"postal_code\"]}}"
          },
          "url": "amazon/search",
          "method": "GET"
        }
      },
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "amazonSearch"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Scrape URL",
      "description": "Scrape a URL",
      "resource": "scrapeUrl"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Google search",
      "description": "Perform a Google Search",
      "resource": "googleSearch"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search Google Images",
      "description": "Search Google Images",
      "resource": "googleImages"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search Google News",
      "description": "Search Google News",
      "resource": "googleNews"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Bing search",
      "description": "Perform a Bing Search",
      "resource": "bingSearch"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Amazon search",
      "description": "Perform a Amazon Search",
      "resource": "amazonSearch"
    }
  ]

npm_readme:
  # ScrapingDog Node for n8n

  This is a custom n8n node that integrates with the ScrapingDog API, providing web scraping and search capabilities. The node has been converted to use n8n's declarative style for better maintainability and reliability.

  ## Key Highlights

  - ✅ **6 Different APIs**: URL Scraping, Google Search, Google Images, Google News, Bing Search, and Amazon Search
  - ✅ **Declarative Style**: Modern n8n node implementation for better performance
  - ✅ **Comprehensive Filtering**: Advanced search options for all supported APIs
  - ✅ **Multi-language Support**: Support for multiple languages and regions
  - ✅ **Rate Limit Handling**: Built-in error handling for API limitations
  - ✅ **TypeScript**: Fully typed for better development experience

  ## Features

  - 🌐 **URL Scraping**: Extract content from any webpage
  - 🔍 **Google Search**: Perform Google searches with advanced options
  - 🖼️ **Google Images**: Search Google Images with advanced filtering options
  - 📰 **Google News**: Search Google News with time-based and geographic filtering
  - 🔎 **Bing Search**: Search Bing with customizable filters
  - 🛍️ **Amazon Search**: Search products on Amazon

  ## Directory Structure

  ```
  nodes/ScrapingDog/
  ├── ScrapingDog.node.ts      # Main node implementation (Declarative Style)
  ├── ScrapingDog.node.json    # Node metadata
  ├── scrappingDog.svg         # Node icon
  ├── types/
  │   └── index.ts             # TypeScript interfaces and types
  ├── resources/
  │   ├── index.ts             # Resource exports
  │   ├── scrapeUrl.ts         # Scrape URL resource
  │   ├── googleSearch.ts      # Google Search resource
  │   ├── googleImages.ts      # Google Images resource
  │   ├── googleNews.ts        # Google News resource
  │   ├── bingSearch.ts        # Bing Search resource
  │   ├── amazonSearch.ts      # Amazon Search resource
  │   └── staticResource.ts    # Static data (countries, etc.)
  ```

  ## Recent Updates

  ### Version 0.4.2 - LinkedIn API Removal & Documentation Updates
  - 🗑️ **REMOVED: LinkedIn Profile and Jobs APIs** - Removed LinkedIn Profile and LinkedIn Jobs functionality
  - **Simplified Interface**: Streamlined resource options for better focus on core web scraping features
  - **Reduced Dependencies**: Cleaner codebase with fewer external integrations
  - **Enhanced Documentation**: Added comprehensive parameter documentation for all remaining APIs
  - **Updated Examples**: Improved usage examples and API response documentation

  ### Version 0.4.1 - Google News API Integration
  - 📰 **NEW: Google News Search** - Added comprehensive Google News API support
  - **Time-Based Filtering**: Filter news by hour, day, week, month, or year
  - **Geographic Targeting**: Country-specific news results with custom domain support
  - **Language Support**: 18 different languages for news results
  - **Advanced Filtering**: Geographic location (UULE), language restrictions, safe search
  - **Auto-Correct Control**: Option to exclude auto-corrected query results

  ### Version 0.4.0 - Google Images API Integration
  - 🖼️ **NEW: Google Images Search** - Added comprehensive Google Images API support
  - **Advanced Image Filtering**: Size, type, color, usage rights, time period filters
  - **Multi-language Support**: 13 different languages for search results
  - **Safe Search Controls**: Strict, moderate, or off filtering options
  - **Geographic Targeting**: Country-specific image search results

  ### Previous Updates
  1. **Converted to Declarative Style**
     - Removed manual HTTP request handling
     - Added routing configuration for each resource
     - Improved error handling
     - Better parameter validation

  2. **Resource Improvements**
     - Added proper parameter descriptions
     - Fixed boolean parameter descriptions to start with "Whether"
     - Sorted option lists alphabetically
     - Improved type safety

  3. **API Integration**
     - Fixed API key handling in requests
     - Proper HTML content handling for scraping
     - Improved response processing

  ## Usage Examples

  ### 1. Scrape URL
  ```javascript
  {
      "resource": "scrapeUrl",
      "operation": "get",
      "parameters": {
          "url": "https://example.com",
          "dynamic": false,
          "markdown": false,
          "premium": false,
          "superProxy": false,
          "additionalFields": {
              "aiQuery": "Extract all product names",
              "aiExtractRules": "Find prices and descriptions"
          }
      }
  }
  ```

  ### 2. Google Search
  ```javascript
  {
      "resource": "googleSearch",
      "operation": "search",
      "parameters": {
          "query": "n8n automation",
          "advance": true,
          "page": "1",
          "location": "US",
          "results": "10"
      }
  }
  ```

  ### 3. Google Images
  ```javascript
  {
      "resource": "googleImages",
      "operation": "search",
      "parameters": {
          "query": "sunset landscape",
          "results": "20",
          "country": "US",
          "language": "en",
          "imgsz": "l",
          "imageType": "photo",
          "imageColor": "bw",
          "licenses": "f",
          "tbs": "qdr:d",
          "safe": "1"
      }
  }
  ```

  ### 4. Google News
  ```javascript
  {
      "resource": "googleNews",
      "operation": "search",
      "parameters": {
          "query": "artificial intelligence technology",
          "results": "50",
          "additionalFields": {
              "country": "us",
              "page": 0,
              "domain": "google.com",
              "language": "en",
              "tbs": "qdr:d",
              "safe": "active",
              "nfpr": false
          }
      }
  }
  ```

  ### 5. Bing Search
  ```javascript
  {
      "resource": "bingSearch",
      "operation": "search",
      "parameters": {
          "query": "web scraping tools",
          "page": 1,
          "country": "US",
          "results": 20,
          "filters": "ex1:'answerType:CalculatorPageType'"
      }
  }
  ```

  ### 6. Amazon Search
  ```javascript
  {
      "resource": "amazonSearch",
      "operation": "search",
      "parameters": {
          "query": "wireless headphones",
          "country": "US",
          "page": 1,
          "domain": "amazon.com",
          "postal_code": "10001"
      }
  }
  ```

  ## Resource Parameters

  ### Scrape URL
  - `url` (Required): Target webpage URL
  - `dynamic`: Whether to enable JavaScript rendering
  - `premium`: Whether to use premium proxy
  - `superProxy`: Whether to enable super proxy
  - `markdown`: Whether to get response in markdown format
  - `wait`: Wait time for dynamic rendering (ms)
  - `country`: Geolocation for the request
  - `aiQuery`: AI-powered data extraction query
  - `aiExtractRules`: Custom extraction rules

  ### Google Search
  - `query` (Required): Search keyword
  - `advance`: Whether to enable advanced features
  - `page`: Result page number (1-10)
  - `location`: Search location/country
  - `results`: Number of results (10-100)

  ### Google Images
  - `query` (Required): Search keyword for images
  - `results`: Number of results (10-100)
  - `country`: Country for geotargeting (US, UK, CA, etc.)
  - `language`: Search language (en, es, fr, de, etc.)
  - `imgsz`: Filter by size (any, large, medium, icon)
  - `imageType`: Filter by type (any, face, photo, clipart, lineart, animated)
  - `imageColor`: Filter by color (any, color, gray, trans, red, orange, yellow, green, teal, blue, purple, pink, white, black, brown)
  - `licenses`: Filter by usage rights (any, labeled-for-reuse, labeled-for-reuse-with-modification, etc.)
  - `tbs`: Filter by time (any, hour, day, week, month, year)
  - `safe`: Safe search level (strict, moderate, off)

  ### Google News
  - `query` (Required): Search keyword for news articles
  - `results`: Number of results (1-100)
  - `country`: Country for geotargeting (us, uk, in, ca, au, de, fr, jp, br, etc.)
  - `page`: Page number (0 for first page, 1 for second page, etc.)
  - `domain`: Google domain for local results (e.g., google.co.uk for UK)
  - `language`: Search language (en, es, fr, de, it, pt, ru, ja, zh-cn, ko, ar, hi, etc.)
  - `lr`: Language restriction in format lang_{language_code} (e.g., lang_en)
  - `uule`: Geographic location parameter for tailored results
  - `tbs`: Time-based search filter (qdr:h for past hour, qdr:d for past day, qdr:w for past week, qdr:m for past month, qdr:y for past year)
  - `safe`: Safe search filter (active/off)
  - `nfpr`: Exclude auto-corrected queries (true to exclude, false to include)

  ### Bing Search
  - `query` (Required): Search keyword
  - `page`: Page number for pagination
  - `country`: Country for geotargeting
  - `filters`: Custom search filters
  - `results`: Number of results to return

  ### Amazon Search
  - `query` (Required): Product search keyword
  - `country`: Country for Amazon marketplace (e.g., US, UK, CA, DE, FR, etc.)
  - `page`: Page number for pagination
  - `domain`: Amazon domain (e.g., amazon.com, amazon.co.uk)
  - `postal_code`: Postal code for location-based results

  ## API Response Examples

  ### Google Images Response
  ```json
  {
    "time_taken": 685.692823,
    "ads": [],
    "images_results": [
      {
        "title": "Beautiful Sunset Landscape",
        "image": "https://encrypted-tbn0.gstatic.com/images?q=tbn:...",
        "source": "example.com",
        "original": "https://example.com/images/sunset.jpg",
        "link": "https://example.com/sunset-photography",
        "original_height": 1080,
        "original_width": 1920,
        "original_size": "245KB",
        "know_more_link": "https://www.google.com/search/about-this-image?...",
        "is_product": false,
        "rank": 1
      }
    ]
  }
  ```

  ### Google News Response
  ```json
  {
    "time_taken": 542.123456,
    "ads": [],
    "news_results": [
      {
        "rank": 1,
        "title": "Breakthrough in Artificial Intelligence Technology",
        "link": "https://example-news.com/ai-breakthrough-2024",
        "source": "TechNews",
        "published_date": "3 hours ago",
        "snippet": "Researchers have developed a new AI system that can understand complex human emotions and respond appropriately, marking a significant milestone in artificial intelligence development.",
        "thumbnail": "https://encrypted-tbn0.gstatic.com/images?q=tbn:...",
        "rank_page": 1
      },
      {
        "rank": 2,
        "title": "AI Companies Announce Major Partnership",
        "link": "https://business-news.com/ai-partnership",
        "source": "Business Daily",
        "published_date": "5 hours ago",
        "snippet": "Leading technology companies have formed a strategic alliance to accelerate AI research and development, focusing on ethical AI implementation.",
        "thumbnail": "https://encrypted-tbn0.gstatic.com/images?q=tbn:...",
        "rank_page": 1
      }
    ]
  }
  ```

  ## Installation

  ### For n8n Users

  1. Install the package in your n8n instance:
  ```bash
  npm install n8n-nodes-scraping-dog
  ```

  2. Restart your n8n instance to load the new node.

  3. The ScrapingDog node will appear in the node palette under the "Transform" category.

  ### Credentials Setup

  1. Create a ScrapingDog API account at [ScrapingDog.com](https://scrapingdog.com)
  2. Get your API key from the dashboard
  3. In n8n, create new credentials of type "ScrapingDog API"
  4. Enter your API key in the credentials configuration

  ## Development

  1. Install dependencies:
  ```bash
  npm install
  ```

  2. Build the node:
  ```bash
  npm run build
  ```

  3. Run with Docker:
  ```bash
  make rebuild-and-logs
  ```

  ## Testing

  The node includes proper error handling for:
  - Invalid API key
  - Rate limiting
  - Invalid parameters
  - Network errors
  - Blocked requests

  ## License

  MIT License - see LICENSE file for details 

ai_documentation_summary:
  {"purpose":"A custom n8n node that integrates with the ScrapingDog API to perform web scraping and cross-platform search operations including Google, Bing, and Amazon.","capabilities":["URL scraping with dynamic content extraction","Google Search with advanced filtering","Google Images search with size/type/color filters","Google News search with time-based and geographic filtering","Bing Search with customizable filters","Amazon product search","Multi-language and multi-region support","Safe search controls","AI-powered content extraction via additional fields"],"authentication":"API key required (configured via node settings)","commonUseCases":["Extracting content from websites for data aggregation","Monitoring product availability on Amazon","Gathering news trends by region and language","Searching for images with specific usage rights","Competitor analysis via web scraping"],"limitations":["LinkedIn Profile and Jobs APIs have been removed","Rate limits apply based on ScrapingDog API tier","Requires valid ScrapingDog API key for all operations"],"relatedNodes":["HTTP Request","Webhook","Code","Function Item"]}


node_type: n8n-nodes-pushinator.pushinator
package_name: n8n-nodes-pushinator
display_name: Pushinator
description: Send notifications using Pushinator
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: makstamoian
author_github_url: https://github.com/appricos/pushinator-n8n.git
npm_package_name: n8n-nodes-pushinator
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:33.176Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "send_notification",
      "options": [
        {
          "name": "Send Notification",
          "value": "send_notification",
          "action": "Send a push notification"
        },
        {
          "name": "Create Channel",
          "value": "create_channel",
          "action": "Create a new channel"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Notification",
      "value": "send_notification",
      "action": "Send a push notification"
    },
    {
      "name": "Create Channel",
      "value": "create_channel",
      "action": "Create a new channel"
    }
  ]

npm_readme:
  # n8n-nodes-pushinator

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

  Pushinator is a powerful push notification service that lets you send real-time updates to iPhone, iPad, and Android devices.

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

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

  ## Installation

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

  ## Operations

  ### Send Notification
  This operation lets you choose a channel from the list of your channels, add the notification text and send the notification to the selected channel.
  ## Credentials

  Your main credential is the API token. If you already have a Pushinator account, go to your [API tokens page](https://console.pushinator.com/tokens), create a new token and note it down. Use this token when connecting your  account in the Pushinator node.

  If you don't have an account:
  - Create an account at https://console.pushinator.com/sign-up
  - Create a channel in the [channels page](https://console.pushinator.com/channels)
  - Create a new token in the [API tokens page](https://console.pushinator.com/tokens), note it down and use it when connecting your account in the Pushinator node.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [Pushinator website](https://pushinator.com)
  * [Pushinator API reference](https://pushinator.com/api)

ai_documentation_summary:
  {"purpose":"This n8n community node sends real-time push notifications to iPhone, iPad, and Android devices using the Pushinator service.","capabilities":["Send push notifications via selected channel","Add custom notification text","Manage multiple notification channels"],"authentication":"API token required","commonUseCases":["Sending real-time updates to mobile devices","Automated push notifications in workflow triggers","User engagement campaigns via mobile alerts"],"limitations":[],"relatedNodes":["n8n-nodes-http.request","n8n-nodes-webhook"]}


node_type: n8n-nodes-fillout.filloutTrigger
package_name: n8n-nodes-fillout
display_name: Fillout Trigger
description: Handle Fillout submissions via webhooks
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: xkcdstickfigure
author_github_url: https://github.com/fillout/
npm_package_name: n8n-nodes-fillout
npm_version: 1.1.4
community_fetched_at: 2026-07-14T14:40:33.177Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n trigger for Fillout submissions

  This is an n8n community node that lets you trigger n8n workflows when your Fillout form receives a new submission.

  ## Installation

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

  ## Usage

  Add the trigger in n8n, and when creating a credential, you'll need to get an API key from your [account settings](https://build.fillout.com/home/settings/developer) in Fillout. Make sure that the correct base URL is set, as you can have submissions hosted in different regions with [Fillout Enterprise](https://www.fillout.com/enterprise).

  ## Developers

  For instructions on testing this node on a local n8n instance for development purposes, see https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows automatically when a new submission is received on a Fillout form via webhook.","capabilities":["Monitor Fillout form submissions","Activate n8n workflows on form completion","Support multiple regional base URLs for Fillout Enterprise"],"authentication":"API key required (obtained from Fillout account settings)","commonUseCases":["Automate data processing when a form is submitted","Send notifications or emails upon form completion","Integrate form data into other services or databases"],"limitations":["Community node (not official n8n node)","Requires manual setup of correct base URL for Fillout Enterprise regions"],"relatedNodes":["n8n-nodes-fillout.filloutForm","n8n-nodes-fillout.filloutSubmit","Webhook Trigger"]}


node_type: n8n-nodes-htmlcsstoimage.htmlCssToImage
package_name: n8n-nodes-htmlcsstoimage
display_name: HTML to Image
description: Convert HTML/CSS or a URL to an Image
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: htmlcsstoimage
author_github_url: https://github.com/HtmlCssToImg/
npm_package_name: n8n-nodes-htmlcsstoimage
npm_version: 0.3.1
community_fetched_at: 2026-07-14T14:40:33.177Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "htmlToImage",
      "options": [
        {
          "name": "HTML to Image",
          "value": "htmlToImage",
          "action": "Convert html to an image",
          "description": "Convert HTML and CSS to an image"
        },
        {
          "name": "URL to Image",
          "value": "urlToImage",
          "action": "Capture screenshot of a website",
          "description": "Capture a screenshot of a website"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "HTML to Image",
      "value": "htmlToImage",
      "action": "Convert html to an image",
      "description": "Convert HTML and CSS to an image"
    },
    {
      "name": "URL to Image",
      "value": "urlToImage",
      "action": "Capture screenshot of a website",
      "description": "Capture a screenshot of a website"
    }
  ]

npm_readme:
  # n8n-nodes-htmlcsstoimage

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

  htmlcsstoimg.com is a service that allows you to convert HTML and CSS into images and screenshots of websites.

  [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

  *   **HTML to Image**: Convert HTML and CSS to an image.
  *   **Capture Website Screenshot**: Capture a screenshot of a website from a URL.

  ## Credentials

  You will need to sign up for an account at [htmlcsstoimg.com](https://htmlcsstoimg.com/) to get an API key.

  ## Compatibility

  This node is tested against n8n version 1.0.0 and above.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [htmlcsstoimg.com documentation](https://htmlcsstoimg.com/docs)

ai_documentation_summary:
  {"purpose":"Converts HTML/CSS code or website URLs into image files using the htmlcsstoimg.com service.","capabilities":["Convert HTML and CSS to an image","Capture a screenshot of a website from a URL","Customize rendering via HTML/CSS input","Generate images from live web pages"],"authentication":"API key required (obtained from htmlcsstoimg.com account)","commonUseCases":["Generating product mockups from HTML designs","Creating website screenshots for documentation","Converting code snippets to visual previews","Automating social media image generation from web content"],"limitations":["Dependent on external service (htmlcsstoimg.com) availability and rate limits","Requires external account setup and API key management","May have rendering constraints based on the third-party service's capabilities"],"relatedNodes":["HTTP Request","Code","Image Output"]}


node_type: n8n-nodes-seo-content-machine.seoContentMachine
package_name: n8n-nodes-seo-content-machine
display_name: SEO Content Machine
description: SEO Content Machine node
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: seocontentmachine
author_github_url: https://github.com/gitTerebi/
npm_package_name: n8n-nodes-seo-content-machine
npm_version: 0.1.20
community_fetched_at: 2026-07-14T14:40:33.178Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "task",
      "options": [
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "Other",
          "value": "other"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "start",
      "options": [
        {
          "name": "Abort",
          "value": "abort",
          "action": "Abort a task",
          "description": "Abort a running task"
        },
        {
          "name": "Content",
          "value": "content",
          "action": "Get content from task",
          "description": "Gets content created by a task"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task",
          "description": "Create a new task"
        },
        {
          "name": "Data",
          "value": "data",
          "action": "Get task data",
          "description": "Get task data"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a task",
          "description": "Delete a task"
        },
        {
          "name": "Duplicate",
          "value": "duplicate",
          "action": "Duplicate a task",
          "description": "Duplicate a task"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find tasks",
          "description": "Find tasks"
        },
        {
          "name": "Start",
          "value": "start",
          "action": "Start a task",
          "description": "Start a task"
        },
        {
          "name": "Status",
          "value": "status",
          "action": "Get task status",
          "description": "Get task status"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update task data",
          "description": "Update task data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "spin",
      "options": [
        {
          "name": "About Me",
          "value": "about",
          "action": "Generate about me",
          "description": "Generate about me"
        },
        {
          "name": "Spin",
          "value": "spin",
          "action": "Spin text",
          "description": "Spin/Rewrite text"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "other"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Abort",
      "value": "abort",
      "action": "Abort a task",
      "description": "Abort a running task",
      "resource": "task"
    },
    {
      "name": "Content",
      "value": "content",
      "action": "Get content from task",
      "description": "Gets content created by a task",
      "resource": "task"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "description": "Create a new task",
      "resource": "task"
    },
    {
      "name": "Data",
      "value": "data",
      "action": "Get task data",
      "description": "Get task data",
      "resource": "task"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a task",
      "description": "Delete a task",
      "resource": "task"
    },
    {
      "name": "Duplicate",
      "value": "duplicate",
      "action": "Duplicate a task",
      "description": "Duplicate a task",
      "resource": "task"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find tasks",
      "description": "Find tasks",
      "resource": "task"
    },
    {
      "name": "Start",
      "value": "start",
      "action": "Start a task",
      "description": "Start a task",
      "resource": "task"
    },
    {
      "name": "Status",
      "value": "status",
      "action": "Get task status",
      "description": "Get task status",
      "resource": "task"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update task data",
      "description": "Update task data",
      "resource": "task"
    },
    {
      "name": "About Me",
      "value": "about",
      "action": "Generate about me",
      "description": "Generate about me",
      "resource": "other"
    },
    {
      "name": "Spin",
      "value": "spin",
      "action": "Spin text",
      "description": "Spin/Rewrite text",
      "resource": "other"
    }
  ]

npm_readme:
  # n8n-nodes-seo-content-machine

  This is a n8n community node. It lets you use SEO Content Machine in your n8n workflows.

  SEO Content Machine (https://seocontentmachine.com)  is a scraper and AI content generator desktop tool.

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

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

  ## Installation

  Follow the [official SCM n8n node install guide](https://forum.seocontentmachine.com/t/how-to-install-and-configure-scm-n8n-node/831) on the SCM forum.

  For generic n8n help check out the [n8n community node guide](https://docs.n8n.io/integrations/community-nodes/installation/).

  ## Operations

  Task, Other

  ## Credentials

  You need the SCM API url and port that is displayed on the SCM desktop app.

  ## Resources

  *	[Official SCM n8n node install guide](https://forum.seocontentmachine.com/t/how-to-install-and-configure-scm-n8n-node/831)
  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)

ai_documentation_summary:
  {"purpose":"Integrates the SEO Content Machine desktop tool into n8n workflows to perform SEO scraping and AI content generation.","capabilities":["SEO content scraping","AI content generation","Desktop tool integration","Workflow automation"],"authentication":"API URL and port from SCM desktop app","commonUseCases":["Automated SEO content creation","Web scraping for keyword research","Content generation workflows"],"limitations":["Requires separate desktop application installation","Configuration depends on SCM desktop app settings"],"relatedNodes":["n8n-nodes-seo-content-machine.seoContentMachine"]}


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

updated_at: 2026-07-14 14:40:33
author_name: mailtrap
author_github_url: https://github.com/railsware/mailtrap-n8n.git
npm_package_name: n8n-nodes-mailtrap
npm_version: 1.1.4
community_fetched_at: 2026-07-14T14:40:33.179Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "mail",
      "options": [
        {
          "name": "Mail",
          "value": "mail"
        },
        {
          "name": "Contact",
          "value": "contact"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send Email",
          "value": "send",
          "action": "Send an email",
          "description": "Send an email"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "mail"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Contact",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a contact"
        },
        {
          "name": "Update Contact",
          "value": "update",
          "action": "Update a contact",
          "description": "Update a contact"
        },
        {
          "name": "Delete Contact",
          "value": "delete_",
          "action": "Delete a contact",
          "description": "Delete a contact"
        },
        {
          "name": "Get Contact Lists",
          "value": "getLists",
          "action": "Get contact lists"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Email",
      "value": "send",
      "action": "Send an email",
      "description": "Send an email",
      "resource": "mail"
    },
    {
      "name": "Create Contact",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a contact",
      "resource": "contact"
    },
    {
      "name": "Update Contact",
      "value": "update",
      "action": "Update a contact",
      "description": "Update a contact",
      "resource": "contact"
    },
    {
      "name": "Delete Contact",
      "value": "delete_",
      "action": "Delete a contact",
      "description": "Delete a contact",
      "resource": "contact"
    },
    {
      "name": "Get Contact Lists",
      "value": "getLists",
      "action": "Get contact lists",
      "resource": "contact"
    }
  ]

npm_readme:
  # Mailtrap.io N8N Integration - Official

  This is the official Mailtrap.io integration for N8N, allowing you to seamlessly integrate Mailtrap's email testing and delivery services into your N8N workflows.

  ## Prerequisites

  Before using this integration, please ensure you have:
  - A [Mailtrap.io](https://mailtrap.io/signup) account
  - Your sending [domain verified](https://mailtrap.io/sending/domains) in Mailtrap (required for sending emails)

  ## Installation

  ### Community Nodes (Recommended)
  For n8n version 0.187 and later, you can install this node through the Community Nodes panel:

  1. Go to Settings > Community Nodes
  2. Select Install
  3. Enter `n8n-nodes-mailtrap` in Enter npm package name
  4. Agree to the risks of using community nodes
  5. Select Install

  ### n8n Cloud
  If you're using [n8n Cloud](https://cloud.n8n.io/), the Mailtrap node is available out of the box. Simply search for "Mailtrap" in the node library when building your workflows.

  ### Manual Installation
  Alternatively, you can install the node manually using one of these methods:

  #### Using npm
  ```bash
  npm install n8n-nodes-mailtrap
  ```

  #### Using pnpm
  ```bash
  pnpm add n8n-nodes-mailtrap
  ```

  For more detailed installation instructions, please refer to the [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/installation/).

  ## Features

  This integration provides the following capabilities:
  - Send emails through Mailtrap's services:
    - Transactional emails
    - Bulk stream emails
  - Manage your Mailtrap contacts:
    - Create new contacts
    - Delete existing contacts
    - Update contact information
    - Get a list of your Mailtrap Lists

  ## Usage

  1. After installation, restart your n8n instance
  2. In your n8n workflow, you'll find the Mailtrap node under the "Mailtrap" category
  3. Configure the node with your [Mailtrap API token](https://mailtrap.io/api-tokens) (you can find it in your Mailtrap account settings)
  4. Use the node to send emails or manage contacts according to your needs

  ## Node local development setup
  ### Prerequisites
  - Node v18..22
  - pnpm
  - Local N8N installation (`npm i -g n8n`)
  #### After that:
  Install the dependencies:
  ```shell
    pnpm install
  ```
  Publish the node locally:
  ```shell
    pnpm link
  ```
  And build it:
  ```shell
    pnpm build
  ```
  Go to `~/.n8n/custom` (Linux, Mac), and link it there:
  ```bash
    cd ~/.n8n/custom
  ```
  OR create the folder manually:
  ```bash
    mkdir ~/.n8n/custom
    cd ~/.n8n/custom
  ```
  ```bash
    pnpm link n8n-nodes-mailtrap
  ```

  After that, you can start the local hosted n8n instance:
  ```shell
    n8n
  ```

ai_documentation_summary:
  {"purpose":"This node enables interaction with the Mailtrap API to send transactional and bulk emails, as well as manage contacts and lists within n8n workflows.","capabilities":["Send transactional emails","Send bulk stream emails","Create new Mailtrap contacts","Delete existing contacts","Update contact information","Retrieve list of Mailtrap lists"],"authentication":"API token required (Mailtrap API token)","commonUseCases":["Testing email delivery in development environments","Sending notifications or alerts via email","Managing email recipient lists for campaigns"],"limitations":["Domain verification required before sending emails","Requires Mailtrap.io account"],"relatedNodes":[]}


node_type: n8n-nodes-1shot.oneShot
package_name: n8n-nodes-1shot
display_name: 1Shot API
description: Interact with EVM blockchains via 1Shot API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: csibbach
author_github_url: https://github.com/UXlySoftware/
npm_package_name: n8n-nodes-1shot
npm_version: 1.0.35
community_fetched_at: 2026-07-14T14:40:33.184Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contractMethods",
      "options": [
        {
          "name": "X402 Request",
          "value": "x402Request"
        },
        {
          "name": "Chain",
          "value": "chains"
        },
        {
          "name": "Contract Event",
          "value": "contractEvents"
        },
        {
          "name": "Contract Method",
          "value": "contractMethods"
        },
        {
          "name": "Prompt",
          "value": "prompts"
        },
        {
          "name": "Transaction",
          "value": "transactions"
        },
        {
          "name": "Wallet",
          "value": "wallets"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List Chains",
          "value": "list",
          "action": "List chains",
          "description": "List chains supported by 1Shot API"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chains"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contract event",
          "description": "Create a new contract event definition"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contract event",
          "description": "Delete a contract event definition"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contract event",
          "description": "Get a single contract event definition"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all contract events",
          "description": "List all contract event definitions"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search contract event logs",
          "description": "Search for contract event logs on the blockchain"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contract event",
          "description": "Update an existing contract event definition"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contractEvents"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Assure Contract Methods From Prompt",
          "value": "assureContractMethodsFromPrompt",
          "action": "Assure contract methods from prompt",
          "description": "This will make sure you have a set of Contract Methods ready to use based on your chosen Prompt"
        },
        {
          "name": "Encode",
          "value": "encode",
          "action": "Encode a smart contract method call",
          "description": "Encode a contract method call. This produces the calldata for the contract method, which is sometimes required for other contract methods."
        },
        {
          "name": "Estimate",
          "value": "estimate",
          "action": "Estimate the gas cost of a smart contract method",
          "description": "Get an estimate of the gas cost of a contract method"
        },
        {
          "name": "Execute",
          "value": "execute",
          "action": "Execute a smart contract method",
          "description": "Execute a smart contract method on the blockchain"
        },
        {
          "name": "Execute as Delegator",
          "value": "executeAsDelegator",
          "action": "Execute a smart contract method as delegator",
          "description": "Execute a smart contract method on the blockchain using a stored ERC-7710 delegation"
        },
        {
          "name": "Execute Batch",
          "value": "executeBatch",
          "action": "Execute multiple smart contract methods",
          "description": "Execute multiple smart contract methods in a single transaction"
        },
        {
          "name": "Execute Batch as Delegator",
          "value": "executeAsDelegatorBatch",
          "action": "Execute multiple smart contract methods as delegator",
          "description": "Execute multiple smart contract methods as a delegator in a single transaction"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a smart contract method",
          "description": "Get a single smart contract method"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all smart contract methods",
          "description": "List all smart contract methods"
        },
        {
          "name": "Read",
          "value": "read",
          "action": "Read data from a smart contract function",
          "description": "Read data from a smart contract view or pure function"
        },
        {
          "name": "Simulate",
          "value": "simulate",
          "action": "Simulate a smart contract method call",
          "description": "Simulate a smart contract method call and see if it would succeed with the current state of the chain"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contractMethods"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create Wallet",
          "value": "create",
          "action": "Create wallet",
          "description": "Creates a new Wallet. It will be empty until you add funds to it."
        },
        {
          "name": "Delete Wallet",
          "value": "delete",
          "action": "Delete wallet",
          "description": "Deletes a Wallet"
        },
        {
          "name": "Get Wallet",
          "value": "get",
          "action": "Get wallet",
          "description": "Get a specific Wallet"
        },
        {
          "name": "List Wallets",
          "value": "list",
          "action": "List wallets",
          "description": "List Wallets for a given chain"
        },
        {
          "name": "Update Wallet",
          "value": "update",
          "action": "Update wallet",
          "description": "Update a Wallet"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "wallets"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search Prompts",
          "value": "search",
          "action": "Search prompts",
          "description": "Search for prompts with semantic search"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "prompts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List Transactions",
          "value": "list",
          "action": "List transactions",
          "description": "List 1Shot API transactions with optional filters"
        },
        {
          "name": "Get Transaction",
          "value": "get",
          "action": "Get transaction",
          "description": "Get a specific Transaction"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transactions"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "x402",
      "options": [
        {
          "name": "X402 HTTP Request",
          "value": "x402",
          "action": "X402 HTTP Request",
          "description": "Make an HTTP request to an x402-enabled API endpoint. Any fee will be paid using a 1Shot Wallet."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "x402Request"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "List Chains",
      "value": "list",
      "action": "List chains",
      "description": "List chains supported by 1Shot API",
      "resource": "chains"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contract event",
      "description": "Create a new contract event definition",
      "resource": "contractEvents"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contract event",
      "description": "Delete a contract event definition",
      "resource": "contractEvents"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contract event",
      "description": "Get a single contract event definition",
      "resource": "contractEvents"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all contract events",
      "description": "List all contract event definitions",
      "resource": "contractEvents"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search contract event logs",
      "description": "Search for contract event logs on the blockchain",
      "resource": "contractEvents"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contract event",
      "description": "Update an existing contract event definition",
      "resource": "contractEvents"
    },
    {
      "name": "Assure Contract Methods From Prompt",
      "value": "assureContractMethodsFromPrompt",
      "action": "Assure contract methods from prompt",
      "description": "This will make sure you have a set of Contract Methods ready to use based on your chosen Prompt",
      "resource": "contractMethods"
    },
    {
      "name": "Encode",
      "value": "encode",
      "action": "Encode a smart contract method call",
      "description": "Encode a contract method call. This produces the calldata for the contract method, which is sometimes required for other contract methods.",
      "resource": "contractMethods"
    },
    {
      "name": "Estimate",
      "value": "estimate",
      "action": "Estimate the gas cost of a smart contract method",
      "description": "Get an estimate of the gas cost of a contract method",
      "resource": "contractMethods"
    },
    {
      "name": "Execute",
      "value": "execute",
      "action": "Execute a smart contract method",
      "description": "Execute a smart contract method on the blockchain",
      "resource": "contractMethods"
    },
    {
      "name": "Execute as Delegator",
      "value": "executeAsDelegator",
      "action": "Execute a smart contract method as delegator",
      "description": "Execute a smart contract method on the blockchain using a stored ERC-7710 delegation",
      "resource": "contractMethods"
    },
    {
      "name": "Execute Batch",
      "value": "executeBatch",
      "action": "Execute multiple smart contract methods",
      "description": "Execute multiple smart contract methods in a single transaction",
      "resource": "contractMethods"
    },
    {
      "name": "Execute Batch as Delegator",
      "value": "executeAsDelegatorBatch",
      "action": "Execute multiple smart contract methods as delegator",
      "description": "Execute multiple smart contract methods as a delegator in a single transaction",
      "resource": "contractMethods"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a smart contract method",
      "description": "Get a single smart contract method",
      "resource": "contractMethods"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all smart contract methods",
      "description": "List all smart contract methods",
      "resource": "contractMethods"
    },
    {
      "name": "Read",
      "value": "read",
      "action": "Read data from a smart contract function",
      "description": "Read data from a smart contract view or pure function",
      "resource": "contractMethods"
    },
    {
      "name": "Simulate",
      "value": "simulate",
      "action": "Simulate a smart contract method call",
      "description": "Simulate a smart contract method call and see if it would succeed with the current state of the chain",
      "resource": "contractMethods"
    },
    {
      "name": "Create Wallet",
      "value": "create",
      "action": "Create wallet",
      "description": "Creates a new Wallet. It will be empty until you add funds to it.",
      "resource": "wallets"
    },
    {
      "name": "Delete Wallet",
      "value": "delete",
      "action": "Delete wallet",
      "description": "Deletes a Wallet",
      "resource": "wallets"
    },
    {
      "name": "Get Wallet",
      "value": "get",
      "action": "Get wallet",
      "description": "Get a specific Wallet",
      "resource": "wallets"
    },
    {
      "name": "List Wallets",
      "value": "list",
      "action": "List wallets",
      "description": "List Wallets for a given chain",
      "resource": "wallets"
    },
    {
      "name": "Update Wallet",
      "value": "update",
      "action": "Update wallet",
      "description": "Update a Wallet",
      "resource": "wallets"
    },
    {
      "name": "Search Prompts",
      "value": "search",
      "action": "Search prompts",
      "description": "Search for prompts with semantic search",
      "resource": "prompts"
    },
    {
      "name": "List Transactions",
      "value": "list",
      "action": "List transactions",
      "description": "List 1Shot API transactions with optional filters",
      "resource": "transactions"
    },
    {
      "name": "Get Transaction",
      "value": "get",
      "action": "Get transaction",
      "description": "Get a specific Transaction",
      "resource": "transactions"
    },
    {
      "name": "X402 HTTP Request",
      "value": "x402",
      "action": "X402 HTTP Request",
      "description": "Make an HTTP request to an x402-enabled API endpoint. Any fee will be paid using a 1Shot Wallet.",
      "resource": "x402Request"
    }
  ]

npm_readme:
  [![Watch the tutorial](https://img.youtube.com/vi/WLkwqC4B2r4/maxresdefault.jpg)](https://youtu.be/WLkwqC4B2r4)

  # n8n-nodes-1shot

  The [1Shot API](https://1shotapi.com) n8n node lets you read and write to any EVM blockchain from your n8n workflows. 1Shot API is a powerful managed wallet and transaction service for the EVM ecosystem; it ensures transactions are confirmed (handling retries and gas optimization) and sends webhook callbacks when they are finalized, making it perfect for use in any AI workflow platform. 

  It also allows smart contract functions to be used like tools by agents; 1Shot Prompts provides a contract library with detailed prompts at the contract, function, input and output level so that agents and LLMs can better reason about how to use smart contracts to fullfil a user task. Additionally, 1Shot Prompts lets humans and agents search for smart contracts semantically, so you don't have manually find your target smart contract by parsing through blockscanners. 

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

  [Installation](#installation)  
  [Operations](#operations)  
  [Credentials](#credentials)  <!-- delete if no auth needed -->  
  [Compatibility](#compatibility)  
  [Usage](#usage)  <!-- delete if not using this section -->  
  [Resources](#resources)  
  [Version history](#version-history)  <!-- delete if not using this section -->  

  ## Installation

  <p align="center">
    <img src="/static/install.gif" alt="Install the 1Shot API node">
  </p>

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

  To install the 1Shot API node, go to your user settings and select *Community nodes* in the left-hand navigation bar. Search for `n8n-nodes-1shot`. Click install.

  ## Operations

  The 1Shot API node supports the following operations:
  - manage your 1Shot API wallets
  - semantically search for smart contracts on specific networks and import them to your account as tools
  - read data from and execute transaction on smart contract functions

  ## Credentials

  <p align="center">
    <img src="/static/credentials.gif" alt="Authenticating your 1Shot API node">
  </p>

  You must authenticate your 1Shot API node against your business account in 1Shot API. Create a free account then create a new [API key and secret](https://app.1shotapi.com/api-keys). Then grab your business id from the [business' details](https://app.1shotapi.com/organizations) page. 

  Enter these three quantities into the 1Shot node to connect n8n. 

  ## Compatibility

  The n8n 1Shot API community node is compatible with n8n version 1.95.3 or later. 

  ## Usage

  Check out our [documentation](https://docs.1shotapi.com/automation/n8n.html) for more information and examples of how you can use 1Shot API to automate onchain tasks with n8n.

  ### x402 Workflow 

  <p align="center">
    <img src="/static/n8n-x402.gif" alt="x402 workflow">
  </p>

  Try out the [x402 workflow](https://n8n.io/workflows/5389-monetize-workflows-with-x402-payment-protocol-and-1shot-api/) to see how 1Shot API can simulate and execute onchain transactions. Import the json file directly into an n8n workflow, then authenticate the 1Shot API nodes against your 1Shot API account. Be sure to set the correct *Contract Method Name* in the 1Shot API selector box for both the Simulate and Submit stages as explained in the [tutorial video](https://youtu.be/m3ThthLtj3g). 

  ```sh
  # example curl call to your n8n webhook endpoint
  # be sure to change the URL to your n8n webhook url and set a proper x-payment header
  curl -X GET \
    https://hook.us2.make.com/5qimwe147tq9ew7k9bwarnb3rtr6hi3g \
    -H "x-payment: eyJ4NDAyVmVyc2lvbiI6MSwic2NoZW1lIjoiZXhhY3QiLCJuZXR3b3JrIjoiYmFzZS1zZXBvbGlhIiwicGF5bG9hZCI6eyJzaWduYXR1cmUiOiIweDE0ZjNkNGUyODNlMTgyNTdiMTBlMTkyNzRlNzgyZTU0YTQyOWExZDkzZDgzYTczYjY5YTAyOTYxY2IyNDYzOTI1ODU0M2Y3NjhmYTQyMzVkNTQzYzM2MWQ4ZGRhNTE2MzdjMWE3OWY1MTY0YTkyYTRhZGYxZDE4ZTBhYjQ4YzQyMWIiLCJhdXRob3JpemF0aW9uIjp7ImZyb20iOiIweDU1NjgwYzZiNjlkNTk4YzBiNDJmOTNjZDUzZGZmM2QyMGUwNjliNWIiLCJ0byI6IjB4RTkzNmU4RkFmNEE1NjU1NDY5MTgyQTQ5YTUwNTA1NUI3MUMxNzYwNCIsInZhbHVlIjoiNTAwMDAiLCJ2YWxpZEFmdGVyIjoiMTc1MTU3NDI2MiIsInZhbGlkQmVmb3JlIjoiMTc1MTU3NDM4MiIsIm5vbmNlIjoiMHg4NDA5NmMwODBkNDg5NTg1MmRiNGRkZGVmN2Q3NmM1MzM4OWVmZjE4YWIwMTk0MGJhY2EwYmRhYmQ4OTRhZmYxIn19fQ==" \
    -H "User-Agent: CustomUserAgent/1.0" \
    -H "Accept: application/json"

  curl -X GET \
    https://n8n.1shotapi.dev/webhook-test/92c5ca23-99a7-437d-85da-84aef8bd2a25 \
    -H "x-payment: eyJ4NDAyVmVyc2lvbiI6MSwic2NoZW1lIjoiZXhhY3QiLCJuZXR3b3JrIjoiYmFzZS1zZXBvbGlhIiwicGF5bG9hZCI6eyJzaWduYXR1cmUiOiIweDE0ZjNkNGUyODNlMTgyNTdiMTBlMTkyNzRlNzgyZTU0YTQyOWExZDkzZDgzYTczYjY5YTAyOTYxY2IyNDYzOTI1ODU0M2Y3NjhmYTQyMzVkNTQzYzM2MWQ4ZGRhNTE2MzdjMWE3OWY1MTY0YTkyYTRhZGYxZDE4ZTBhYjQ4YzQyMWIiLCJhdXRob3JpemF0aW9uIjp7ImZyb20iOiIweDU1NjgwYzZiNjlkNTk4YzBiNDJmOTNjZDUzZGZmM2QyMGUwNjliNWIiLCJ0byI6IjB4RTkzNmU4RkFmNEE1NjU1NDY5MTgyQTQ5YTUwNTA1NUI3MUMxNzYwNCIsInZhbHVlIjoiNTAwMDAiLCJ2YWxpZEFmdGVyIjoiMTc1MTU3NDI2MiIsInZhbGlkQmVmb3JlIjoiMTc1MTU3NDM4MiIsIm5vbmNlIjoiMHg4NDA5NmMwODBkNDg5NTg1MmRiNGRkZGVmN2Q3NmM1MzM4OWVmZjE4YWIwMTk0MGJhY2EwYmRhYmQ4OTRhZmYxIn19fQ==" \
    -H "User-Agent: CustomUserAgent/1.0" \
    -H "Accept: application/json"
  ```

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * See the [1Shot API documentation](https://docs.1shotapi.com) for more information on its features. 

  ## Version history

  latest version: `1.0.12`

ai_documentation_summary:
  {"purpose":"This n8n node enables interaction with EVM blockchains through the 1Shot API, allowing for wallet management, smart contract searches, and transaction execution with automatic confirmation and gas optimization.","capabilities":["Manage 1Shot API wallets","Semantically search for smart contracts on specific networks","Import smart contracts as tools for agents","Read data from smart contract functions","Execute transactions on smart contract functions","Handle transaction retries and gas optimization","Receive webhook callbacks when transactions are finalized"],"authentication":"API key required (Business ID, API Key, and Secret)","commonUseCases":["Automating onchain tasks in AI workflows","Simulating and executing onchain transactions","Enabling agents to use smart contract functions as tools","Automated payment processing via 1Shot Payment Protocol"],"limitations":["Requires a free or paid 1Shot API account with valid credentials","Compatible only with n8n version 1.95.3 or later","Requires manual configuration of Contract Method Name for specific operations"],"relatedNodes":["n8n Webhook Node","n8n HTTP Request Node","n8n Blockchain Nodes (general)"]}


node_type: n8n-nodes-oxylabs-ai-studio.oxylabsAiStudio
package_name: n8n-nodes-oxylabs-ai-studio
display_name: Oxylabs AI Studio
description: Interact with Oxylabs AI Studio API
category: Community
development_style: declarative
version: 1
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: oxybrain
author_github_url: https://github.com/oxylabs/n8n-nodes-oxylabs-ai-studio
npm_package_name: n8n-nodes-oxylabs-ai-studio
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:33.185Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "scraper",
      "options": [
        {
          "name": "Browser Agent",
          "value": "browserAgent"
        },
        {
          "name": "Crawler",
          "value": "crawler"
        },
        {
          "name": "Map",
          "value": "map"
        },
        {
          "name": "Scraper",
          "value": "scraper"
        },
        {
          "name": "Search",
          "value": "search"
        }
      ],
      "required": true,
      "description": "Choose the resource to use",
      "displayName": "Resource",
      "noDataExpression": true
    }
  ]

npm_readme:
  # n8n-nodes-oxylabs-ai-studio

  This is an n8n community node. It lets you use Oxylabs Ai Studio Apps 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)  <!-- delete if no auth needed -->  
  [Compatibility](#compatibility)  
  [Usage](#usage)  <!-- delete if not using this section -->  
  [Resources](#resources)  
  [Version history](#version-history)  <!-- delete if not using this section -->  

  ## Installation

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

  ## Credentials

  Sign up and get API KEY from [here](https://aistudio.oxylabs.io/settings/api-key)

  ## Compatibility

  node was tested against version `1.100.1`.

  ## Resources

  The node includes four resources: Scraper, Crawler, Browser Agent, and Search. These correspond directly to the same applications available in Oxylabs AI Studio’s [web apps](https://aistudio.oxylabs.io/apps).

  The parameters are nearly identical to those offered by the official SDKs ([Javscript](https://www.npmjs.com/package/oxylabs-ai-studio) and [Python](https://pypi.org/project/oxylabs-ai-studio/)).

  An additional parameter not found in the web interface is `render_javascript`, which is especially useful for handling websites that rely on JavaScript for rendering content.


  ## Usage

  - Scraper is useful for extracting information from a specific URL without getting blocked.

  - Crawler is ideal for scanning an entire domain to collect URLs and their content in order to locate specific information.

  - Search helps retrieve the latest information related to a particular query.

  - Browser Agent controls a remote browser and can perform interactions, such as logging into an app and clicking buttons, making it valuable for scenarios that require user-like actions.



  ## Version history

  - 0.1.0: First version released

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with Oxylabs AI Studio API to perform web scraping, crawling, searching, and browser automation tasks within workflows.","capabilities":["Web scraping from specific URLs","Domain crawling to collect URLs and content","Search queries for retrieving latest information","Browser automation via remote browser control","JavaScript rendering support via render_javascript parameter"],"authentication":"API key required","commonUseCases":["Extracting data from websites without getting blocked","Scanning entire domains to locate specific information","Retrieving up-to-date search results","Automating user-like interactions such as logging in and clicking buttons"],"limitations":["Community node (not official n8n node)","Requires separate API key from Oxylabs AI Studio"],"relatedNodes":["n8n-nodes-web-request","n8n-nodes-http-request"]}


node_type: n8n-nodes-octagon.octagonAgents
package_name: n8n-nodes-octagon
display_name: Octagon
description: Financial AI agents
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: octagonai
author_github_url: https://github.com/OctagonAI/
npm_package_name: n8n-nodes-octagon
npm_version: 1.1.4
community_fetched_at: 2026-07-14T14:40:33.186Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # Octagon for n8n

  A professional n8n node that integrates with [Octagon's AI Agents API](https://docs.octagonagents.com/) for financial and market research. This node provides access to Octagon's specialized AI agents for analyzing prediction markets, SEC filings, earnings transcripts, stock data, and more.

  ## Features

  - **🔄 Smart Router Agent**: Octagon Agent automatically routes queries to the most appropriate specialized agent
  - **6 Public-Market Specialists**: Octagon Agent routes only across the six public-market specialists; prediction-markets and deep-research remain separate tools
  - **Prediction Markets Modes**: Generate reports, inspect cached report metadata, or force a fresh Kalshi report
  - **🔒 Secure Authentication**: Built-in credential management for API keys
  - **📊 Rich Output**: Returns analysis with source citations and metadata
  - **⚡ Simplified Interface**: Clean, professional UI with essential options only
  - **🛡️ Error Handling**: Graceful error handling with detailed error messages

  ## Available Agents

  ### 🔄 **Smart Router (Default)**

  - **Octagon Agent** (`octagon-agent`) - Intelligent router that automatically selects the best specialized agent for your query

  ### 📈 **Public Market Agents**

  - **SEC Filings Agent** (`octagon-sec-agent`) - Analyzes SEC filings data
  - **Transcripts Agent** (`octagon-transcripts-agent`) - Analyzes earnings call transcripts
  - **Stock Data Agent** (`octagon-stock-data-agent`) - Analyzes stock market data
  - **Financials Agent** (`octagon-financials-agent`) - Analyzes financial statements
  - **Holdings Agent** (`octagon-holdings-agent`) - Analyzes institutional ownership and holdings
  - **Crypto Agent** (`octagon-crypto-agent`) - Analyzes cryptocurrency market data

  ### 🔍 **Research Agents**

  - **Prediction Markets Agent** (`octagon-prediction-markets-agent`) - Creates Kalshi prediction market reports
  - **Deep Research Agent** (`octagon-deep-research-agent`) - Conducts in-depth research

  ## Installation

  ### Prerequisites

  1. **Octagon API Key**: Get your free API key from [Octagon](https://octagonagents.com)
     - Sign up for an account
     - Go to Settings → API Keys
     - Create a new API key

  2. **n8n Installation**: This node requires n8n v0.198.0 or higher

  ### Install in n8n Cloud

  > **Note**: Only the n8n instance owner can install and manage community nodes. The instance owner is the person who sets up and manages user management. All members of an n8n instance can use already installed community nodes in their workflows.

  #### Install a verified community node

  To install the Octagon community node:

  1. **Access the nodes panel**: Go to the Canvas and open the nodes panel (either by selecting '+' or pressing Tab).

  2. **Search for Octagon**: Search for "Octagon" in the node search. If there is a matching verified community node, you will see a **More from the community** section at the bottom of the nodes panel.

  3. **Select the node**: Select the Octagon node you want to install. This takes you to a detailed view of the node, showing all the supported actions.

  4. **Install**: Select **Install**. This will install the node for your instance and enable all members to use it in their workflows.

  5. **Start using**: You can now add the Octagon node to your workflows.

  #### Alternative installation method

  If the node doesn't appear in the Canvas search:

  1. **Go to Settings**: Navigate to **Settings** → **Community nodes**.
  2. **Install a community node**: Click **Install a community node**.
  3. **Enter package name**: Enter the npm package name: `n8n-nodes-octagon`
  4. **Install**: Click **Install** and wait for the installation to complete.
  5. **Verify**: Go to your workflow editor and search for "Octagon" in the nodes panel.

  > **Important**: Community nodes in n8n Cloud are sandboxed and reviewed for security. Installation may take a few minutes to complete.

  #### Uninstall a community node

  To uninstall the Octagon community node:

  1. **Go to Settings**: Navigate to **Settings** → **Community nodes**.
  2. **Find the node**: Locate the Octagon node in your installed community nodes.
  3. **Open options**: Select **Options** (three dots menu) on the node.
  4. **Uninstall**: Select **Uninstall package**.
  5. **Confirm**: Select **Uninstall Package** in the confirmation modal.

  ## Usage

  ### Quick Start

  1. **Add Node**: Search for "Octagon" in n8n workflow
  2. **Configure**:
     - **Add Credentials**: Go to Credentials → "Octagon API"
     - **Agent**: Use "Octagon Agent (Router)" for automatic routing (default)
     - **Query**: Enter your financial research question
     - **Prediction Markets Mode**: When using Prediction Markets Agent, choose Default Report, Cache Search, or Refresh Report
  3. **Execute**: Run the workflow to get AI-powered analysis with citations

  ### Node Configuration

  The node interface is clean and simple:

  - **🎯 Agent**: Select from the router or 8 specialized agents
  - **💬 Query**: Your research question (supports complex queries and prediction markets prompts with Kalshi URLs)
  - **📈 Prediction Markets Mode**: Available when Prediction Markets Agent is selected
  - **⚙️ Additional Options**:
    - Include Token Usage (optional)

  ### Example Queries

  #### Universal Queries (using Octagon Agent Router)

  ```
  Tell me about Apple's latest earnings performance
  What's happening with Tesla's stock price?
  Summarize Nvidia's latest earnings guidance
  Compare Microsoft vs Google revenue growth
  ```

  #### Specialized Agent Queries

  ```
  # SEC Filings Agent
  What were Apple's revenue numbers in Q3 2023?
  Analyze Tesla's latest 10-K filing for risk factors

  # Transcripts Agent
  What did Apple's CEO say about iPhone sales in the latest earnings call?
  Analyze management guidance from Tesla's Q4 2023 earnings call

  # Stock Data Agent
  What's the 52-week high and low for AAPL?
  Compare Tesla's stock performance to the S&P 500 this year

  # Prediction Markets Agent
  Analyze https://kalshi.com/markets/kxbtcy/btc-price-range-eoy/kxbtcy-27jan0100 and summarize the edge
  Use cache mode for https://kalshi.com/markets/kxbtcy/btc-price-range-eoy/kxbtcy-27jan0100
  Refresh the report for https://kalshi.com/markets/kxbtcy/btc-price-range-eoy/kxbtcy-27jan0100
  ```

  ### Prediction Markets Mode

  When **Prediction Markets Agent** is selected, the node exposes three modes:

  - **Default Report**: Uses `octagon-prediction-markets-agent`, which checks the cache first and refreshes only on cache miss
  - **Cache Search**: Uses `octagon-prediction-markets-agent:cache`, which returns cache metadata as JSON text
  - **Refresh Report**: Uses `octagon-prediction-markets-agent:refresh`, which always generates a new report

  Prediction markets requests must include a Kalshi market URL in the query text.

  Cache Search responses keep the raw response in `analysis` and also expose parsed JSON in `cacheData` when available.

  Refresh requests may require a paid plan and premium credits, based on your Octagon subscription.

  ### Output Format

  The node returns a JSON object with the following structure:

  ```json
  {
  	"agent": "octagon-agent",
  	"model": "octagon-agent",
  	"query": "Tell me about Apple's latest earnings",
  	"analysis": "Apple reported strong Q4 2023 results with revenue of $89.5 billion...",
  	"sources": [
  		{
  			"order": 1,
  			"name": "Apple Inc. (10-Q) - 2023-Q4, Page: 10",
  			"url": "https://octagon-sec-filings.s3.amazonaws.com/..."
  		}
  	],
  	"metadata": {
  		"apiType": "responses",
  		"timestamp": "2024-01-15T10:30:00.000Z"
  	},
  	"usage": {
  		"prompt_tokens": 150,
  		"completion_tokens": 800,
  		"total_tokens": 950
  	}
  }
  ```

  ## Best Practices

  1. **🎯 Use the Router**: Start with "Octagon Agent (Router)" - it automatically selects the best specialized agent
  2. **📝 Be Specific**: The more specific your query, the more accurate the response
  3. **🔄 One Task Per Query**: Focus each query on a single analytical task for best results
  4. **📅 Provide Context**: Include relevant context like time periods, specific metrics, or companies
  5. **🔗 Follow Citations**: Always check the source citations for verification

  ## Error Handling

  The node includes comprehensive error handling:

  - **🔑 Authentication Errors**: Invalid API keys, expired tokens
  - **🌐 Network Errors**: Connection issues, timeouts, rate limits
  - **📝 Query Errors**: Malformed or empty queries
  - **🤖 Agent Errors**: Agent-specific errors or limitations

  By default, the node throws standard n8n errors and the execution fails in the n8n UI. HTTP and API failures are surfaced through n8n's normal error handling so you can inspect the full request context.

  If you enable **Continue On Fail** on the node, the node returns a structured error row instead of throwing:

  ```json
  {
  	"error": true,
  	"message": "Authentication failed. Please check your API key.",
  	"query": "Your original query",
  	"agent": "octagon-agent",
  	"model": "octagon-agent",
  	"timestamp": "2024-01-15T10:30:00.000Z"
  }
  ```

  This lets workflows branch on failed items while preserving n8n-standard behavior when Continue On Fail is disabled.

  ## Release Process

  Verified n8n community-node releases must be published from GitHub Actions with npm provenance.

  To publish a new version:

  1. Merge the release changes to `main`.
  2. Ensure npm Trusted Publisher is configured for repository `OctagonAI/n8n-nodes-octagon` and workflow filename `publish.yml`.
  3. Bump the package version in the repository.
  4. Push the matching version tag to GitHub.
  5. Let `.github/workflows/publish.yml` publish the package with provenance.

  Do not publish verified releases with a local `npm publish` command.

  ## Troubleshooting

  ### Common Issues

  1. **Node not appearing**: Restart n8n after installation
  2. **Icon not loading**: Clear browser cache
  3. **Authentication errors**: Verify API key in credentials
  4. **Rate limiting**: Check your Octagon plan limits

  ### Support Channels

  - **📚 Documentation**: [Octagon API Documentation](https://docs.octagonagents.com/)
  - **🐛 Issues**: [GitHub Issues](https://github.com/OctagonAI/n8n-nodes-octagon/issues)
  - **💬 Support**: Contact Octagon support for API-related questions
  - **📧 Email**: support@octagonagents.com

  ## License

  MIT License - See [LICENSE](LICENSE) file for details.

  ## Contributing

  Contributions are welcome! Please read our [Contributing Guidelines](CONTRIBUTING.md) before submitting pull requests.

  ## Changelog

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

  ---

  **⚠️ Note**: This node requires an active Octagon API subscription. Some agents may have usage limits or require premium access. Get started with a free API key at [octagonagents.com](https://octagonagents.com).

ai_documentation_summary:
  {"purpose":"This n8n node integrates with Octagon's AI Agents API to perform financial and market research by routing queries to specialized agents for analyzing SEC filings, earnings transcripts, stock data, private market intelligence, and more.","capabilities":["Automatic query routing to specialized agents via Smart Router","Analysis of SEC filings and 10-K documents","Analysis of earnings call transcripts","Stock market data and financial statement analysis","Private company information and funding analysis","Cryptocurrency market data analysis","M&A and IPO deal analysis","Website data scraping","In-depth research capabilities","Source citations and metadata in output"],"authentication":"API key required (stored in n8n credentials)","commonUseCases":["Analyzing company financial performance and earnings","Researching private market deals and funding rounds","Extracting data from SEC filings and earnings calls","Comparing stock performance and market trends","Investigating institutional ownership and holdings"],"limitations":["Requires n8n v0.198.0 or higher","Requires Octagon API key access","Community node installation may take time in n8n Cloud","Only instance owners can install community nodes in n8n Cloud"],"relatedNodes":["n8n-nodes-octagon.octagonAgents","n8n-nodes-octagon.octagonAgentsRouter","n8n-nodes-octagon.octagonSecAgent","n8n-nodes-octagon.octagonTranscriptsAgent","n8n-nodes-octagon.octagonStockDataAgent"]}


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

updated_at: 2026-07-14 14:40:33
author_name: pdf4me_ynoox
author_github_url: https://github.com/pdf4me/
npm_package_name: n8n-nodes-pdf4me
npm_version: 2.3.1
community_fetched_at: 2026-07-14T14:40:33.187Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Comprehensive PDF and document processing: generate barcodes, convert files, extract data, manipulate images, and automate workflows with the PDF4ME API

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "ai",
      "options": [
        {
          "name": "AI",
          "value": "ai",
          "description": "AI-powered document processing and classification"
        },
        {
          "name": "Barcode",
          "value": "barcode",
          "description": "Generate QR codes and barcodes for use in documents"
        },
        {
          "name": "Convert",
          "value": "convert",
          "description": "Convert various document formats to and from PDF"
        },
        {
          "name": "Edit",
          "value": "edit",
          "description": "Edit PDF documents: add attachments, headers, footers, stamps, and signatures"
        },
        {
          "name": "Extract",
          "value": "extract",
          "description": "Extract data, text, tables, and attachments from documents"
        },
        {
          "name": "Invoice",
          "value": "invoice",
          "description": "Create compliant invoices: Swiss QR Bills and Zugferd invoices"
        },
        {
          "name": "Find Search",
          "value": "findSearch",
          "description": "Find and replace text, convert PDF to editable format using OCR"
        },
        {
          "name": "Forms",
          "value": "forms",
          "description": "Create, fill, and manage PDF forms"
        },
        {
          "name": "Generate",
          "value": "generate",
          "description": "Generate PDFs from templates with data, manage Word documents"
        },
        {
          "name": "Image",
          "value": "image",
          "description": "Process and manipulate images: resize, crop, rotate, compress, and extract text"
        },
        {
          "name": "Merge & Split",
          "value": "mergeSplit",
          "description": "Merge multiple PDFs or split PDFs by various criteria"
        },
        {
          "name": "Optimize Compress",
          "value": "optimizeCompress",
          "description": "Compress and optimize PDF files"
        },
        {
          "name": "Organize",
          "value": "organize",
          "description": "Organize PDF pages: delete, extract, and rotate pages"
        },
        {
          "name": "PDF4me",
          "value": "pdf4me",
          "description": "PDF4me-specific operations: upload files, get documents, and update hyperlinks"
        },
        {
          "name": "PDF",
          "value": "pdf",
          "description": "Get PDF metadata and repair PDF documents"
        },
        {
          "name": "Security",
          "value": "security",
          "description": "Protect and unlock PDF documents"
        },
        {
          "name": "Word",
          "value": "word",
          "description": "Manage Word document tracking changes"
        }
      ],
      "description": "Choose the type of PDF operation: generate documents, convert formats, process PDFs, extract data, or manage images",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "AI-Invoice Parser",
      "options": [
        {
          "name": "AI-Invoice Parser",
          "value": "AI-Invoice Parser",
          "action": "AI-Invoice Parser",
          "description": "Extract structured data from invoices using AI/ML technology for automated data entry"
        },
        {
          "name": "AI-Process Bank Cheque",
          "value": "AI-Process Bank Cheque",
          "action": "AI-Process Bank Cheque",
          "description": "Extract structured data from bank cheques using AI/ML technology for payment processing"
        },
        {
          "name": "AI-Process Credit Card",
          "value": "AI-Process Credit Card",
          "action": "AI-Process Credit Card",
          "description": "Extract structured data from credit cards using AI/ML technology for payment processing"
        },
        {
          "name": "AI-Process Contract",
          "value": "AI-Process Contract",
          "action": "AI-Process Contract",
          "description": "Extract structured data from contracts using AI/ML technology for legal document analysis"
        },
        {
          "name": "AI-Process HealthCard",
          "value": "AI-Process HealthCard",
          "action": "AI-Process HealthCard",
          "description": "Extract structured data from health cards using AI/ML technology for member management"
        },
        {
          "name": "AI-Process Marriage Certificate",
          "value": "AI-Process Marriage Certificate",
          "action": "AI-Process Marriage Certificate",
          "description": "Extract structured data from marriage certificates using AI/ML technology for document verification"
        },
        {
          "name": "AI-Process Mortgage Document",
          "value": "AI-Process Mortgage Document",
          "action": "AI-Process Mortgage Document",
          "description": "Extract structured data from mortgage documents using AI/ML technology for loan processing"
        },
        {
          "name": "AI-Process Pay Stub",
          "value": "AI-Process Pay Stub",
          "action": "AI-Process Pay Stub",
          "description": "Extract structured data from pay stubs using AI/ML technology for payroll processing"
        },
        {
          "name": "AI Auto Crop Document",
          "value": "AI Auto Crop Document",
          "action": "AI auto crop document",
          "description": "Automatically crop a document using AI to remove borders and unwanted areas"
        },
        {
          "name": "AI - Universal Document Data Extraction",
          "value": "Process Universal Document",
          "action": "AI - Universal Document Data Extraction",
          "description": "Extract specified fields from documents using universal document processing"
        },
        {
          "name": "AI-Process Shipping Label",
          "value": "Process Shipping Label",
          "action": "AI-Process Shipping Label",
          "description": "Process shipping labels to extract and analyze shipping information"
        },
        {
          "name": "AI-Process Order",
          "value": "Process Order",
          "action": "AI-Process Order",
          "description": "Process order documents to extract and analyze order information"
        },
        {
          "name": "AI-Process Receipt",
          "value": "Process Receipt",
          "action": "AI-Process Receipt",
          "description": "Process receipt documents to extract items, merchant info, totals, and custom fields"
        },
        {
          "name": "AI-Process Tax Document",
          "value": "Process Tax Document",
          "action": "AI-Process Tax Document",
          "description": "Process tax documents (W2, 1099, 1040, etc.) to extract tax information and custom fields"
        },
        {
          "name": "AI-Process Bank Statement",
          "value": "Process Bank Statement",
          "action": "AI-Process Bank Statement",
          "description": "Process bank statement documents to extract transactions, analyze patterns, and custom fields"
        }
      ],
      "displayName": "AI Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "ai"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Generate Barcode",
      "options": [
        {
          "name": "Add Barcode to PDF",
          "value": "Add Barcode To PDF",
          "action": "Add barcode to PDF",
          "description": "Add barcodes to existing PDF documents with positioning and styling options"
        },
        {
          "name": "Create Barcode",
          "value": "Generate Barcode",
          "action": "Create barcode",
          "description": "Generate various types of barcodes including QR codes, Code 128, Code 39, and more"
        },
        {
          "name": "Read SwissQR Code",
          "value": "Read SwissQR Code",
          "action": "Read SwissQR code",
          "description": "Read Swiss QR code data from PDF documents"
        },
        {
          "name": "Read Barcode from PDF",
          "value": "Read Barcode From PDF",
          "action": "Read barcode from PDF",
          "description": "Read single or multiple Barcodes or QR Codes from your PDF file"
        }
      ],
      "displayName": "Barcode Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "barcode"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Convert To PDF",
      "options": [
        {
          "name": "Convert JSON To Excel",
          "value": "Convert JSON To Excel",
          "action": "Convert JSON to Excel",
          "description": "Convert JSON data to Excel format"
        },
        {
          "name": "Convert to PDF",
          "value": "Convert To PDF",
          "action": "Convert to PDF",
          "description": "Convert various document formats to PDF"
        },
        {
          "name": "Convert VISIO",
          "value": "Convert VISIO",
          "action": "Convert VISIO",
          "description": "Convert VISIO files (.vsdx, .vsd) to PDF format with advanced conversion options"
        },
        {
          "name": "Convert Word to PDF Form",
          "value": "Convert Word To PDF Form",
          "action": "Convert Word to PDF Form",
          "description": "Convert Word documents to PDF forms"
        },
        {
          "name": "Create PDF/A",
          "value": "Create PDF/A",
          "action": "Create PDF/A",
          "description": "Convert PDF to PDF/A for long-term archiving and compliance"
        },
        {
          "name": "Flatten PDF",
          "value": "Flatten PDF",
          "action": "Flatten PDF",
          "description": "Convert interactive PDF elements into static, non-editable content"
        },
        {
          "name": "Convert Html to PDF",
          "value": "Convert HTML To PDF",
          "action": "Convert Html to PDF",
          "description": "Convert HTML files to PDF documents"
        },
        {
          "name": "Linearize PDF",
          "value": "Linearize PDF",
          "action": "Linearize PDF",
          "description": "Optimize PDFs for web viewing with faster loading and progressive display"
        },
        {
          "name": "Convert Markdown To PDF",
          "value": "Convert Markdown To PDF",
          "action": "Convert Markdown To PDF",
          "description": "Convert Markdown files to PDF documents"
        },
        {
          "name": "Convert PDF to Excel",
          "value": "Convert PDF To Excel",
          "action": "Convert PDF to Excel",
          "description": "Convert PDF documents to Excel spreadsheets"
        },
        {
          "name": "Convert PDF to PowerPoint",
          "value": "Convert PDF To PowerPoint",
          "action": "Convert PDF to PowerPoint",
          "description": "Convert PDF documents to PowerPoint format with OCR support"
        },
        {
          "name": "Convert PDF to Word",
          "value": "Convert PDF To Word",
          "action": "Convert PDF to Word",
          "description": "Convert PDF documents to Word format with OCR support"
        },
        {
          "name": "Convert Url to PDF",
          "value": "Convert URL to PDF",
          "action": "Convert Url to PDF",
          "description": "Convert web pages to PDF while preserving layout, styling, and content"
        }
      ],
      "displayName": "Convert Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "convert"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Add Attachment To PDF",
      "options": [
        {
          "name": "Add Attachment To PDF",
          "value": "Add Attachment To PDF",
          "action": "Add attachment to PDF",
          "description": "Add file attachments to PDF documents"
        },
        {
          "name": "Add HTML Header Footer to PDF",
          "value": "Add HTML Header Footer",
          "action": "Add HTML header footer to PDF",
          "description": "Add HTML-based headers and footers to PDF documents"
        },
        {
          "name": "Add Margin to PDF",
          "value": "Add Margin To PDF",
          "action": "Add margin to PDF",
          "description": "Add margins to PDF documents"
        },
        {
          "name": "Add Page Number to PDF",
          "value": "Add Page Number To PDF",
          "action": "Add page number to PDF",
          "description": "Add page numbers to PDF documents"
        },
        {
          "name": "Add Image Stamp To PDF",
          "value": "Add Image Stamp To PDF",
          "action": "Add image stamp to PDF",
          "description": "Add image stamps or watermarks to PDF documents"
        },
        {
          "name": "Send Document for Signing",
          "value": "Sign Document",
          "action": "Send Document for Signing",
          "description": "Send document for e-signature via email"
        },
        {
          "name": "Sign PDF",
          "value": "Sign PDF",
          "action": "Sign PDF",
          "description": "Digitally sign PDF documents"
        },
        {
          "name": "Add Text Stamp To PDF",
          "value": "Add Text Stamp To PDF",
          "action": "Add text stamp to PDF",
          "description": "Add text stamps or watermarks to PDF documents"
        }
      ],
      "displayName": "Edit Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "edit"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Extract Resources",
      "options": [
        {
          "name": "Classify Document",
          "value": "Classify Document",
          "action": "Classify document",
          "description": "Classify documents using AI to determine document type and extract relevant information"
        },
        {
          "name": "Extract Attachment From PDF",
          "value": "Extract Attachment From PDF",
          "action": "Extract attachment from PDF",
          "description": "Extract file attachments from PDF documents"
        },
        {
          "name": "Extract Form Data From PDF",
          "value": "Extract Form Data From PDF",
          "action": "Extract form data from PDF",
          "description": "Extract form field data from PDF documents"
        },
        {
          "name": "Extract Resources",
          "value": "Extract Resources",
          "action": "Extract resources",
          "description": "Extract text and images from PDF documents"
        },
        {
          "name": "Extract Table From PDF",
          "value": "Extract Table From PDF",
          "action": "Extract table from PDF",
          "description": "Extract tables from PDF documents"
        },
        {
          "name": "Extract Text by Expression",
          "value": "Extract Text By Expression",
          "action": "Extract text by expression",
          "description": "Extract text from PDF using regular expressions"
        },
        {
          "name": "Extract Text from word",
          "value": "Extract Text From Word",
          "action": "Extract text from word",
          "description": "Extract text content from Word documents"
        },
        {
          "name": "Parse Document",
          "value": "Parse Document",
          "action": "Parse document",
          "description": "Parse documents to extract structured data using template-based parsing"
        },
        {
          "name": "AI Document Parser",
          "value": "AI Document Parser",
          "action": "AI document parser",
          "description": "Parse documents using AI analyzer configurations from the PDF4me dashboard"
        }
      ],
      "displayName": "Extract Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "extract"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Create Swiss QR Bill",
      "options": [
        {
          "name": "Create SwissQR Bill",
          "value": "Create Swiss QR Bill",
          "action": "Create SwissQR bill",
          "description": "Create Swiss QR Bills using all compliance standards for digital payment transactions"
        },
        {
          "name": "Create Zugferd Invoice",
          "value": "Zugferd Invoice",
          "action": "Create Zugferd invoice",
          "description": "Create Zugferd compliant invoices from XML, JSON, or CSV data"
        }
      ],
      "displayName": "Invoice Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Find And Replace Text",
      "options": [
        {
          "name": "Find and Replace Text",
          "value": "Find And Replace Text",
          "action": "Find and replace text",
          "description": "Find and replace text in PDF documents"
        },
        {
          "name": "Convert PDF to editable PDF using OCR",
          "value": "Convert PDF To Editable PDF Using OCR",
          "action": "Convert PDF to editable PDF using OCR",
          "description": "Convert PDF to editable PDF using OCR for scanned documents"
        }
      ],
      "displayName": "Find Search Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "findSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Fill PDF Form",
      "options": [
        {
          "name": "Add Form Fields To PDF",
          "value": "Add Form Fields To PDF",
          "action": "Add form fields to PDF",
          "description": "Add interactive form fields to PDF documents"
        },
        {
          "name": "Fill a PDF Form",
          "value": "Fill PDF Form",
          "action": "Fill a PDF form",
          "description": "Fill PDF forms with data or generate multiple documents from templates"
        }
      ],
      "displayName": "Forms Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "forms"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Generate Document Single",
      "options": [
        {
          "name": "Enable Tracking changes in word",
          "value": "Enable Tracking Changes in Word",
          "action": "Enable tracking changes in word",
          "description": "Enable tracking changes in Word documents"
        },
        {
          "name": "Generate Document (Single)",
          "value": "Generate Document Single",
          "action": "Generate document (single)",
          "description": "Generate a single document from template with data"
        },
        {
          "name": "Generate Documents (Multiple)",
          "value": "Generate Documents Multiple",
          "action": "Generate documents (multiple)",
          "description": "Generate multiple documents from template with different data sets"
        },
        {
          "name": "Get Tracking Changes In Word",
          "value": "Get Tracking Changes in Word",
          "action": "Get tracking changes in word",
          "description": "Get tracking changes information from Word documents"
        },
        {
          "name": "Replace Text With Image In Word",
          "value": "Replace Text With Image In Word",
          "action": "Replace text with image in word",
          "description": "Replace specific text in Word documents with images"
        }
      ],
      "displayName": "Generate Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "generate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Compress Image",
      "options": [
        {
          "name": "Add Image watermark To Image",
          "value": "Add Image Watermark To Image",
          "action": "Add image watermark to image",
          "description": "Add image watermark to image documents"
        },
        {
          "name": "Add Text watermark To Image",
          "value": "Add Text Watermark To Image",
          "action": "Add text watermark to image",
          "description": "Add text watermarks to images with positioning and styling options"
        },
        {
          "name": "Compress Image",
          "value": "Compress Image",
          "action": "Compress image",
          "description": "Compress image documents"
        },
        {
          "name": "Convert Image Format",
          "value": "Convert Image Format",
          "action": "Convert image format",
          "description": "Convert image format (BMP, GIF, JPG, PNG, TIFF)"
        },
        {
          "name": "Create Image from PDF",
          "value": "Create Images From PDF",
          "action": "Create image from PDF",
          "description": "Create images from PDF pages"
        },
        {
          "name": "Crop Image",
          "value": "Crop Image",
          "action": "Crop image",
          "description": "Crop images with border or rectangle cropping options"
        },
        {
          "name": "Flip Image",
          "value": "Flip Image",
          "action": "Flip image",
          "description": "Flip image documents horizontally, vertically, or both"
        },
        {
          "name": "Get Image Metadata",
          "value": "Get Image Metadata",
          "action": "Get image metadata",
          "description": "Extract metadata information from images including EXIF data and properties"
        },
        {
          "name": "Image Extract Text",
          "value": "Image Extract Text",
          "action": "Image extract text",
          "description": "Extract text content from images using OCR (Optical Character Recognition)"
        },
        {
          "name": "Replace Text with Image",
          "value": "Replace Text With Image",
          "action": "Replace text with image",
          "description": "Replace specific text in PDF documents with images"
        },
        {
          "name": "Resize Image",
          "value": "Resize Image",
          "action": "Resize image",
          "description": "Resize images by percentage or specific dimensions with aspect ratio control"
        },
        {
          "name": "Rotate Image By Exif Data",
          "value": "Rotate Image By Exif Data",
          "action": "Rotate image by exif data",
          "description": "Rotate image automatically based on EXIF orientation metadata"
        },
        {
          "name": "Rotate Image",
          "value": "Rotate Image",
          "action": "Rotate image",
          "description": "Rotate images with custom angle, background color, and proportionate resize options"
        },
        {
          "name": "Read Barcode From Image",
          "value": "Read Barcode From Image",
          "action": "Read barcode from image",
          "description": "Read barcodes from images using OCR"
        },
        {
          "name": "Remove EXIF Tags From Image",
          "value": "Remove Exif Tags From Image",
          "action": "Remove EXIF tags from image",
          "description": "Remove metadata/EXIF tags from images for privacy and file size reduction"
        }
      ],
      "displayName": "Image Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "image"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Merge Multiple PDFs",
      "options": [
        {
          "name": "Merge Multiple PDF files into Single PDF",
          "value": "Merge Multiple PDFs",
          "action": "Merge multiple PDF files into single PDF",
          "description": "Combine multiple PDF files into a single PDF document"
        },
        {
          "name": "Merge two PDF files one over another as Overlay",
          "value": "Overlay PDFs",
          "action": "Merge two PDF files one over another as overlay",
          "description": "Merge two PDF files one over another as overlay"
        },
        {
          "name": "Split PDF",
          "value": "Split PDF Regular",
          "action": "Split PDF",
          "description": "Split PDF documents by regular expression and output as ZIP"
        },
        {
          "name": "Split PDF by Barcode",
          "value": "Split PDF By Barcode",
          "action": "Split PDF by barcode",
          "description": "Split PDF documents by barcode and output as ZIP"
        },
        {
          "name": "Split PDF by Swiss QR",
          "value": "Split PDF By SwissQR",
          "action": "Split PDF by Swiss QR",
          "description": "Split PDF documents by Swiss QR code and output as ZIP"
        },
        {
          "name": "Split PDF by Text",
          "value": "Split PDF By Text",
          "action": "Split PDF by text",
          "description": "Split PDF documents by text and output as ZIP"
        }
      ],
      "displayName": "Merge & Split Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "mergeSplit"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Compress PDF",
      "options": [
        {
          "name": "Compress PDF",
          "value": "Compress PDF",
          "action": "Compress PDF",
          "description": "Compress and optimize PDF files"
        }
      ],
      "displayName": "Optimize Compress Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "optimizeCompress"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Delete Blank Pages From PDF",
      "options": [
        {
          "name": "Delete Blank Pages from PDF",
          "value": "Delete Blank Pages From PDF",
          "action": "Delete blank pages from PDF",
          "description": "Remove blank pages from PDF documents based on specified criteria"
        },
        {
          "name": "Delete unwanted Pages from PDF",
          "value": "Delete Unwanted Pages From PDF",
          "action": "Delete unwanted pages from PDF",
          "description": "Remove specific pages from PDF documents by page numbers"
        },
        {
          "name": "Extract Pages",
          "value": "Extract Pages From PDF",
          "action": "Extract pages",
          "description": "Extract specific pages from PDF documents"
        },
        {
          "name": "Rotate Page",
          "value": "Rotate PDF Page",
          "action": "Rotate page",
          "description": "Rotate specific pages in PDF documents by 90, 180, or 270 degrees"
        },
        {
          "name": "Rotate Document",
          "value": "Rotate Document",
          "action": "Rotate document",
          "description": "Rotate entire PDF documents by 90, 180, or 270 degrees"
        }
      ],
      "displayName": "Organize Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "organize"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get Document From Pdf4me",
      "options": [
        {
          "name": "Upload File To PDF4me",
          "value": "Upload File To PDF4me",
          "action": "Upload file to PDF4me",
          "description": "Upload a file to PDF4me storage for processing"
        },
        {
          "name": "Get Document from PDF4me",
          "value": "Get Document From Pdf4me",
          "action": "Get document from PDF4me",
          "description": "Retrieve a document from PDF4me storage"
        },
        {
          "name": "Update Hyperlinks Annotation",
          "value": "Update Hyperlinks Annotation",
          "action": "Update hyperlinks annotation",
          "description": "Update hyperlinks in PDF documents"
        }
      ],
      "displayName": "PDF4me Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "pdf4me"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get PDF Metadata",
      "options": [
        {
          "name": "Get PDF Information",
          "value": "Get PDF Metadata",
          "action": "Get PDF information",
          "description": "Extract metadata and information from PDF files"
        },
        {
          "name": "Get PDF Metadata",
          "value": "Get PDF Metadata",
          "action": "Get PDF metadata",
          "description": "Extract metadata from PDF files"
        },
        {
          "name": "Repair PDF Document",
          "value": "Repair PDF Document",
          "action": "Repair PDF document",
          "description": "Repair corrupted or damaged PDF files"
        }
      ],
      "displayName": "PDF Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "pdf"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Protect PDF",
      "options": [
        {
          "name": "Protect Document",
          "value": "Protect PDF",
          "action": "Protect document",
          "description": "Protect PDF documents with encryption, passwords, and permissions"
        },
        {
          "name": "Unlock PDF",
          "value": "Unlock PDF",
          "action": "Unlock PDF",
          "description": "Unlock PDF documents by removing encryption"
        }
      ],
      "displayName": "Security Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "security"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Disable Tracking Changes in Word",
      "options": [
        {
          "name": "Disable Tracking changes In Word",
          "value": "Disable Tracking Changes in Word",
          "action": "Disable tracking changes in word",
          "description": "Disable tracking changes in Word documents"
        }
      ],
      "displayName": "Word Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "word"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "AI-Invoice Parser",
      "value": "AI-Invoice Parser",
      "action": "AI-Invoice Parser",
      "description": "Extract structured data from invoices using AI/ML technology for automated data entry",
      "resource": "ai"
    },
    {
      "name": "AI-Process Bank Cheque",
      "value": "AI-Process Bank Cheque",
      "action": "AI-Process Bank Cheque",
      "description": "Extract structured data from bank cheques using AI/ML technology for payment processing",
      "resource": "ai"
    },
    {
      "name": "AI-Process Credit Card",
      "value": "AI-Process Credit Card",
      "action": "AI-Process Credit Card",
      "description": "Extract structured data from credit cards using AI/ML technology for payment processing",
      "resource": "ai"
    },
    {
      "name": "AI-Process Contract",
      "value": "AI-Process Contract",
      "action": "AI-Process Contract",
      "description": "Extract structured data from contracts using AI/ML technology for legal document analysis",
      "resource": "ai"
    },
    {
      "name": "AI-Process HealthCard",
      "value": "AI-Process HealthCard",
      "action": "AI-Process HealthCard",
      "description": "Extract structured data from health cards using AI/ML technology for member management",
      "resource": "ai"
    },
    {
      "name": "AI-Process Marriage Certificate",
      "value": "AI-Process Marriage Certificate",
      "action": "AI-Process Marriage Certificate",
      "description": "Extract structured data from marriage certificates using AI/ML technology for document verification",
      "resource": "ai"
    },
    {
      "name": "AI-Process Mortgage Document",
      "value": "AI-Process Mortgage Document",
      "action": "AI-Process Mortgage Document",
      "description": "Extract structured data from mortgage documents using AI/ML technology for loan processing",
      "resource": "ai"
    },
    {
      "name": "AI-Process Pay Stub",
      "value": "AI-Process Pay Stub",
      "action": "AI-Process Pay Stub",
      "description": "Extract structured data from pay stubs using AI/ML technology for payroll processing",
      "resource": "ai"
    },
    {
      "name": "AI Auto Crop Document",
      "value": "AI Auto Crop Document",
      "action": "AI auto crop document",
      "description": "Automatically crop a document using AI to remove borders and unwanted areas",
      "resource": "ai"
    },
    {
      "name": "AI - Universal Document Data Extraction",
      "value": "Process Universal Document",
      "action": "AI - Universal Document Data Extraction",
      "description": "Extract specified fields from documents using universal document processing",
      "resource": "ai"
    },
    {
      "name": "AI-Process Shipping Label",
      "value": "Process Shipping Label",
      "action": "AI-Process Shipping Label",
      "description": "Process shipping labels to extract and analyze shipping information",
      "resource": "ai"
    },
    {
      "name": "AI-Process Order",
      "value": "Process Order",
      "action": "AI-Process Order",
      "description": "Process order documents to extract and analyze order information",
      "resource": "ai"
    },
    {
      "name": "AI-Process Receipt",
      "value": "Process Receipt",
      "action": "AI-Process Receipt",
      "description": "Process receipt documents to extract items, merchant info, totals, and custom fields",
      "resource": "ai"
    },
    {
      "name": "AI-Process Tax Document",
      "value": "Process Tax Document",
      "action": "AI-Process Tax Document",
      "description": "Process tax documents (W2, 1099, 1040, etc.) to extract tax information and custom fields",
      "resource": "ai"
    },
    {
      "name": "AI-Process Bank Statement",
      "value": "Process Bank Statement",
      "action": "AI-Process Bank Statement",
      "description": "Process bank statement documents to extract transactions, analyze patterns, and custom fields",
      "resource": "ai"
    },
    {
      "name": "Add Barcode to PDF",
      "value": "Add Barcode To PDF",
      "action": "Add barcode to PDF",
      "description": "Add barcodes to existing PDF documents with positioning and styling options",
      "resource": "barcode"
    },
    {
      "name": "Create Barcode",
      "value": "Generate Barcode",
      "action": "Create barcode",
      "description": "Generate various types of barcodes including QR codes, Code 128, Code 39, and more",
      "resource": "barcode"
    },
    {
      "name": "Read SwissQR Code",
      "value": "Read SwissQR Code",
      "action": "Read SwissQR code",
      "description": "Read Swiss QR code data from PDF documents",
      "resource": "barcode"
    },
    {
      "name": "Read Barcode from PDF",
      "value": "Read Barcode From PDF",
      "action": "Read barcode from PDF",
      "description": "Read single or multiple Barcodes or QR Codes from your PDF file",
      "resource": "barcode"
    },
    {
      "name": "Convert JSON To Excel",
      "value": "Convert JSON To Excel",
      "action": "Convert JSON to Excel",
      "description": "Convert JSON data to Excel format",
      "resource": "convert"
    },
    {
      "name": "Convert to PDF",
      "value": "Convert To PDF",
      "action": "Convert to PDF",
      "description": "Convert various document formats to PDF",
      "resource": "convert"
    },
    {
      "name": "Convert VISIO",
      "value": "Convert VISIO",
      "action": "Convert VISIO",
      "description": "Convert VISIO files (.vsdx, .vsd) to PDF format with advanced conversion options",
      "resource": "convert"
    },
    {
      "name": "Convert Word to PDF Form",
      "value": "Convert Word To PDF Form",
      "action": "Convert Word to PDF Form",
      "description": "Convert Word documents to PDF forms",
      "resource": "convert"
    },
    {
      "name": "Create PDF/A",
      "value": "Create PDF/A",
      "action": "Create PDF/A",
      "description": "Convert PDF to PDF/A for long-term archiving and compliance",
      "resource": "convert"
    },
    {
      "name": "Flatten PDF",
      "value": "Flatten PDF",
      "action": "Flatten PDF",
      "description": "Convert interactive PDF elements into static, non-editable content",
      "resource": "convert"
    },
    {
      "name": "Convert Html to PDF",
      "value": "Convert HTML To PDF",
      "action": "Convert Html to PDF",
      "description": "Convert HTML files to PDF documents",
      "resource": "convert"
    },
    {
      "name": "Linearize PDF",
      "value": "Linearize PDF",
      "action": "Linearize PDF",
      "description": "Optimize PDFs for web viewing with faster loading and progressive display",
      "resource": "convert"
    },
    {
      "name": "Convert Markdown To PDF",
      "value": "Convert Markdown To PDF",
      "action": "Convert Markdown To PDF",
      "description": "Convert Markdown files to PDF documents",
      "resource": "convert"
    },
    {
      "name": "Convert PDF to Excel",
      "value": "Convert PDF To Excel",
      "action": "Convert PDF to Excel",
      "description": "Convert PDF documents to Excel spreadsheets",
      "resource": "convert"
    },
    {
      "name": "Convert PDF to PowerPoint",
      "value": "Convert PDF To PowerPoint",
      "action": "Convert PDF to PowerPoint",
      "description": "Convert PDF documents to PowerPoint format with OCR support",
      "resource": "convert"
    },
    {
      "name": "Convert PDF to Word",
      "value": "Convert PDF To Word",
      "action": "Convert PDF to Word",
      "description": "Convert PDF documents to Word format with OCR support",
      "resource": "convert"
    },
    {
      "name": "Convert Url to PDF",
      "value": "Convert URL to PDF",
      "action": "Convert Url to PDF",
      "description": "Convert web pages to PDF while preserving layout, styling, and content",
      "resource": "convert"
    },
    {
      "name": "Add Attachment To PDF",
      "value": "Add Attachment To PDF",
      "action": "Add attachment to PDF",
      "description": "Add file attachments to PDF documents",
      "resource": "edit"
    },
    {
      "name": "Add HTML Header Footer to PDF",
      "value": "Add HTML Header Footer",
      "action": "Add HTML header footer to PDF",
      "description": "Add HTML-based headers and footers to PDF documents",
      "resource": "edit"
    },
    {
      "name": "Add Margin to PDF",
      "value": "Add Margin To PDF",
      "action": "Add margin to PDF",
      "description": "Add margins to PDF documents",
      "resource": "edit"
    },
    {
      "name": "Add Page Number to PDF",
      "value": "Add Page Number To PDF",
      "action": "Add page number to PDF",
      "description": "Add page numbers to PDF documents",
      "resource": "edit"
    },
    {
      "name": "Add Image Stamp To PDF",
      "value": "Add Image Stamp To PDF",
      "action": "Add image stamp to PDF",
      "description": "Add image stamps or watermarks to PDF documents",
      "resource": "edit"
    },
    {
      "name": "Send Document for Signing",
      "value": "Sign Document",
      "action": "Send Document for Signing",
      "description": "Send document for e-signature via email",
      "resource": "edit"
    },
    {
      "name": "Sign PDF",
      "value": "Sign PDF",
      "action": "Sign PDF",
      "description": "Digitally sign PDF documents",
      "resource": "edit"
    },
    {
      "name": "Add Text Stamp To PDF",
      "value": "Add Text Stamp To PDF",
      "action": "Add text stamp to PDF",
      "description": "Add text stamps or watermarks to PDF documents",
      "resource": "edit"
    },
    {
      "name": "Classify Document",
      "value": "Classify Document",
      "action": "Classify document",
      "description": "Classify documents using AI to determine document type and extract relevant information",
      "resource": "extract"
    },
    {
      "name": "Extract Attachment From PDF",
      "value": "Extract Attachment From PDF",
      "action": "Extract attachment from PDF",
      "description": "Extract file attachments from PDF documents",
      "resource": "extract"
    },
    {
      "name": "Extract Form Data From PDF",
      "value": "Extract Form Data From PDF",
      "action": "Extract form data from PDF",
      "description": "Extract form field data from PDF documents",
      "resource": "extract"
    },
    {
      "name": "Extract Resources",
      "value": "Extract Resources",
      "action": "Extract resources",
      "description": "Extract text and images from PDF documents",
      "resource": "extract"
    },
    {
      "name": "Extract Table From PDF",
      "value": "Extract Table From PDF",
      "action": "Extract table from PDF",
      "description": "Extract tables from PDF documents",
      "resource": "extract"
    },
    {
      "name": "Extract Text by Expression",
      "value": "Extract Text By Expression",
      "action": "Extract text by expression",
      "description": "Extract text from PDF using regular expressions",
      "resource": "extract"
    },
    {
      "name": "Extract Text from word",
      "value": "Extract Text From Word",
      "action": "Extract text from word",
      "description": "Extract text content from Word documents",
      "resource": "extract"
    },
    {
      "name": "Parse Document",
      "value": "Parse Document",
      "action": "Parse document",
      "description": "Parse documents to extract structured data using template-based parsing",
      "resource": "extract"
    },
    {
      "name": "AI Document Parser",
      "value": "AI Document Parser",
      "action": "AI document parser",
      "description": "Parse documents using AI analyzer configurations from the PDF4me dashboard",
      "resource": "extract"
    },
    {
      "name": "Create SwissQR Bill",
      "value": "Create Swiss QR Bill",
      "action": "Create SwissQR bill",
      "description": "Create Swiss QR Bills using all compliance standards for digital payment transactions",
      "resource": "invoice"
    },
    {
      "name": "Create Zugferd Invoice",
      "value": "Zugferd Invoice",
      "action": "Create Zugferd invoice",
      "description": "Create Zugferd compliant invoices from XML, JSON, or CSV data",
      "resource": "invoice"
    },
    {
      "name": "Find and Replace Text",
      "value": "Find And Replace Text",
      "action": "Find and replace text",
      "description": "Find and replace text in PDF documents",
      "resource": "findSearch"
    },
    {
      "name": "Convert PDF to editable PDF using OCR",
      "value": "Convert PDF To Editable PDF Using OCR",
      "action": "Convert PDF to editable PDF using OCR",
      "description": "Convert PDF to editable PDF using OCR for scanned documents",
      "resource": "findSearch"
    },
    {
      "name": "Add Form Fields To PDF",
      "value": "Add Form Fields To PDF",
      "action": "Add form fields to PDF",
      "description": "Add interactive form fields to PDF documents",
      "resource": "forms"
    },
    {
      "name": "Fill a PDF Form",
      "value": "Fill PDF Form",
      "action": "Fill a PDF form",
      "description": "Fill PDF forms with data or generate multiple documents from templates",
      "resource": "forms"
    },
    {
      "name": "Enable Tracking changes in word",
      "value": "Enable Tracking Changes in Word",
      "action": "Enable tracking changes in word",
      "description": "Enable tracking changes in Word documents",
      "resource": "generate"
    },
    {
      "name": "Generate Document (Single)",
      "value": "Generate Document Single",
      "action": "Generate document (single)",
      "description": "Generate a single document from template with data",
      "resource": "generate"
    },
    {
      "name": "Generate Documents (Multiple)",
      "value": "Generate Documents Multiple",
      "action": "Generate documents (multiple)",
      "description": "Generate multiple documents from template with different data sets",
      "resource": "generate"
    },
    {
      "name": "Get Tracking Changes In Word",
      "value": "Get Tracking Changes in Word",
      "action": "Get tracking changes in word",
      "description": "Get tracking changes information from Word documents",
      "resource": "generate"
    },
    {
      "name": "Replace Text With Image In Word",
      "value": "Replace Text With Image In Word",
      "action": "Replace text with image in word",
      "description": "Replace specific text in Word documents with images",
      "resource": "generate"
    },
    {
      "name": "Add Image watermark To Image",
      "value": "Add Image Watermark To Image",
      "action": "Add image watermark to image",
      "description": "Add image watermark to image documents",
      "resource": "image"
    },
    {
      "name": "Add Text watermark To Image",
      "value": "Add Text Watermark To Image",
      "action": "Add text watermark to image",
      "description": "Add text watermarks to images with positioning and styling options",
      "resource": "image"
    },
    {
      "name": "Compress Image",
      "value": "Compress Image",
      "action": "Compress image",
      "description": "Compress image documents",
      "resource": "image"
    },
    {
      "name": "Convert Image Format",
      "value": "Convert Image Format",
      "action": "Convert image format",
      "description": "Convert image format (BMP, GIF, JPG, PNG, TIFF)",
      "resource": "image"
    },
    {
      "name": "Create Image from PDF",
      "value": "Create Images From PDF",
      "action": "Create image from PDF",
      "description": "Create images from PDF pages",
      "resource": "image"
    },
    {
      "name": "Crop Image",
      "value": "Crop Image",
      "action": "Crop image",
      "description": "Crop images with border or rectangle cropping options",
      "resource": "image"
    },
    {
      "name": "Flip Image",
      "value": "Flip Image",
      "action": "Flip image",
      "description": "Flip image documents horizontally, vertically, or both",
      "resource": "image"
    },
    {
      "name": "Get Image Metadata",
      "value": "Get Image Metadata",
      "action": "Get image metadata",
      "description": "Extract metadata information from images including EXIF data and properties",
      "resource": "image"
    },
    {
      "name": "Image Extract Text",
      "value": "Image Extract Text",
      "action": "Image extract text",
      "description": "Extract text content from images using OCR (Optical Character Recognition)",
      "resource": "image"
    },
    {
      "name": "Replace Text with Image",
      "value": "Replace Text With Image",
      "action": "Replace text with image",
      "description": "Replace specific text in PDF documents with images",
      "resource": "image"
    },
    {
      "name": "Resize Image",
      "value": "Resize Image",
      "action": "Resize image",
      "description": "Resize images by percentage or specific dimensions with aspect ratio control",
      "resource": "image"
    },
    {
      "name": "Rotate Image By Exif Data",
      "value": "Rotate Image By Exif Data",
      "action": "Rotate image by exif data",
      "description": "Rotate image automatically based on EXIF orientation metadata",
      "resource": "image"
    },
    {
      "name": "Rotate Image",
      "value": "Rotate Image",
      "action": "Rotate image",
      "description": "Rotate images with custom angle, background color, and proportionate resize options",
      "resource": "image"
    },
    {
      "name": "Read Barcode From Image",
      "value": "Read Barcode From Image",
      "action": "Read barcode from image",
      "description": "Read barcodes from images using OCR",
      "resource": "image"
    },
    {
      "name": "Remove EXIF Tags From Image",
      "value": "Remove Exif Tags From Image",
      "action": "Remove EXIF tags from image",
      "description": "Remove metadata/EXIF tags from images for privacy and file size reduction",
      "resource": "image"
    },
    {
      "name": "Merge Multiple PDF files into Single PDF",
      "value": "Merge Multiple PDFs",
      "action": "Merge multiple PDF files into single PDF",
      "description": "Combine multiple PDF files into a single PDF document",
      "resource": "mergeSplit"
    },
    {
      "name": "Merge two PDF files one over another as Overlay",
      "value": "Overlay PDFs",
      "action": "Merge two PDF files one over another as overlay",
      "description": "Merge two PDF files one over another as overlay",
      "resource": "mergeSplit"
    },
    {
      "name": "Split PDF",
      "value": "Split PDF Regular",
      "action": "Split PDF",
      "description": "Split PDF documents by regular expression and output as ZIP",
      "resource": "mergeSplit"
    },
    {
      "name": "Split PDF by Barcode",
      "value": "Split PDF By Barcode",
      "action": "Split PDF by barcode",
      "description": "Split PDF documents by barcode and output as ZIP",
      "resource": "mergeSplit"
    },
    {
      "name": "Split PDF by Swiss QR",
      "value": "Split PDF By SwissQR",
      "action": "Split PDF by Swiss QR",
      "description": "Split PDF documents by Swiss QR code and output as ZIP",
      "resource": "mergeSplit"
    },
    {
      "name": "Split PDF by Text",
      "value": "Split PDF By Text",
      "action": "Split PDF by text",
      "description": "Split PDF documents by text and output as ZIP",
      "resource": "mergeSplit"
    },
    {
      "name": "Compress PDF",
      "value": "Compress PDF",
      "action": "Compress PDF",
      "description": "Compress and optimize PDF files",
      "resource": "optimizeCompress"
    },
    {
      "name": "Delete Blank Pages from PDF",
      "value": "Delete Blank Pages From PDF",
      "action": "Delete blank pages from PDF",
      "description": "Remove blank pages from PDF documents based on specified criteria",
      "resource": "organize"
    },
    {
      "name": "Delete unwanted Pages from PDF",
      "value": "Delete Unwanted Pages From PDF",
      "action": "Delete unwanted pages from PDF",
      "description": "Remove specific pages from PDF documents by page numbers",
      "resource": "organize"
    },
    {
      "name": "Extract Pages",
      "value": "Extract Pages From PDF",
      "action": "Extract pages",
      "description": "Extract specific pages from PDF documents",
      "resource": "organize"
    },
    {
      "name": "Rotate Page",
      "value": "Rotate PDF Page",
      "action": "Rotate page",
      "description": "Rotate specific pages in PDF documents by 90, 180, or 270 degrees",
      "resource": "organize"
    },
    {
      "name": "Rotate Document",
      "value": "Rotate Document",
      "action": "Rotate document",
      "description": "Rotate entire PDF documents by 90, 180, or 270 degrees",
      "resource": "organize"
    },
    {
      "name": "Upload File To PDF4me",
      "value": "Upload File To PDF4me",
      "action": "Upload file to PDF4me",
      "description": "Upload a file to PDF4me storage for processing",
      "resource": "pdf4me"
    },
    {
      "name": "Get Document from PDF4me",
      "value": "Get Document From Pdf4me",
      "action": "Get document from PDF4me",
      "description": "Retrieve a document from PDF4me storage",
      "resource": "pdf4me"
    },
    {
      "name": "Update Hyperlinks Annotation",
      "value": "Update Hyperlinks Annotation",
      "action": "Update hyperlinks annotation",
      "description": "Update hyperlinks in PDF documents",
      "resource": "pdf4me"
    },
    {
      "name": "Get PDF Information",
      "value": "Get PDF Metadata",
      "action": "Get PDF information",
      "description": "Extract metadata and information from PDF files",
      "resource": "pdf"
    },
    {
      "name": "Get PDF Metadata",
      "value": "Get PDF Metadata",
      "action": "Get PDF metadata",
      "description": "Extract metadata from PDF files",
      "resource": "pdf"
    },
    {
      "name": "Repair PDF Document",
      "value": "Repair PDF Document",
      "action": "Repair PDF document",
      "description": "Repair corrupted or damaged PDF files",
      "resource": "pdf"
    },
    {
      "name": "Protect Document",
      "value": "Protect PDF",
      "action": "Protect document",
      "description": "Protect PDF documents with encryption, passwords, and permissions",
      "resource": "security"
    },
    {
      "name": "Unlock PDF",
      "value": "Unlock PDF",
      "action": "Unlock PDF",
      "description": "Unlock PDF documents by removing encryption",
      "resource": "security"
    },
    {
      "name": "Disable Tracking changes In Word",
      "value": "Disable Tracking Changes in Word",
      "action": "Disable tracking changes in word",
      "description": "Disable tracking changes in Word documents",
      "resource": "word"
    }
  ]

npm_readme:
  # n8n-nodes-pdf4me

  This is an n8n community node that enables you to integrate PDF4ME's powerful PDF processing capabilities into your n8n workflows. PDF4ME is a comprehensive PDF processing API that allows you to convert, generate barcodes, process images, and manipulate documents programmatically.

  n8n is a fair-code licensed workflow automation platform.

  ## Table of Contents

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

  ## Installation

  ### Community Nodes (Recommended)

  For users on n8n v0.187+, you can install this node directly from the n8n Community Nodes panel in the n8n editor:

  1. Open your n8n editor
  2. Go to **Settings > Community Nodes**
  3. Search for "n8n-nodes-pdf4me"
  4. Click **Install**
  5. Reload the editor

  ### Global Installation (Recommended)

  For global installation that makes the node available across all n8n projects:

  ```bash
  # Install globally
  npm install -g n8n-nodes-pdf4me

  # Restart n8n to load the new node
  n8n start
  ```

  ### Manual Installation

  You can also install this node manually in a specific n8n project:

  1. Navigate to your n8n installation directory
  2. Run the following command:
     ```bash
     npm install n8n-nodes-pdf4me
     ```
  3. Restart your n8n server

  For Docker-based deployments, add the package to your package.json and rebuild the image:

  ```json
  {
    "name": "n8n-custom",
    "version": "0.9.0",
    "description": "",
    "main": "index.js",
    "scripts": {
      "start": "n8n"
    },
    "dependencies": {
      "n8n": "^1.0.0",
      "n8n-nodes-pdf4me": "^2.0.0"
    }
  }
  ```

  ## What's New in Version 2.0.0

  Version 2.0.0 continues to enhance the PDF4ME n8n node with improved functionality and reliability:

  - **🔧 Code Refactoring**: Improved variable declarations and code structure
  - **🖼️ Image Processing**: Enhanced MIME type handling for image operations
  - **📝 Markdown Conversion**: Optimized Markdown to PDF conversion process
  - **🔍 Resource Extraction**: Improved resource extraction functionality
  - **✅ Stability**: Enhanced overall stability and performance
  - **🔄 Backward Compatible**: All existing workflows continue to work seamlessly

  ## Operations

  This node provides comprehensive document processing capabilities through PDF4ME's API. Here are the available features:

  ### 1. AI-Powered Document Processing
  - **AI-Invoice Parser**: Extract structured data from invoices using AI/ML technology for automated data entry
  - **AI-Process HealthCard**: Extract structured data from health cards using AI/ML technology for member management
  - **AI-Process Contract**: Extract structured data from contracts using AI/ML technology for legal document analysis
  - **Classify Document**: Classify documents using AI to determine document type and extract relevant information
  - **Parse Document**: Parse documents to extract structured data using template-based parsing

  ### 2. PDF Processing & Manipulation
  - **Add Attachment to PDF**: Attach files to PDF documents
  - **Add Barcode to PDF**: Add barcodes to PDF documents for identification and tracking
  - **Add Form Fields to PDF**: Add interactive form fields to PDF documents
  - **Add HTML Header Footer**: Add custom HTML headers and footers to PDFs
  - **Add Image Stamp to PDF**: Add image stamps with positioning and opacity controls
  - **Add Margin to PDF**: Add margins to PDF documents
  - **Add Page Number to PDF**: Add page numbers to PDF documents
  - **Add Text Stamp to PDF**: Add text stamps with customizable formatting
  - **Compress PDF**: Optimize PDF files for web, print, or screen viewing
  - **Convert PDF to Editable OCR**: Convert PDFs to editable text using OCR
  - **Convert PDF to Excel**: Convert PDF tables to Excel spreadsheets
  - **Convert PDF to PowerPoint**: Convert PDF content to PowerPoint presentations
  - **Convert PDF to Word**: Convert PDFs to editable Word documents
  - **Create Images from PDF**: Extract images from PDF documents
  - **Delete Blank Pages from PDF**: Remove blank pages from PDF documents
  - **Delete Unwanted Pages from PDF**: Remove specific pages from PDF documents
  - **Extract Pages**: Extract specific pages from PDF documents
  - **Extract Pages from PDF**: Extract pages with advanced options
  - **Fill PDF Form**: Fill interactive PDF forms with data
  - **Find and Replace Text**: Find and replace text in PDF documents
  - **Flatten PDF**: Convert interactive PDF elements into static, non-editable content
  - **Linearize PDF**: Optimize PDFs for web viewing with faster loading and progressive display
  - **Merge Multiple PDFs**: Combine multiple PDF files into one
  - **Overlay PDFs**: Overlay one PDF on top of another
  - **Protect Document**: Add password protection and encryption to PDFs
  - **Repair PDF Document**: Fix corrupted or damaged PDF files
  - **Rotate Document**: Rotate entire PDF documents
  - **Rotate Page**: Rotate specific pages within a PDF
  - **Sign PDF**: Add digital signatures to PDF documents
  - **Split PDF by Barcode**: Split PDFs based on barcode detection
  - **Split PDF by Swiss QR**: Split PDFs based on Swiss QR code detection
  - **Split PDF by Text**: Split PDFs based on text content
  - **Split PDF Regular**: Split PDFs into equal parts or by page ranges
  - **Unlock PDF**: Remove password protection from PDFs
  - **Update Hyperlinks Annotation**: Modify hyperlinks and annotations in PDFs

  ### 3. Image Processing
  - **Add Image Watermark to Image**: Add watermarks to images
  - **Add Text Watermark to Image**: Add text watermarks to images
  - **Compress Image**: Reduce image file sizes while maintaining quality
  - **Convert Image Format**: Convert images between different formats (JPEG, PNG, etc.)
  - **Crop Image**: Crop images with border or rectangle options
  - **Flip Image**: Flip images horizontally, vertically, or both
  - **Get Image Metadata**: Extract metadata from image files
  - **Image Extract Text**: Extract text from images using OCR
  - **Read Barcode from Image**: Read barcodes from images
  - **Remove EXIF Tags from Image**: Remove metadata from images
  - **Replace Text with Image**: Replace text in documents with images
  - **Replace Text with Image in Word**: Replace text in Word documents with images
  - **Resize Image**: Resize images to specific dimensions
  - **Rotate Image**: Rotate images by specific angles
  - **Rotate Image by EXIF Data**: Auto-rotate images based on EXIF orientation

  ### 4. Document Conversion
  - **Convert to PDF**: Convert various document formats to PDF
  - **Convert HTML to PDF**: Convert HTML content to PDF with multiple input options (Binary Data, Base64, HTML Code, URL)
  - **Convert Image Format**: Convert images between different formats
  - **Convert Markdown to PDF**: Convert Markdown files to PDF
  - **Convert Visio**: Convert Visio diagrams to PDF
  - **Convert Word to PDF Form**: Convert Word documents to PDF forms
  - **JSON to Excel**: Convert JSON data to Excel spreadsheets
  - **URL to PDF**: Convert web pages to PDF

  ### 5. Barcode Operations
  - **Barcode Generator**: Generate various types of barcodes (QR, Code 128, EAN, UPC, etc.)
  - **Add Barcode to PDF**: Add barcodes directly to PDF documents for identification and tracking
  - **Read Barcode from Image**: Extract barcode data from images
  - **Read Barcode from PDF**: Extract barcode data from PDF documents
  - **Read Swiss QR Code**: Read Swiss QR codes from documents

  ### 6. Document Analysis & Extraction
  - **Extract Attachment from PDF**: Extract attached files from PDFs
  - **Extract Form Data from PDF**: Extract form field data from PDFs
  - **Extract Pages from PDF**: Extract specific pages from PDFs
  - **Extract Resources**: Extract resources from documents
  - **Extract Table from PDF**: Extract tables from PDF documents
  - **Extract Text by Expression**: Extract text using custom expressions
  - **Extract Text from Word**: Extract text from Word documents
  - **Get Document from PDF4ME**: Retrieve documents from PDF4ME storage
  - **Get PDF Metadata**: Extract metadata from PDF files

  ### 7. Document Management & Generation
  - **Create PDF/A**: Create PDF/A compliant documents
  - **Create Swiss QR Bill**: Create Swiss QR Bills using all compliance standards for digital payment transactions
  - **Disable Tracking Changes in Word**: Remove tracking changes from Word documents
  - **Enable Tracking Changes in Word**: Enable tracking changes in Word documents
  - **Generate Document Single**: Generate single documents from templates
  - **Generate Documents Multiple**: Generate multiple documents from templates
  - **Get Tracking Changes in Word**: Get tracking changes status from Word documents
  - **Upload File to PDF4ME**: Upload files to PDF4ME for further processing
  - **Zugferd Invoice**: Create compliant Zugferd invoices for standardized electronic invoicing

  ### 8. Advanced Features
  - **Create Images from PDF**: Extract and process images from PDF documents
  - **Document Processing**: Advanced document manipulation and processing

  ## Credentials

  To use this node, you need a PDF4ME API key. Here's how to get started:

  1. Sign up for a PDF4ME account at [PDF4ME Developer Portal](https://dev.pdf4me.com/)
  2. Navigate to your dashboard and obtain your API key
  3. In n8n, add your PDF4ME credentials by providing your API key

  ## Usage

  This node allows you to automate document processing tasks in your n8n workflows. With version 2.0.0, the interface has been optimized for better performance and stability. Here are some common use cases:

  ### AI-Powered Document Processing
  - Automatically extract invoice data for accounting systems
  - Process health cards for member management systems
  - Analyze contracts for legal document review
  - Classify documents for automated routing and processing
  - Parse structured data from various document types using templates

  ### Document Processing
  - Convert PDF documents to editable Word format with OCR support
  - Process complex PDFs with enhanced timeout handling (up to 25 minutes)
  - Extract text from PDF documents for data processing
  - Convert various document formats to PDF
  - Extract specific pages from PDF documents for creating shorter versions or digital booklets
  - Add watermarks, stamps, and annotations to documents
  - Compress and optimize PDF files for different use cases
  - Fill interactive PDF forms with data from your workflows
  - Split PDFs based on content, barcodes, or page ranges

  ### Barcode Operations
  - Generate QR codes for product tracking
  - Create product barcodes (EAN-13, UPC-A) for inventory management
  - Generate barcodes for document identification
  - Embed barcodes in documents and reports
  - Read barcodes from images and PDFs for automated processing
  - Process Swiss QR codes for payment transactions

  ### Web Content Processing
  - Convert web pages to PDF for archiving
  - Automatically convert HTML reports to PDF
  - **Write HTML code directly and convert to PDF** - No need to save HTML files first
  - Capture web-based dashboards and reports
  - Convert protected web content with authentication

  ### HTML to PDF Conversion Options
  The Convert HTML to PDF operation supports multiple input methods for maximum flexibility:
  - **Binary Data**: Use HTML files from previous workflow nodes
  - **Base64 String**: Provide HTML content as base64 encoded strings
  - **HTML Code**: Write HTML code directly in the interface (automatically converted to base64)
  - **URL**: Convert HTML content from web URLs

  **Example Use Cases for HTML Code Input:**
  - **Dynamic Reports**: Generate PDFs from HTML templates with real-time data
  - **Email Templates**: Convert HTML email content to PDF for archiving
  - **Custom Dashboards**: Create PDF versions of HTML dashboards
  - **Document Generation**: Build PDFs from HTML snippets without file management
  - **Rapid Prototyping**: Quickly test HTML layouts by converting to PDF

  ### Data Export and Reporting
  - Convert JSON data to Excel spreadsheets
  - Transform API responses to formatted reports
  - Export analytics data to Excel for stakeholder reports
  - Create automated data processing pipelines
  - Generate documents from templates with dynamic data

  ### Image Processing
  - Crop images for specific dimensions
  - Remove borders from scanned documents
  - Process product images for e-commerce
  - Create thumbnails and optimized images
  - Add watermarks to images for branding
  - Extract text from images using OCR
  - Convert images between different formats

  ### Swiss QR Bill Generation
  - Create compliant Swiss QR Bills for digital payment transactions
  - Generate QR codes with all required payment information
  - Support for multiple languages (English, German, French, Italian)
  - Include creditor and debtor information with structured addresses
  - Add billing information and unstructured messages
  - Generate bills with different separator line styles
  - Support for various reference types (QR Reference, Creditor Reference, No Reference)

  ### Zugferd Invoice Generation
  - Create compliant Zugferd invoices for standardized electronic invoicing
  - Generate invoices following the Zugferd standard (ZUGFeRD/Factur-X)
  - Support for structured invoice data exchange
  - Compatible with European e-invoicing requirements
  - Generate PDF/A compliant invoices with embedded XML data

  ### Document Generation & Management
  - Generate documents from templates with dynamic data
  - Create PDF/A compliant documents for long-term archiving
  - Manage Word document tracking changes
  - Process multiple documents in batch operations
  - Extract and manage document metadata

  ### Automated Workflows
  - Chain multiple PDF4ME operations together with simplified configuration
  - Integrate with email nodes for automated document distribution
  - Connect with storage services for file management
  - Build complete document processing pipelines with enhanced reliability
  - Automate document classification and routing
  - Create end-to-end document workflows with improved error handling
  - **Version 2.0.0**: Enhanced stability and performance for reliable workflow execution

  For detailed examples and workflow templates, visit our documentation.

  ## Resources

  - [PDF4me n8n Integration Documentation](https://docs.pdf4me.com/integration/n8n/getting-started/)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [PDF4ME API Documentation](https://dev.pdf4me.com/apiv2/documentation/)
  - [PDF4ME Developer Portal](https://dev.pdf4me.com/)
  - [PDF4ME Support](mailto:support@pdf4me.com)
  - [Troubleshooting Guide](TROUBLESHOOTING.md)
  - [Publishing Guide](PUBLISHING_GUIDE.md)

  ## Version History

  ### 2.0.0
  - **Latest Version**: Major version update with enhanced features and improvements
  - **Version Upgrade**: Major version bump to 2.0.0
  - **Enhanced Functionality**: Continued improvements to document processing capabilities
  - **Stability**: Enhanced overall stability and performance
  - **Maintained Compatibility**: All existing workflows continue to work seamlessly

  ### 1.6.0
  - **Previous Version**: Stability improvements and code optimizations
  - **Code Refactoring**: Improved variable declarations and code structure across actions
  - **Image Processing**: Enhanced MIME type handling for image operations in extractResources
  - **Markdown Conversion**: Optimized convertMarkdownToPdf functionality
  - **Resource Extraction**: Improved resource extraction with better error handling
  - **Performance**: Enhanced overall stability and processing speed
  - **Maintained Compatibility**: All existing workflows continue to work seamlessly

  ### 1.5.1
  - **Previous Version**: Stability improvements and code optimizations
  - **Code Refactoring**: Improved variable declarations and code structure across actions
  - **Image Processing**: Enhanced MIME type handling for image operations in extractResources
  - **Markdown Conversion**: Optimized convertMarkdownToPdf functionality
  - **Resource Extraction**: Improved resource extraction with better error handling
  - **Performance**: Enhanced overall stability and processing speed
  - **Maintained Compatibility**: All existing workflows continue to work seamlessly

  ### 1.5.0
  - **Previous Version**: Major refactoring and enhanced user experience
  - **Simplified Output Handling**: Removed complex binaryDataName parameters across all actions
  - **Enhanced Response Processing**: Improved response handling to return raw data and metadata consistently
  - **Streamlined Interface**: Simplified action configurations for better usability
  - **Improved Descriptions**: Enhanced action descriptions for clarity and consistency
  - **Better Error Handling**: Refined error handling and response processing
  - **Code Optimization**: Significant code cleanup and optimization across all actions
  - **Maintained Compatibility**: All existing workflows continue to work seamlessly
  - **Enhanced Performance**: Improved processing speed and reliability

  ### 1.3.5
  - **Previous Version**: Enhanced HTML to PDF conversion with direct HTML code input
  - Added **HTML Code** input option for Convert HTML to PDF operation
  - Users can now write HTML code directly in the interface without saving files first
  - HTML code is automatically converted to base64 for API processing
  - Enhanced input flexibility with 4 input methods: Binary Data, Base64, HTML Code, and URL
  - Improved user experience for developers and content creators
  - Maintains backward compatibility with existing workflows

  ### 1.3.0
  - **Previous Version**: AI-powered document processing and enhanced features
  - Added AI-Invoice Parser for automated invoice data extraction
  - Added AI-Process HealthCard for health card data processing
  - Added AI-Process Contract for contract analysis
  - Added Classify Document for AI-powered document classification
  - Added Parse Document for template-based document parsing
  - Added Linearize PDF for web-optimized PDFs
  - Added Flatten PDF for converting interactive elements to static content
  - Enhanced error handling and response processing
  - Improved support for JSON responses in AI processing operations
  - Updated Node.js engine requirement to >=20.15
  - Enhanced build and validation scripts

  ### 1.1.1
  - **Previous Version**: Maintenance and dependency updates
  - Updated dependencies for improved compatibility and security
  - Minor bug fixes and codebase improvements
  - Improved build and validation scripts for publishing
  - **Note:** This version failed the n8n community package security scan due to an ESLint violation: use of restricted global 'setTimeout' is not allowed (see scan results for details).

  ### 1.1.0
  - **Previous Version**: Security and compliance updates
  - Updated to address n8n community package security scan results
  - Added guidance for ESLint compliance and restricted imports
  - Updated dependencies in package.json
  - Improved documentation and publishing guides
  - Minor bug fixes and codebase cleanup

  ### 1.0.0
  - Production-ready release with comprehensive document processing capabilities
  - 60+ document processing operations covering all major use cases
  - Full integration with PDF4ME API services
  - Complete PDF processing suite including conversion, manipulation, and analysis
  - Advanced image processing capabilities with watermarking, cropping, and format conversion
  - Comprehensive barcode generation and reading functionality
  - Document conversion between multiple formats (PDF, Word, Excel, PowerPoint, HTML, etc.)
  - Enhanced timeout handling for complex operations (up to 25 minutes)
  - Improved async processing with exponential backoff and better error handling
  - Support for multiple input types (Binary Data, Base64, URL, File Path)
  - Advanced OCR capabilities with multi-language support
  - Document protection, signing, and security features
  - Metadata extraction and document analysis tools
  - Swiss QR Bill generation with full compliance standards
  - Document template generation and batch processing
  - All critical lint errors resolved for production readiness
  - Optimized package structure and build validation
  - Enhanced error handling and debugging capabilities

  ### 0.9.0
  - Comprehensive document processing capabilities with 50+ actions
  - Full integration with PDF4ME API services
  - Complete PDF processing suite including conversion, manipulation, and analysis
  - Advanced image processing capabilities with watermarking, cropping, and format conversion
  - Comprehensive barcode generation and reading functionality
  - Document conversion between multiple formats (PDF, Word, Excel, HTML, etc.)
  - Enhanced timeout handling for complex operations (up to 25 minutes)
  - Improved async processing with exponential backoff and better error handling
  - Support for multiple input types (Binary Data, Base64, URL, File Path)
  - Advanced OCR capabilities with multi-language support
  - Document protection, signing, and security features
  - Metadata extraction and document analysis tools
  - All critical lint errors resolved for production readiness
  - Optimized package structure and build validation

  ### 0.8.0
  - Comprehensive document processing capabilities
  - Full integration with PDF4ME API services
  - Support for barcode generation, URL to PDF conversion, PDF to Word conversion, JSON to Excel conversion, image cropping, and PDF page extraction
  - Enhanced timeout handling for complex PDF to Word conversions (up to 25 minutes)
  - Improved async processing with exponential backoff and better error handling
  - Support for multiple input types (Binary Data, Base64, URL, File Path)
  - Advanced OCR capabilities with multi-language support
  - Comprehensive barcode generation with 100+ supported formats
  - PDF page extraction for creating shorter versions and digital booklets
  - Standardized API documentation URLs across all files
  - Global installation support for cross-project availability

  ### 0.1.9
  - Fixed package structure and build validation
  - Improved error handling and debugging capabilities

  ### 0.1.3
  - Added global installation support
  - Enhanced package configuration for npm publishing

  ### 0.1.2
  - Initial release with core functionality

ai_documentation_summary:
  {"purpose":"This n8n community node integrates PDF4ME's API to enable comprehensive PDF and document processing, including AI-powered data extraction, format conversion, and document manipulation.","capabilities":["AI-powered invoice parsing","AI-powered health card processing","AI-powered contract analysis","Document classification using AI","Template-based document parsing","PDF to Excel conversion","PDF to Word conversion","PDF to PowerPoint conversion","PDF to editable OCR conversion","PDF to Markdown conversion"],"authentication":"API key required","commonUseCases":["Automated invoice data extraction and entry","Contract document analysis and classification","Bulk PDF document conversion to Excel or Word","Creating interactive PDF forms from templates","Document merging and splitting workflows"],"limitations":["Community node (not official n8n node)","Requires external PDF4ME API access and credentials","Requires manual installation or community node panel setup"],"relatedNodes":["n8n-nodes-http.request","n8n-nodes-cron","n8n-nodes-exceljs.ExcelJS","n8n-nodes-pipefile"]}


node_type: @blotato/n8n-nodes-blotato.blotato
package_name: @blotato/n8n-nodes-blotato
display_name: Blotato
description: Use Blotato API
category: Community
development_style: declarative
version: 2
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: sabrina_ramonov
author_github_url: https://github.com/Blotato-Inc/n8n-nodes-blotato.git
npm_package_name: @blotato/n8n-nodes-blotato
npm_version: 1.0.10
community_fetched_at: 2026-07-14T14:40:33.188Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "post",
      "options": [
        {
          "name": "Media",
          "value": "media"
        },
        {
          "name": "Post",
          "value": "post"
        },
        {
          "name": "Source",
          "value": "source"
        },
        {
          "name": "Video",
          "value": "video"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create source",
          "description": "Submit a source for content extraction (YouTube, TikTok, article, PDF, etc.)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get source",
          "description": "Get the extracted content by source ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "source"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Visual",
          "value": "create",
          "action": "Create visual",
          "description": "Create a visual (video, carousel, or infographic) from a template"
        },
        {
          "name": "Get Visual",
          "value": "get",
          "action": "Get visual",
          "description": "Get a visual by ID"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete video",
          "description": "Delete a video by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "video"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload media",
          "description": "Upload image or video"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "media"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create post",
          "description": "Create post"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get post",
          "description": "Get post status by submission ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "post"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create source",
      "description": "Submit a source for content extraction (YouTube, TikTok, article, PDF, etc.)",
      "resource": "source"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get source",
      "description": "Get the extracted content by source ID",
      "resource": "source"
    },
    {
      "name": "Create Visual",
      "value": "create",
      "action": "Create visual",
      "description": "Create a visual (video, carousel, or infographic) from a template",
      "resource": "video"
    },
    {
      "name": "Get Visual",
      "value": "get",
      "action": "Get visual",
      "description": "Get a visual by ID",
      "resource": "video"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete video",
      "description": "Delete a video by ID",
      "resource": "video"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload media",
      "description": "Upload image or video",
      "resource": "media"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create post",
      "description": "Create post",
      "resource": "post"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get post",
      "description": "Get post status by submission ID",
      "resource": "post"
    }
  ]

npm_readme:
  # n8n-nodes-blotato

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

  Blotato is an AI-powered content engine that enables content creation, publishing, and scheduling across multiple social media platforms through a unified API.

  [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)  
  [Support](#support)  

  ## Installation

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

  ## Operations

  This node provides four main resources for interacting with Blotato:

  ### Video Resource
  Create AI-generated visuals from templates, such as videos, carousels, slideshows, infographics, and images.
  - **Create Visual**: Generate visuals from pre-built templates with a prompt and optional inputs
  - **Get Visual**: Retrieve visual status and details by ID
  - **Delete**: Remove a viusal by ID
  - **Features**:
    - Template-based generation of visual assets
    - Dynamic input fields based on template requirements
    - Support for leading AI image and video models
    - Automatic rendering upon creation

  ### Media Upload
  Upload media files (e.g. images and videos) for your social media content using the Media resource.
  - **Upload from URL**: Upload media files from a URL
  - **Upload from Binary**: Upload media files from binary data
  - **Size limit**: 60MB for binary uploads, larger files should use URL upload
  - **Rate limit**: 10 requests per minute

  ### Post Publish
  Post content across multiple social media platforms using the Post resource.
  - **Platforms supported**: Twitter, Linkedin, Facebook, Instagram, Pinterest, Tiktok, Threads, Bluesky, Youtube
  - **Operations**:
    - **Create**: Publish content to social media platforms
    - **Get**: Check post status and details by submission ID
  - **Features**:
    - Multi-platform publishing with a single workflow
    - Schedule posts for later or use the next available free slot
    - Add captions, hashtags, and media
    - Platform-specific options, such as, but not limited to:
      - Youtube: Privacy settings, subscriber notifications, Made for Kids setting, Contains Synthetic Media
      - Pinterest: Board selection, pin title, alt text, and link
      - Tiktok: Privacy levels, comment/duet settings, Post as Draft, Slideshow Title, Image Cover Index, Video Cover Timestamp
      - Instagram: Post, Reel, or Story options, Audio Name (for Reels), Collaborators
      - Linkedin: Personal profile or Company page
      - Facebook: Page selection, Video/Reel options
      - Threads: Reply control settings
    - **Note**: Instagram, Tiktok, Pinterest, and Youtube require at least one media file (image or video) to be included in posts.
    - Rate limit: 30 requests per minute

  ### Source Extraction
  Extract content from various sources using the Source resource. This is useful for repurposing content from different platforms.
  - **Operations**:
    - **Create**: Submit a source for content extraction (async processing)
    - **Get**: Retrieve extracted content by source ID
  - **Source Types**:
    - **URL** (default): Paste any URL and the type is auto-detected. Supported URL types:
      - YouTube: Extracts video transcript
      - TikTok: Extracts video content
      - Article: Extracts web article text
      - PDF: Extracts document text
      - Audio: Transcribes audio files
    - **Text**: Raw text content with optional AI transformation
    - **AI Research**: AI-powered research query (powered by Perplexity)
  - **Optional Instructions**: AI instructions to transform extracted content (e.g., "Summarize in 5 bullet points for Instagram", "Translate to Spanish"). Leave blank for raw source content.
  - **Async processing**: Create returns a source ID; use Get to poll for extracted content

  ## Credentials

  To use this node, you need to create credentials in n8n:

  1. **Get your Blotato API Key**:
     - Log in to your [Blotato account](https://my.blotato.com)
     - Navigate to Settings → API Keys
     - Click "Generate API Key"
     - **Important**: API access is only available to paying subscribers.

  2. **Configure in n8n**:
     - Go to **Credentials** → **New** → **Blotato API**
     - Enter your API key

  3. **Connect Social Media Accounts**:
     - In Blotato, navigate to Settings → Connected Accounts
     - Click "Login with <platform>" to connect your social media account.

  ## Compatibility

  - **n8n version**: 1.80.0 and above
  - **Node.js version**: 18.10 or higher

  ## Usage

  ### Example: AI Video to Multi-Platform Publishing

  1. **Create AI video/carousel** using the Video resource where you select a template
  2. **Wait for generation** by checking status with Video Get operation
  3. **Publish to multiple platforms** using the Post resource with the generated media URL
  4. **Check post status** using the Post Get operation to verify successful publishing

  ### Example: Upload and Publish

  1. **Upload your media** using the Media resource and Upload operation
  2. **Publish to multiple platforms** using the Post resource and Create operation
  3. **Track publishing progress** using the Post Get operation with the submission ID

  ### Example: Extract YouTube Transcript and Repurpose

  1. **Submit YouTube URL** using Source Create with the URL source type (auto-detects YouTube)
  2. **Poll for extraction** using Source Get with the returned source ID
  3. **Use extracted transcript** to generate new content with AI or repurpose for other platforms

  ### Tips

  - **Video Templates**: Browse available templates at [Blotato Templates](https://my.blotato.com/videos/new)
  - **Rate Limits**: Blotato has a rate limit of 10 media uploads per minute
  - **Media Requirements**: Each platform has specific [media requirements](https://help.blotato.com/api/media)
  - **Scheduling**: Use the `scheduledTime` parameter to schedule posts in ISO 8601 format, or enable `Schedule Next Free Slot` to automatically schedule posts in the next available time slot
  - **Instagram Collaborators**: Add up to 3 Instagram usernames as collaborators on your posts
  - **Debugging**: To view all your API requests, responses, and error messages, go to your [Blotato API Dashboard](https://my.blotato.com/api-dashboard)
  - **Error Handling**: The node supports n8n's error output paths - use "Continue (using error output)" to handle errors gracefully

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Blotato API Reference](https://help.blotato.com/api-reference)
  * [Blotato Help Center](https://help.blotato.com)

  ## About Blotato

  Blotato is your all-in-one AI content engine to create and distribute social media posts. It solves the problem of producing and distributing high-quality content consistently while growing on multiple platforms, without paying for multiple tools that don't integrate with each other.

  ### Key Features
  - **Multi-Platform Publishing**: Schedule and publish to all major social platforms
  - **Viral Templates**: Create social media videos and carousels using prebuilt viral templates
  - **Access to AI Models**: Access the leading AI image and video models, all in one unified tool
  - **Content Remixing**: Transform content between platforms (e.g., Youtube videos to Linkedin posts)

  ### Who is Blotato For?
  - Solopreneurs
  - Content creators
  - Small business owners
  - Social media marketers
  - Digital marketing agencies

  ## Support

  For issues and feature requests related to this n8n node, please use the [GitHub issue tracker](https://github.com/Blotato-Inc/n8n-nodes-blotato/issues).

  For Blotato-specific questions, visit [Blotato Help Center](https://help.blotato.com/).

  ## Development

  - Install n8n (if you want faster development and don't wanna use docker)

  ```sh
  npm i -g n8n
  ```

  - Create necessary directories

  ```sh
  export N8N_BLOTATO_WORKDIR=$HOME/dev/n8n-blotato-work
  mkdir -p $N8N_BLOTATO_WORKDIR/n8n-selfhost
  cd $N8N_BLOTATO_WORKDIR
  git clone git@github.com:Blotato-Inc/n8n-nodes-blotato.git
  ```

  - Build the custom node code

  ```sh
  cd $N8N_BLOTATO_WORKDIR/n8n-nodes-blotato
  npm i
  # rebuilding the code and n8n restart is required
  # on every change
  npm run build
  ```

  - Run locally with `n8n` npm package

  ```sh
  export N8N_BLOTATO_WORKDIR=$HOME/dev/n8n-blotato-work
  export N8N_CUSTOM_EXTENSIONS=$N8N_BLOTATO_WORKDIR/n8n-nodes-blotato
  n8n
  ```

  - Or, alternatively, start n8n instance docker instance (might be slower than native)

  ```sh
  export N8N_BLOTATO_WORKDIR=$HOME/dev/n8n-blotato-work

  docker run -it --rm --name n8n -p 5678:5678 \
             -e N8N_CUSTOM_EXTENSIONS=/mnt/custom-nodes/n8n-nodes-blotato \
             -v $N8N_BLOTATO_WORKDIR/n8n-nodes-blotato:/mnt/custom-nodes/n8n-nodes-blotato \
             -v $N8N_BLOTATO_WORKDIR/n8n-selfhost/data:/home/node \
             docker.n8n.io/n8nio/n8n
  ```

  - NOTE: When you create Blotato API credentials, use http://127.0.0.1:8000 to avoid ipv6 issues

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of content creation, publishing, and scheduling across multiple social media platforms using the Blotato API.","capabilities":["Create AI-generated visuals (videos, carousels, slideshows, infographics, images) from templates","Retrieve and delete generated visual assets by ID","Upload media files from URLs or binary data","Publish content to Twitter, LinkedIn, Facebook, Instagram, Pinterest, TikTok, Threads, Bluesky, and YouTube","Schedule posts for later execution","Extract content from URLs (YouTube transcripts, TikTok content, articles, PDFs, audio)","Perform AI research queries powered by Perplexity","Transform extracted content using custom AI instructions"],"authentication":"API key required (paying subscribers only)","commonUseCases":["Automated multi-platform social media publishing","AI-generated video and image content creation","Content repurposing from YouTube, TikTok, or web articles","Scheduled social media campaigns"],"limitations":["API access requires a paying Blotato subscription","Binary media uploads limited to 60MB (larger files require URL upload)","Media upload rate limit of 10 requests per minute","Post publishing rate limit of 30 requests per minute","Instagram, TikTok, Pinterest, and YouTube require at least one media file for posts"],"relatedNodes":["HTTP Request","Wait Until","Code","Split In Batches"]}


node_type: n8n-nodes-joggai.joggAiNode
package_name: n8n-nodes-joggai
display_name: JoggAI
description: Interact with the JoggAI API to create and manage AI videos
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: joggai
author_github_url: https://github.com/joggaiteam/
npm_package_name: n8n-nodes-joggai
npm_version: 1.0.10
community_fetched_at: 2026-07-14T14:40:33.189Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "video",
      "options": [
        {
          "name": "Video",
          "value": "video"
        },
        {
          "name": "Avatar",
          "value": "avatar"
        },
        {
          "name": "Voice",
          "value": "voice"
        },
        {
          "name": "Template",
          "value": "template"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "AI Script",
          "value": "aiScript"
        },
        {
          "name": "File",
          "value": "file"
        },
        {
          "name": "Music",
          "value": "music"
        },
        {
          "name": "Visual Style",
          "value": "visualStyle"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create from Avatar",
          "value": "createFromAvatar",
          "action": "Create a video from an avatar and a script",
          "description": "Creates a new video using an avatar and a script"
        },
        {
          "name": "Create from Product",
          "value": "createFromProduct",
          "action": "Create a video from a product",
          "description": "Creates a new video by summarizing a product like a product details page"
        },
        {
          "name": "Create from Template",
          "value": "createFromTemplate",
          "action": "Create a video from a template",
          "description": "Creates a new video from a pre-defined template"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a generated video",
          "description": "Retrieves information about a generated video"
        },
        {
          "name": "Generate Preview",
          "value": "generatePreview",
          "action": "Generate a video preview from a product",
          "description": "Generates a video preview from a product without creating the final video"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "video"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLibraryAvatars",
      "options": [
        {
          "name": "Get Library Avatars",
          "value": "getLibraryAvatars",
          "action": "Get Library Avatars",
          "description": "Retrieves a list of public available avatars"
        },
        {
          "name": "Get Instant Avatars",
          "value": "getInstantAvatars",
          "action": "Get Instant Avatars",
          "description": "Retrieves a list of your clone avatars"
        },
        {
          "name": "Get Photo Avatars",
          "value": "getPhotoAvatars",
          "action": "Get Photo Avatars",
          "description": "Retrieves a list of your photo avatars"
        },
        {
          "name": "Generate AI Photo",
          "value": "generateAiPhoto",
          "action": "Generate AI Photo",
          "description": "Generates four new AI photos based on a description"
        },
        {
          "name": "Check Photo Generation Status",
          "value": "checkPhotoStatus",
          "action": "Check Photo Generation Status",
          "description": "Checks the generation status of the AI photo"
        },
        {
          "name": "Create Photo Avatar",
          "value": "createPhotoAvatar",
          "action": "Create Photo Avatar",
          "description": "Create a photo avatar based on the specified description"
        },
        {
          "name": "Check Photo Avatar Generation Status",
          "value": "checkPhotoAvatarStatus",
          "action": "Check Photo Avatar Generation Status",
          "description": "Checks the generation status of an avatar task"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "avatar"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLibraryVoices",
      "options": [
        {
          "name": "Get Library Voices",
          "value": "getLibraryVoices",
          "action": "Get a list of Library voices",
          "description": "Retrieves a list of all public available voices"
        },
        {
          "name": "Get My Voices",
          "value": "getMyVoices",
          "action": "Get my voices",
          "description": "Retrieves a list of your custom voices"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMyTemplates",
      "options": [
        {
          "name": "Get Library Templates",
          "value": "getLibraryTemplates",
          "action": "Get template list from library",
          "description": "Retrieves a list of all public templates voices"
        },
        {
          "name": "Get My Templates",
          "value": "getMyTemplates",
          "action": "Get my templates",
          "description": "Retrieves a list of your custom templates"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadProduct",
      "options": [
        {
          "name": "Upload product",
          "value": "uploadProduct",
          "action": "Upload a product for video creation",
          "description": "Uploads and processes a product to be used for video creation"
        },
        {
          "name": "Update product",
          "value": "updateProduct",
          "action": "Update a product",
          "description": "Update the information of a product"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate an AI script",
          "description": "Generates a script from a product or description using AI"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiScript"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload a file",
          "description": "Uploads a file for use in video generation"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get music",
          "description": "Retrieves a list of available background music"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "music"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get visual styles",
          "description": "Retrieves a list of available visual styles for use in video generation"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "visualStyle"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "webhook:list",
      "options": [
        {
          "name": "List of Webhook Endpoints",
          "value": "webhook:list",
          "action": "List of Webhook Endpoints",
          "description": "Get a list of configured webhook endpoints"
        },
        {
          "name": "Add a Webhook Endpoint",
          "value": "webhook:add",
          "action": "Add a Webhook Endpoint",
          "description": "Add a new webhook endpoint configuration"
        },
        {
          "name": "Update a Webhook Endpoint",
          "value": "webhook:update",
          "action": "Update a Webhook Endpoint",
          "description": "Update an existing webhook endpoint configuration"
        },
        {
          "name": "Delete a Webhook Endpoint",
          "value": "webhook:delete",
          "action": "Delete a Webhook Endpoint",
          "description": "Delete an existing webhook endpoint"
        },
        {
          "name": "List of Available Webhook Events",
          "value": "webhook:events",
          "action": "List of Available Webhook Events",
          "description": "Get a list of available webhook events"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create from Avatar",
      "value": "createFromAvatar",
      "action": "Create a video from an avatar and a script",
      "description": "Creates a new video using an avatar and a script",
      "resource": "video"
    },
    {
      "name": "Create from Product",
      "value": "createFromProduct",
      "action": "Create a video from a product",
      "description": "Creates a new video by summarizing a product like a product details page",
      "resource": "video"
    },
    {
      "name": "Create from Template",
      "value": "createFromTemplate",
      "action": "Create a video from a template",
      "description": "Creates a new video from a pre-defined template",
      "resource": "video"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a generated video",
      "description": "Retrieves information about a generated video",
      "resource": "video"
    },
    {
      "name": "Generate Preview",
      "value": "generatePreview",
      "action": "Generate a video preview from a product",
      "description": "Generates a video preview from a product without creating the final video",
      "resource": "video"
    },
    {
      "name": "Get Library Avatars",
      "value": "getLibraryAvatars",
      "action": "Get Library Avatars",
      "description": "Retrieves a list of public available avatars",
      "resource": "avatar"
    },
    {
      "name": "Get Instant Avatars",
      "value": "getInstantAvatars",
      "action": "Get Instant Avatars",
      "description": "Retrieves a list of your clone avatars",
      "resource": "avatar"
    },
    {
      "name": "Get Photo Avatars",
      "value": "getPhotoAvatars",
      "action": "Get Photo Avatars",
      "description": "Retrieves a list of your photo avatars",
      "resource": "avatar"
    },
    {
      "name": "Generate AI Photo",
      "value": "generateAiPhoto",
      "action": "Generate AI Photo",
      "description": "Generates four new AI photos based on a description",
      "resource": "avatar"
    },
    {
      "name": "Check Photo Generation Status",
      "value": "checkPhotoStatus",
      "action": "Check Photo Generation Status",
      "description": "Checks the generation status of the AI photo",
      "resource": "avatar"
    },
    {
      "name": "Create Photo Avatar",
      "value": "createPhotoAvatar",
      "action": "Create Photo Avatar",
      "description": "Create a photo avatar based on the specified description",
      "resource": "avatar"
    },
    {
      "name": "Check Photo Avatar Generation Status",
      "value": "checkPhotoAvatarStatus",
      "action": "Check Photo Avatar Generation Status",
      "description": "Checks the generation status of an avatar task",
      "resource": "avatar"
    },
    {
      "name": "Get Library Voices",
      "value": "getLibraryVoices",
      "action": "Get a list of Library voices",
      "description": "Retrieves a list of all public available voices",
      "resource": "voice"
    },
    {
      "name": "Get My Voices",
      "value": "getMyVoices",
      "action": "Get my voices",
      "description": "Retrieves a list of your custom voices",
      "resource": "voice"
    },
    {
      "name": "Get Library Templates",
      "value": "getLibraryTemplates",
      "action": "Get template list from library",
      "description": "Retrieves a list of all public templates voices",
      "resource": "template"
    },
    {
      "name": "Get My Templates",
      "value": "getMyTemplates",
      "action": "Get my templates",
      "description": "Retrieves a list of your custom templates",
      "resource": "template"
    },
    {
      "name": "Upload product",
      "value": "uploadProduct",
      "action": "Upload a product for video creation",
      "description": "Uploads and processes a product to be used for video creation",
      "resource": "product"
    },
    {
      "name": "Update product",
      "value": "updateProduct",
      "action": "Update a product",
      "description": "Update the information of a product",
      "resource": "product"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate an AI script",
      "description": "Generates a script from a product or description using AI",
      "resource": "aiScript"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload a file",
      "description": "Uploads a file for use in video generation",
      "resource": "file"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get music",
      "description": "Retrieves a list of available background music",
      "resource": "music"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get visual styles",
      "description": "Retrieves a list of available visual styles for use in video generation",
      "resource": "visualStyle"
    },
    {
      "name": "List of Webhook Endpoints",
      "value": "webhook:list",
      "action": "List of Webhook Endpoints",
      "description": "Get a list of configured webhook endpoints",
      "resource": "webhook"
    },
    {
      "name": "Add a Webhook Endpoint",
      "value": "webhook:add",
      "action": "Add a Webhook Endpoint",
      "description": "Add a new webhook endpoint configuration",
      "resource": "webhook"
    },
    {
      "name": "Update a Webhook Endpoint",
      "value": "webhook:update",
      "action": "Update a Webhook Endpoint",
      "description": "Update an existing webhook endpoint configuration",
      "resource": "webhook"
    },
    {
      "name": "Delete a Webhook Endpoint",
      "value": "webhook:delete",
      "action": "Delete a Webhook Endpoint",
      "description": "Delete an existing webhook endpoint",
      "resource": "webhook"
    },
    {
      "name": "List of Available Webhook Events",
      "value": "webhook:events",
      "action": "List of Available Webhook Events",
      "description": "Get a list of available webhook events",
      "resource": "webhook"
    }
  ]

npm_readme:
  # n8n-nodes-joggai

  Automate the creation of digital human and marketing videos in your n8n workflows via API.

  ---

  JoggAI transforms the days-long manual process of video creation into an automated task that takes just a few minutes. Whether you're batch-producing personalized marketing videos or automatically converting blog posts into videos, you can do it all effortlessly within n8n.

  ## ✨ Features

  - ✅ **Create Video from Digital Human:** Generate talking head videos using Avatars you've created in your JoggAI dashboard or free ones from the public library.
  - ✅ **Create Video from Template:** Dynamically populate content into preset templates from your JoggAI dashboard to generate videos.
  - ✅ **URL to Video:** Instantly convert any product link into a marketing video.
  - ✅ **Create Digital Human:** Supports various digital human likenesses and voice cloning.
  - ✅ **Check Video Status:** Asynchronously fetch video generation progress, suitable for long rendering tasks.

  ## Prerequisites

  Before using this node, please ensure you have:

  - A running n8n instance.
  - A JoggAI account. If you don't have one, you can [register for free here](https://app.jogg.ai/register).

  ## 🚀 Quick Start

  1.  **Install the Node in n8n:**
      - Go to `Settings > Community Nodes`.
      - Click `Install` and search for `n8n-nodes-jogg-ai`.

  2.  **Configure JoggAI Credentials:**
      - In the `Credentials` section of n8n, click `Add Credential`.
      - Search for and select `JoggAI API`.
      - Go to your [JoggAI API settings page](https://app.jogg.ai/home) to copy your API Key and paste it.
        ![Find your JoggAI API Key](https://res.jogg.ai/upload/sam/2025-07-11/292683374000458e91c7a55c4a3915b5.png)

  ## 💡 Example: Automatically Generate Videos from Google Sheets Content

  This workflow automatically creates an Talking avatar video using data from n8n Form.
  ![N8N Form to JoggAI Workflow Example](https://res.jogg.ai/upload/sam/2025-07-11/3be2a12eb38a468594af1e9dd474a917.png)

  1.  Use the `N8N Form Trigger` node to monitor for new rows.
  2.  Connect the `JoggAI` node.
  3.  In the "Text Script" field of the JoggAI node, use an expression to reference column data from the N8N Form, for example: `{{ $json.script }} welcome to joggAI`.
  4.  Execute the workflow, and the video will be created automatically.

  > Want to use this template directly? [Click here to copy the workflow in one click](https://gist.githubusercontent.com/joggaiteam/ab4065803111fd860584deb3dd245689/raw/ef28aa8d6c85bd2213c7c9a177b0c8c3d9e953b0/joggai-example.json).

  ## 🔗 Resources

  - ⚙️ **Full JoggAI API Documentation:** [docs.jogg.ai](https://docs.jogg.ai/api-reference/QuickStart/GettingStarted)

  ## 💬 Support & Feedback

  - For any bugs or feature requests, please raise them in [GitHub Issues](https://github.com/joggaiteam/n8n-nodes-joggai/issues).
  - If you have questions about usage, feel free to ask and @mention us on the [n8n Community Forum](https://community.n8n.io/).

ai_documentation_summary:
  {"purpose":"Automates the creation of digital human and marketing videos within n8n workflows by interacting with the JoggAI API.","capabilities":["Create talking head videos from digital human avatars (custom or public library)","Generate videos by populating preset templates with dynamic content","Convert product URLs into marketing videos","Create and manage digital human likenesses with voice cloning","Check asynchronous video generation status and progress","Batch-produce personalized marketing videos"],"authentication":"API Key required (configured via n8n Credentials section)","commonUseCases":["Automatically generating personalized marketing videos from form submissions or database records","Converting blog posts or text content into video format","Batch processing product links to create promotional videos","Integrating with Google Sheets or other data sources to trigger video creation"],"limitations":["Requires a separate JoggAI account with an API key","Video generation is asynchronous and requires status checking for long tasks","Depends on external JoggAI API availability and rate limits"],"relatedNodes":["n8n-nodes-webhook","n8n-nodes-github","n8n-nodes-google-sheets","n8n-nodes-form"]}


node_type: n8n-nodes-binalyze-air.air
package_name: n8n-nodes-binalyze-air
display_name: AIR
description: Manage Binalyze AIR resources
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: emretinaztepe
author_github_url: https://github.com/binalyze/
npm_package_name: n8n-nodes-binalyze-air
npm_version: 1.4.3
community_fetched_at: 2026-07-14T14:40:33.190Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "organizations",
      "options": [
        {
          "name": "Acquisition",
          "value": "acquisitions",
          "description": "Manage acquisition profiles and remote acquisitions"
        },
        {
          "name": "Asset",
          "value": "assets",
          "description": "Manage endpoint assets and their operations"
        },
        {
          "name": "Baseline",
          "value": "baselines",
          "description": "Manage baselines and comparisons"
        },
        {
          "name": "Case",
          "value": "cases",
          "description": "Manage cases and case operations"
        },
        {
          "name": "InterACT",
          "value": "interact",
          "description": "Interactive shell sessions and command execution on devices"
        },
        {
          "name": "Organization",
          "value": "organizations",
          "description": "Manage organizations"
        },
        {
          "name": "Repository",
          "value": "repositories",
          "description": "Manage evidence repositories"
        },
        {
          "name": "Task",
          "value": "tasks",
          "description": "Manage tasks and task assignments"
        },
        {
          "name": "Triage Rule",
          "value": "triagerules",
          "description": "Manage triage rules"
        },
        {
          "name": "User",
          "value": "users",
          "description": "Manage users"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Assign Evidence Acquisition Task",
          "value": "assignEvidenceTask",
          "action": "Assign an evidence acquisition task",
          "description": "Assign an evidence acquisition task by filter"
        },
        {
          "name": "Get Acquisition Profile",
          "value": "get",
          "action": "Get an acquisition profile",
          "description": "Retrieve a specific acquisition profile"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "acquisitions"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add Tags",
          "value": "addTags",
          "action": "Add tags to assets",
          "description": "Add tags to assets by filter"
        },
        {
          "name": "Assign Isolation Task",
          "value": "setIsolation",
          "action": "Assign isolation task to an asset",
          "description": "Assign isolation task to an asset"
        },
        {
          "name": "Assign Reboot Task",
          "value": "reboot",
          "action": "Assign reboot task to assets",
          "description": "Assign reboot task to an asset"
        },
        {
          "name": "Assign Shutdown Task",
          "value": "shutdown",
          "action": "Assign shutdown task to asset",
          "description": "Assign shutdown task to an asset"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an asset",
          "description": "Retrieve a specific asset"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many assets",
          "description": "Retrieve many assets"
        },
        {
          "name": "Get Tasks",
          "value": "getAssetTasks",
          "action": "Get asset tasks",
          "description": "Get tasks for a specific asset"
        },
        {
          "name": "Remove Tags",
          "value": "removeTags",
          "action": "Remove tags from assets",
          "description": "Remove tags from assets by filter"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "assets"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "acquireBaseline",
      "options": [
        {
          "name": "Acquire Baseline",
          "value": "acquireBaseline",
          "action": "Acquire a baseline",
          "description": "Acquire baseline for endpoints"
        },
        {
          "name": "Compare Baselines",
          "value": "compareBaseline",
          "action": "Compare baselines",
          "description": "Compare two baseline acquisition results from the same endpoint"
        },
        {
          "name": "Get Comparison Report",
          "value": "getComparisonReport",
          "action": "Get comparison report",
          "description": "Get baseline comparison report"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "baselines"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Change Owner",
          "value": "changeOwner",
          "action": "Change case owner",
          "description": "Change the owner of a case"
        },
        {
          "name": "Check Name",
          "value": "checkName",
          "action": "Check case name availability",
          "description": "Check if a case name is available"
        },
        {
          "name": "Close Case",
          "value": "closeCase",
          "action": "Close a case",
          "description": "Close a specific case"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a case",
          "description": "Create a new case"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a case",
          "description": "Retrieve a specific case"
        },
        {
          "name": "Get Activities",
          "value": "getActivities",
          "action": "Get case activities",
          "description": "Get activities for a specific case"
        },
        {
          "name": "Get Endpoints",
          "value": "getEndpoints",
          "action": "Get case endpoints",
          "description": "Get endpoints for a specific case"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many cases",
          "description": "Retrieve many cases"
        },
        {
          "name": "Get Tasks",
          "value": "getTasks",
          "action": "Get case tasks",
          "description": "Get tasks for a specific case"
        },
        {
          "name": "Get Users",
          "value": "getUsers",
          "action": "Get case users",
          "description": "Get users for a specific case"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "cases"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createSession",
      "options": [
        {
          "name": "Close Session",
          "value": "closeSession",
          "action": "Close a session",
          "description": "Close an InterACT session"
        },
        {
          "name": "Create InterACT Session",
          "value": "createSession",
          "action": "Create an interact session",
          "description": "Create a new InterACT shell session for an asset"
        },
        {
          "name": "Execute Async Command",
          "value": "executeAsyncCommand",
          "action": "Execute an async command",
          "description": "Execute an asynchronous command in an InterACT session"
        },
        {
          "name": "Execute Command",
          "value": "executeCommand",
          "action": "Execute a command",
          "description": "Execute a command in an InterACT session"
        },
        {
          "name": "Get Command Response",
          "value": "getCommandMessage",
          "action": "Get a command response",
          "description": "Get the result of a command execution"
        },
        {
          "name": "Interrupt Command",
          "value": "interruptCommand",
          "action": "Interrupt a command",
          "description": "Interrupt a running command"
        },
        {
          "name": "Wait for Session to Be Live",
          "value": "waitForSession",
          "action": "Wait for session to be live",
          "description": "Wait for an InterACT session to become live by monitoring task status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "interact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add Tags",
          "value": "addTags",
          "action": "Add tags to an organization",
          "description": "Add tags to an organization"
        },
        {
          "name": "Assign User",
          "value": "assignUser",
          "action": "Assign a user to an organization",
          "description": "Assign a user to an organization"
        },
        {
          "name": "Check Name Exists",
          "value": "checkNameExists",
          "action": "Check if organization name exists",
          "description": "Check if an organization name already exists"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create an organization",
          "description": "Create a new organization"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an organization",
          "description": "Retrieve a specific organization"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many organizations",
          "description": "Retrieve many organizations"
        },
        {
          "name": "Get Users",
          "value": "getUsers",
          "action": "Get users of an organization",
          "description": "Retrieve users assigned to an organization"
        },
        {
          "name": "Remove Tags",
          "value": "removeTags",
          "action": "Remove tags from an organization",
          "description": "Remove tags from an organization"
        },
        {
          "name": "Remove User",
          "value": "removeUser",
          "action": "Remove a user from an organization",
          "description": "Remove a user from an organization"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an organization",
          "description": "Update an organization"
        },
        {
          "name": "Update Shareable Deployment",
          "value": "updateShareableDeployment",
          "action": "Update shareable deployment status",
          "description": "Update organization shareable deployment status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "organizations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a repository",
          "description": "Get a repository by name"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many repositories",
          "description": "Get many repositories"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "repositories"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a task",
          "description": "Retrieve a specific task"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tasks",
          "description": "Retrieve many tasks"
        },
        {
          "name": "Get Task Assignments",
          "value": "getTaskAssignments",
          "action": "Get task assignments",
          "description": "Retrieve assignments for a specific task"
        },
        {
          "name": "Wait for Completion",
          "value": "waitForCompletion",
          "action": "Wait for task completion",
          "description": "Wait for a task to complete with polling"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tasks"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Assign Triage Task",
          "value": "assignTask",
          "action": "Assign a triage task",
          "description": "Assign a triage task"
        },
        {
          "name": "Create Triage Rule",
          "value": "create",
          "action": "Create a triage rule",
          "description": "Create a new triage rule"
        },
        {
          "name": "Delete Triage Rule",
          "value": "delete",
          "action": "Delete a triage rule",
          "description": "Delete a triage rule"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a triage rule",
          "description": "Retrieve a specific triage rule"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many triage rules",
          "description": "Retrieve many triage rules"
        },
        {
          "name": "Update Triage Rule",
          "value": "update",
          "action": "Update a triage rule",
          "description": "Update a triage rule"
        },
        {
          "name": "Validate Triage Rule",
          "value": "validate",
          "action": "Validate a triage rule",
          "description": "Validate a triage rule"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "triagerules"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many users",
          "description": "Retrieve many users"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user",
          "description": "Retrieve a specific user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "users"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Assign Evidence Acquisition Task",
      "value": "assignEvidenceTask",
      "action": "Assign an evidence acquisition task",
      "description": "Assign an evidence acquisition task by filter",
      "resource": "acquisitions"
    },
    {
      "name": "Get Acquisition Profile",
      "value": "get",
      "action": "Get an acquisition profile",
      "description": "Retrieve a specific acquisition profile",
      "resource": "acquisitions"
    },
    {
      "name": "Add Tags",
      "value": "addTags",
      "action": "Add tags to assets",
      "description": "Add tags to assets by filter",
      "resource": "assets"
    },
    {
      "name": "Assign Isolation Task",
      "value": "setIsolation",
      "action": "Assign isolation task to an asset",
      "description": "Assign isolation task to an asset",
      "resource": "assets"
    },
    {
      "name": "Assign Reboot Task",
      "value": "reboot",
      "action": "Assign reboot task to assets",
      "description": "Assign reboot task to an asset",
      "resource": "assets"
    },
    {
      "name": "Assign Shutdown Task",
      "value": "shutdown",
      "action": "Assign shutdown task to asset",
      "description": "Assign shutdown task to an asset",
      "resource": "assets"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an asset",
      "description": "Retrieve a specific asset",
      "resource": "assets"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many assets",
      "description": "Retrieve many assets",
      "resource": "assets"
    },
    {
      "name": "Get Tasks",
      "value": "getAssetTasks",
      "action": "Get asset tasks",
      "description": "Get tasks for a specific asset",
      "resource": "assets"
    },
    {
      "name": "Remove Tags",
      "value": "removeTags",
      "action": "Remove tags from assets",
      "description": "Remove tags from assets by filter",
      "resource": "assets"
    },
    {
      "name": "Acquire Baseline",
      "value": "acquireBaseline",
      "action": "Acquire a baseline",
      "description": "Acquire baseline for endpoints",
      "resource": "baselines"
    },
    {
      "name": "Compare Baselines",
      "value": "compareBaseline",
      "action": "Compare baselines",
      "description": "Compare two baseline acquisition results from the same endpoint",
      "resource": "baselines"
    },
    {
      "name": "Get Comparison Report",
      "value": "getComparisonReport",
      "action": "Get comparison report",
      "description": "Get baseline comparison report",
      "resource": "baselines"
    },
    {
      "name": "Change Owner",
      "value": "changeOwner",
      "action": "Change case owner",
      "description": "Change the owner of a case",
      "resource": "cases"
    },
    {
      "name": "Check Name",
      "value": "checkName",
      "action": "Check case name availability",
      "description": "Check if a case name is available",
      "resource": "cases"
    },
    {
      "name": "Close Case",
      "value": "closeCase",
      "action": "Close a case",
      "description": "Close a specific case",
      "resource": "cases"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a case",
      "description": "Create a new case",
      "resource": "cases"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a case",
      "description": "Retrieve a specific case",
      "resource": "cases"
    },
    {
      "name": "Get Activities",
      "value": "getActivities",
      "action": "Get case activities",
      "description": "Get activities for a specific case",
      "resource": "cases"
    },
    {
      "name": "Get Endpoints",
      "value": "getEndpoints",
      "action": "Get case endpoints",
      "description": "Get endpoints for a specific case",
      "resource": "cases"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many cases",
      "description": "Retrieve many cases",
      "resource": "cases"
    },
    {
      "name": "Get Tasks",
      "value": "getTasks",
      "action": "Get case tasks",
      "description": "Get tasks for a specific case",
      "resource": "cases"
    },
    {
      "name": "Get Users",
      "value": "getUsers",
      "action": "Get case users",
      "description": "Get users for a specific case",
      "resource": "cases"
    },
    {
      "name": "Close Session",
      "value": "closeSession",
      "action": "Close a session",
      "description": "Close an InterACT session",
      "resource": "interact"
    },
    {
      "name": "Create InterACT Session",
      "value": "createSession",
      "action": "Create an interact session",
      "description": "Create a new InterACT shell session for an asset",
      "resource": "interact"
    },
    {
      "name": "Execute Async Command",
      "value": "executeAsyncCommand",
      "action": "Execute an async command",
      "description": "Execute an asynchronous command in an InterACT session",
      "resource": "interact"
    },
    {
      "name": "Execute Command",
      "value": "executeCommand",
      "action": "Execute a command",
      "description": "Execute a command in an InterACT session",
      "resource": "interact"
    },
    {
      "name": "Get Command Response",
      "value": "getCommandMessage",
      "action": "Get a command response",
      "description": "Get the result of a command execution",
      "resource": "interact"
    },
    {
      "name": "Interrupt Command",
      "value": "interruptCommand",
      "action": "Interrupt a command",
      "description": "Interrupt a running command",
      "resource": "interact"
    },
    {
      "name": "Wait for Session to Be Live",
      "value": "waitForSession",
      "action": "Wait for session to be live",
      "description": "Wait for an InterACT session to become live by monitoring task status",
      "resource": "interact"
    },
    {
      "name": "Add Tags",
      "value": "addTags",
      "action": "Add tags to an organization",
      "description": "Add tags to an organization",
      "resource": "organizations"
    },
    {
      "name": "Assign User",
      "value": "assignUser",
      "action": "Assign a user to an organization",
      "description": "Assign a user to an organization",
      "resource": "organizations"
    },
    {
      "name": "Check Name Exists",
      "value": "checkNameExists",
      "action": "Check if organization name exists",
      "description": "Check if an organization name already exists",
      "resource": "organizations"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an organization",
      "description": "Create a new organization",
      "resource": "organizations"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an organization",
      "description": "Retrieve a specific organization",
      "resource": "organizations"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many organizations",
      "description": "Retrieve many organizations",
      "resource": "organizations"
    },
    {
      "name": "Get Users",
      "value": "getUsers",
      "action": "Get users of an organization",
      "description": "Retrieve users assigned to an organization",
      "resource": "organizations"
    },
    {
      "name": "Remove Tags",
      "value": "removeTags",
      "action": "Remove tags from an organization",
      "description": "Remove tags from an organization",
      "resource": "organizations"
    },
    {
      "name": "Remove User",
      "value": "removeUser",
      "action": "Remove a user from an organization",
      "description": "Remove a user from an organization",
      "resource": "organizations"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an organization",
      "description": "Update an organization",
      "resource": "organizations"
    },
    {
      "name": "Update Shareable Deployment",
      "value": "updateShareableDeployment",
      "action": "Update shareable deployment status",
      "description": "Update organization shareable deployment status",
      "resource": "organizations"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a repository",
      "description": "Get a repository by name",
      "resource": "repositories"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many repositories",
      "description": "Get many repositories",
      "resource": "repositories"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a task",
      "description": "Retrieve a specific task",
      "resource": "tasks"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tasks",
      "description": "Retrieve many tasks",
      "resource": "tasks"
    },
    {
      "name": "Get Task Assignments",
      "value": "getTaskAssignments",
      "action": "Get task assignments",
      "description": "Retrieve assignments for a specific task",
      "resource": "tasks"
    },
    {
      "name": "Wait for Completion",
      "value": "waitForCompletion",
      "action": "Wait for task completion",
      "description": "Wait for a task to complete with polling",
      "resource": "tasks"
    },
    {
      "name": "Assign Triage Task",
      "value": "assignTask",
      "action": "Assign a triage task",
      "description": "Assign a triage task",
      "resource": "triagerules"
    },
    {
      "name": "Create Triage Rule",
      "value": "create",
      "action": "Create a triage rule",
      "description": "Create a new triage rule",
      "resource": "triagerules"
    },
    {
      "name": "Delete Triage Rule",
      "value": "delete",
      "action": "Delete a triage rule",
      "description": "Delete a triage rule",
      "resource": "triagerules"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a triage rule",
      "description": "Retrieve a specific triage rule",
      "resource": "triagerules"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many triage rules",
      "description": "Retrieve many triage rules",
      "resource": "triagerules"
    },
    {
      "name": "Update Triage Rule",
      "value": "update",
      "action": "Update a triage rule",
      "description": "Update a triage rule",
      "resource": "triagerules"
    },
    {
      "name": "Validate Triage Rule",
      "value": "validate",
      "action": "Validate a triage rule",
      "description": "Validate a triage rule",
      "resource": "triagerules"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many users",
      "description": "Retrieve many users",
      "resource": "users"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a user",
      "description": "Retrieve a specific user",
      "resource": "users"
    }
  ]

npm_readme:
  ![Banner image](https://github.com/binalyze/n8n-nodes-binalyze-air/blob/main/assets/header-image.jpg)

  # n8n-nodes-binalyze-air

  This is an n8n community node that integrates with Binalyze AIR (Automated Incident Response) platform.

  ## Table of Contents

  - [Installation](#installation)
  - [Configuration](#configuration)
  - [Supported Resources](#supported-resources)
    - [Acquisitions](#acquisitions)
    - [Assets](#assets)
    - [Baselines](#baselines)
    - [Cases](#cases)
    - [InterACT](#interact)
    - [Organizations](#organizations)
    - [Repositories](#repositories)
    - [Tasks](#tasks)
    - [Triage Rules](#triage-rules)
    - [Users](#users)
  - [Trigger Node](#trigger-node)
    - [How to Use](#how-to-use)
    - [Supported Event Types](#supported-event-types)
    - [Event Data Structure](#event-data-structure)
  - [Development](#development)
  - [Testing](#testing)
  - [TODO](#todo)

  ## Installation

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

  ## Configuration

  Before using this node, you need to configure your Binalyze AIR credentials:

  ### Step 1: Create AIR API Key

  1. Go to AIR > Integrations > API Tokens > Add New
  	* Provide a Token Name
  	* Select an Organization
  	* Select a Role
  	* Define Expiration time
  2. Click Save button, and copy the token as you will not be able to see it again
  3. Click 'I got the token' button

  ### Step 2: Create AIR Credentials on your n8n instance

  1. In n8n, go to Settings → Credentials
  2. Add a new credential for "Binalyze AIR API"
  3. Enter your AIR instance URL and API token

  ## Supported Resources

  This node provides comprehensive coverage of Binalyze AIR's features listed below:

  ### Acquisitions
  Manage evidence acquisition profiles and tasks.

  **Operations:**
  - `get` - Retrieve a specific acquisition profile
  - `assignEvidenceTask` - Assign an evidence acquisition task by filter
  - `assignImageTask` - Assign an image acquisition task by filter
  - `createOffNetworkTask` - Create an off-network acquisition task

  ### Assets
  Manage endpoints and their associated tasks, tags, and status.

  **Operations:**
  - `addTags` - Add tags to assets by filter
  - `get` - Retrieve a specific asset
  - `getAssetTasks` - Get tasks for a specific asset
  - `getAll` - Retrieve many assets
  - `reboot` - Assign reboot task to a specific asset (returns standardized response with success status, message, asset details, task, and error information)
  - `removeTags` - Remove tags from assets by filter
  - `setIsolation` - Assign isolation task to a specific asset (checks for existing tasks and current isolation status, returns standardized response)
  - `shutdown` - Assign shutdown task to a specific asset (returns standardized response with success status, message, asset details, task, and error information)

  ### Baselines
  Acquire and compare system baselines.

  **Operations:**
  - `acquireBaseline` - Acquire baseline for endpoints
  - `compareBaseline` - Compare two baseline acquisition results from the same endpoint
  - `getComparisonReport` - Get baseline comparison report

  ### Cases
  Manage incident response cases, notes, and activities.

  **Operations:**
  - `changeOwner` - Change the owner of a case
  - `checkName` - Check if a case name is available
  - `closeCase` - Close a specific case
  - `create` - Create a new case
  - `get` - Retrieve a specific case
  - `getActivities` - Get activities for a specific case
  - `getEndpoints` - Get endpoints for a specific case
  - `getAll` - Retrieve many cases
  - `getTasks` - Get tasks for a specific case
  - `getUsers` - Get users for a specific case

  ### InterACT
  Execute commands and interact with endpoints remotely.

  **Operations:**
  - `createSession` - Create a new InterACT shell session for an asset
  - `waitForSession` - Wait for an InterACT session to become live by monitoring task status (supports indefinite wait with timeout=0)
  - `closeSession` - Close an InterACT session
  - `executeCommand` - Execute a command in an InterACT session
  - `executeAsyncCommand` - Execute an asynchronous command in an InterACT session
  - `getCommandMessage` - Get the result of a command execution
  - `interruptCommand` - Interrupt a running command

  ### Organizations
  Manage organizations and their users.

  **Operations:**
  - `addTags` - Add tags to an organization
  - `assignUser` - Assign a user to an organization
  - `checkNameExists` - Check if an organization name already exists
  - `create` - Create a new organization
  - `get` - Retrieve a specific organization
  - `getAll` - Retrieve many organizations
  - `getUsers` - Retrieve users assigned to an organization
  - `removeTags` - Remove tags from an organization
  - `removeUser` - Remove a user from an organization
  - `update` - Update an organization
  - `updateShareableDeployment` - Update organization shareable deployment status

  ### Repositories
  Manage evidence repositories.

  **Operations:**
  - `get` - Get a repository by name, ID, or from list selection
  - `getAll` - Get many repositories with filtering options

  ### Tasks
  Manage and monitor tasks and assignments.

  **Operations:**
  - `cancelTask` - Cancel a specific task
  - `cancelTaskAssignment` - Cancel a specific task assignment
  - `deleteTask` - Delete a specific task
  - `deleteTaskAssignment` - Delete a specific task assignment
  - `get` - Retrieve a specific task
  - `getAll` - Retrieve many tasks
  - `getTaskAssignments` - Retrieve assignments for a specific task
  - `waitForCompletion` - Wait for a task to complete with polling

  ### Triage Rules
  Create and manage triage rules for automated analysis.

  **Operations:**
  - `assignTask` - Assign a triage task
  - `create` - Create a new triage rule
  - `delete` - Delete a triage rule
  - `get` - Retrieve a specific triage rule
  - `getAll` - Retrieve many triage rules
  - `update` - Update a triage rule
  - `validate` - Validate a triage rule

  ### Users
  Manage user accounts and permissions.

  **Operations:**
  - `getAll` - Retrieve many users
  - `get` - Retrieve a specific user

  ## Trigger Node

  The On AIR Event-Trigger node allows you to trigger workflows based on AIR events.

  ### How to Use

  1. Add the On new AIR Trigger node to your workflow
  2. Configure your AIR API credentials
  3. Select the event types you want to listen for from the dynamically loaded list
  4. Configure the Bearer token that AIR will use for webhook authentication
  5. Copy the webhook URL from the node
  6. Create an event subscription in AIR:
     - Go to AIR > Integrations > Event Subscriptions
     - Add a new subscription with the webhook URL
     - Select the same event types
     - Provide the same Bearer token you configured in the trigger node

  ### Supported Event Types

  The trigger node dynamically loads available [event types](https://kb.binalyze.com/air/features/event-subscription) from your AIR instance, which may include:
  - TaskProcessingCompletedEvent
  - TaskProcessingFailedEvent
  - TaskCompletedEvent
  - TaskFailedEvent
  - CaseClosedEvent
  - EndpointRegisteredEvent
  - ...  

  ### Event Data Structure

  When an event is triggered, the node outputs data in the following format:
  ```json
  {
    "eventName": "TaskCompletedEvent",
    "organizationId": 0,
    "data": {
      "id": "task-id",
      "name": "Task Name",
      "type": "Task Type",
      "organizationId": "org-id",
      "totalAssignedEndpoints": 5,
      "totalCompletedEndpoints": 4
    }
  }
  ```

  ## Development

  To set up the development environment:

  1. Clone this repository
  2. Install dependencies: `yarn install`

  You then have two ways to run the package against a local n8n.

  ### Quick start (no global n8n install required)

  `scripts/dev-env.sh` builds the package, links it into a local n8n config, and
  starts n8n via `npx`. Useful for contributors who want to try the node without
  installing n8n globally.

  ```bash
  ./scripts/dev-env.sh up       # build, link, start n8n on http://localhost:5678
  ./scripts/dev-env.sh status   # show whether n8n is running
  ./scripts/dev-env.sh logs     # tail the n8n log
  ./scripts/dev-env.sh down     # stop the n8n instance
  ```

  Re-run `up` after code changes to rebuild and relink; restart n8n when needed.

  ### Watch-mode workflow (against an existing n8n)

  If you already have n8n running locally (or want continuous rebuilds), use the
  existing watch-mode scripts:

  3. Build the project: `yarn build`
  4. Link the project using:
     - `npm link`
     - `npm link n8n-nodes-binalyze-air`
  5. Start the development environment:
     - `yarn dev` - Start n8n in watch mode with automatic rebuilds
     - `yarn debug` - Start n8n in debug mode with verbose logging

  ### Development Scripts

  - `yarn build` - Build the project
  - `yarn dev` - Start development environment with file watching
  - `yarn debug` - Start development environment with debug logging enabled
  - `yarn restart:n8n` - Restart n8n without rebuilding
  - `./scripts/dev-env.sh up|down|status|logs` - One-command local n8n environment via `npx`

  ### Debug Mode

  The `yarn debug` command enables comprehensive debug logging to help troubleshoot issues:

  **Features:**
  - **Verbose Logging**: Sets `N8N_LOG_LEVEL=debug` for detailed n8n logs
  - **Console Output**: Direct log output to console (`N8N_LOG_OUTPUT=console`)
  - **Debug Patterns**: Enables debug output for n8n core and community nodes (`DEBUG=n8n*,n8n-nodes-*`)
  - **Error Details**: Shows detailed error information (`N8N_DETAILED_ERROR_OUTPUT=true`)
  - **Development Mode**: Sets `NODE_ENV=development` for enhanced debugging

  **Usage:**
  ```bash
  # Start development with debug logging
  yarn debug

  # Or manually start debug mode
  ./scripts/dev-watch.sh --debug
  ./scripts/restart-n8n.sh --debug
  ```

  **Debug Output Examples:**
  ```
  16:38:21.490   debug   Loaded all credentials and nodes from n8n-nodes-binalyze-air { "credentials": 1, "nodes": 1 }
  16:38:21.662   info    n8n ready on ::, port 5678
  16:38:23.607   info    Version: 1.103.2
  ```

  When debug mode is active, you'll see detailed information about:
  - Node and credential loading
  - API requests and responses
  - Workflow execution steps
  - Error stack traces
  - Internal n8n operations

  ## Testing

  The project includes an end-to-end testing workflow that can be managed using the e2e.js script.

  ### Prerequisites

  1. Create a `.env.local.yml` file in the project root with your credentials:
     ```yaml
     # n8n instance configuration
     N8N:
       INSTANCE_URL: http://127.0.0.1:5678
       API_TOKEN: your_n8n_api_token_here
     ```

  2. Ensure your n8n instance is running and you have a valid API token.

  ### Download Test Workflow

  To download the test workflow from your n8n instance:
  ```bash
  npm run test:download
  # or
  yarn test:download
  ```
  Or using the Node.js script directly:
  ```bash
  node test/e2e.js download
  ```

  This will download the `n8n-nodes-binalyze-air-e2e` workflow and save it to `test/n8n-nodes-binalyze-air-e2e.json`.

  ### Command Options

  Both commands support additional options:

  ```bash
  # Use a custom n8n instance URL
  node test/e2e.js download --url http://n8n.example.com:5678

  # Use a custom workflow name
  node test/e2e.js download --name my-custom-workflow

  # Use a custom output file
  node test/e2e.js download --file my-workflow.json
  ```


  ## TODO
  - Add interACT Library related operations
  - https://docs.google.com/document/d/1zK9XXgfZIB45i4bMrxWRmG5t8FaxwlQZIhDh8-qVmmc/edit?tab=t.0

ai_documentation_summary:
  {"purpose":"This n8n community node integrates with the Binalyze AIR (Automated Incident Response) platform to manage security operations, evidence acquisition, and incident response workflows.","capabilities":["Manage evidence acquisition profiles and tasks","Manage endpoints, tags, and asset status (reboot, shutdown, isolation)","Acquire and compare system baselines","Create, manage, and close incident response cases","Execute remote commands via InterACT sessions","Manage organizations and user assignments","Manage evidence repositories","Monitor and manage task assignments and completion","Create, update, and validate triage rules","Manage user accounts and permissions"],"authentication":"API Key required (Binalyze AIR API Token)","commonUseCases":["Automated incident response workflows","Remote endpoint management and command execution","Evidence collection and acquisition automation","System baseline comparison and reporting","Incident case management and triage"],"limitations":["Community node (not official n8n node)","Requires manual API token creation in Binalyze AIR platform","README truncated (some details may be incomplete)"],"relatedNodes":["n8n-nodes-base-code","n8n-nodes-base-if","n8n-nodes-base-set"]}


node_type: n8n-nodes-understandtechchat.understandTechChat
package_name: n8n-nodes-understandtechchat
display_name: Understand Tech Chat
description: Chat with a model in UnderstandTech
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: understandtech
author_github_url: https://github.com/LavaxMaster/n8n-nodes-starter.git
npm_package_name: n8n-nodes-understandtechchat
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:33.192Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "chat",
      "options": [
        {
          "name": "Chat",
          "value": "chat"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendMessage",
      "options": [
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send message a chat",
          "description": "Send a message to the chat model"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chat"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send message a chat",
      "description": "Send a message to the chat model",
      "resource": "chat"
    }
  ]

npm_readme:
  <p align="center">
    <img src="https://raw.githubusercontent.com/LavaxMaster/n8n-nodes-starter/master/nodes/UnderstandTechChat/understandtech_logo.svg" width="400"/>
  </p>

  # n8n-nodes-understandtechchat

  Custom n8n integration nodes for **UnderstandTechChat**, enabling seamless interaction with your platform via authenticated API requests. Built using the [n8n community node starter template](https://github.com/n8n-io/n8n-nodes-starter).

  ## 🧠 What is UnderstandTechChat?

  UnderstandTechChat is a powerful platform that connects users to their own customly trained model and allows you to chat with your model. This custom n8n node allows you to directly integrate and automate your UnderstandTechChat workflows within n8n.

  ---

  ## 🚀 Features

  - Send messages and interact with the UnderstandTechChat API
  - Use custom credentials and authentication
  - Easily plug into any n8n workflow
  - Includes support for multiple HTTP verbs and custom actions

  ---

  ## 📦 Installation

  To install this node in your local or self-hosted n8n instance:

  ```bash
  npm install n8n-nodes-understandtechchat
  ```

  If you’re using Docker:

  ```Dockerfile
  RUN npm install n8n-nodes-understandtechchat
  ```

  Then restart your n8n instance.

  ---

  ## 📋 Prerequisites

  You’ll need:

  - [Git](https://git-scm.com/downloads)
  - Node.js (v20 or later) and [pnpm](https://pnpm.io/)
  - [n8n installed](https://docs.n8n.io/)
    
  Install globally:
  ```bash
  npm install -g n8n
  ```

  ---

  ## 🛠 Development Setup

  1. Clone this repo:
     ```bash
     git clone https://github.com/LavaxMaster/n8n-nodes-starter.git
     cd n8n-nodes-starter
     ```

  2. Install dependencies:
     ```bash
     npm install
     ```

  3. Build and lint:
     ```bash
     npm run build
     npm run lint
     ```

  4. Customize your logic inside:
     - `nodes/UnderstandTechChat/UnderstandTechChat.node.ts`
     - `credentials/UnderstandTechApiCredentials.credentials.ts`

  ---

  ## 🧪 Testing

  You can run and test the node locally within n8n using:
  ```bash
  n8n
  ```

  Then, open the UI and test the `UnderstandTechChat` node in your workflow.

  Refer to the [official guide](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/) for running custom nodes locally.

  ---

  ## 🌍 Publishing to npm

  When you're ready to share:

  1. Update `package.json` fields:
     - `name`
     - `version`
     - `description`
     - `repository`

  2. Build and lint:
     ```bash
     npm run build
     npm run lint
     ```

  3. Publish:
     ```bash
     npm publish --access public
     ```

  ---

  ## 📄 License

  [MIT License](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n node enables direct integration with the UnderstandTechChat platform, allowing users to send messages and automate interactions with custom-trained AI models within n8n workflows.","capabilities":["Send messages to UnderstandTechChat API","Interact with custom-trained AI models","Support multiple HTTP verbs","Custom credential management","Authentication via API credentials"],"authentication":"API key required via custom credentials","commonUseCases":["Automating customer support with custom AI models","Integrating custom-trained models into existing n8n workflows","Chatbot automation with personalized model training"],"limitations":["Requires Node.js v20 or later for local development","Requires manual installation via npm or Docker (not pre-packaged in n8n marketplace)","Custom node implementation requires development knowledge"],"relatedNodes":["n8n HTTP Request node","n8n Credentials node","n8n Webhook node"]}


