# nodes

node_type: n8n-nodes-trustmarkt.trustmarkt
package_name: n8n-nodes-trustmarkt
display_name: Trustmarkt
description: Interact with the Trustmarkt API to manage reviews, users, case studies, and more
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: trustmarktadmin
author_github_url: https://github.com/Trustmarkt-GmbH/
npm_package_name: n8n-nodes-trustmarkt
npm_version: 0.1.5
community_fetched_at: 2026-04-16T09:43:35.891Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "review",
      "options": [
        {
          "name": "Article",
          "value": "article",
          "description": "Manage articles on your profile"
        },
        {
          "name": "Case Study",
          "value": "caseStudy",
          "description": "Manage case studies on your profile"
        },
        {
          "name": "Inquiry",
          "value": "inquiry",
          "description": "Manage incoming inquiries from potential customers"
        },
        {
          "name": "Me",
          "value": "me",
          "description": "Get information about the authenticated user"
        },
        {
          "name": "Review",
          "value": "review",
          "description": "Manage reviews on your Trustmarkt profile"
        },
        {
          "name": "User",
          "value": "user",
          "description": "Manage users in your company"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an article",
          "routing": {
            "request": {
              "url": "=/articles/{{ $parameter.articleId }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single article by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many articles",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/articles",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of articles from your Trustmarkt profile"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "article"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a case study",
          "routing": {
            "request": {
              "url": "=/case-studies/{{ $parameter.caseStudyId }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single case study by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many case studies",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/case-studies",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of case studies from your Trustmarkt profile"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "caseStudy"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an inquiry",
          "routing": {
            "request": {
              "url": "=/inquiries/{{ $parameter.inquiryId }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single inquiry by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many inquiries",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/inquiries",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of inquiries from your Trustmarkt profile"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inquiry"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get authenticated user",
          "routing": {
            "request": {
              "url": "/me",
              "method": "GET"
            }
          },
          "description": "Retrieve information about the authenticated user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "me"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a review",
          "routing": {
            "request": {
              "url": "=/reviews/{{ $parameter.reviewId }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single review by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many reviews",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/reviews",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of reviews from your Trustmarkt profile"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "review"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user",
          "routing": {
            "request": {
              "url": "=/user/{{ $parameter.userId }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single user by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many users",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/user",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of users from your company"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get an article",
      "routing": {
        "request": {
          "url": "=/articles/{{ $parameter.articleId }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single article by ID",
      "resource": "article"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many articles",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/articles",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of articles from your Trustmarkt profile",
      "resource": "article"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a case study",
      "routing": {
        "request": {
          "url": "=/case-studies/{{ $parameter.caseStudyId }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single case study by ID",
      "resource": "caseStudy"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many case studies",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/case-studies",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of case studies from your Trustmarkt profile",
      "resource": "caseStudy"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an inquiry",
      "routing": {
        "request": {
          "url": "=/inquiries/{{ $parameter.inquiryId }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single inquiry by ID",
      "resource": "inquiry"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many inquiries",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/inquiries",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of inquiries from your Trustmarkt profile",
      "resource": "inquiry"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get authenticated user",
      "routing": {
        "request": {
          "url": "/me",
          "method": "GET"
        }
      },
      "description": "Retrieve information about the authenticated user",
      "resource": "me"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a review",
      "routing": {
        "request": {
          "url": "=/reviews/{{ $parameter.reviewId }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single review by ID",
      "resource": "review"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many reviews",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/reviews",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of reviews from your Trustmarkt profile",
      "resource": "review"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a user",
      "routing": {
        "request": {
          "url": "=/user/{{ $parameter.userId }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single user by ID",
      "resource": "user"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many users",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/user",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of users from your company",
      "resource": "user"
    }
  ]

npm_readme:
  # n8n-nodes-trustmarkt

  This is an n8n community node. It lets you use the [Trustmarkt](https://trustmarkt.de) API in your n8n workflows.

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

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

  ## Installation

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

  ## Operations

  ### Trustmarkt Node

  - **Article**
      - Get an article
      - Get many articles
  - **Case Study**
      - Get a case study
      - Get many case studies
  - **Inquiry**
      - Get an inquiry
      - Get many inquiries
  - **Me**
      - Get authenticated user info
  - **Review**
      - Get a review
      - Get many reviews
  - **User**
      - Get a user
      - Get many users

  ### Trustmarkt Trigger Node

  Starts the workflow when Trustmarkt events occur via webhooks. Events are loaded dynamically from the API.

  ## Credentials

  You need a Trustmarkt API key to authenticate.

  1. Log in to your [Trustmarkt](https://trustmarkt.de) account.
  2. Navigate to your API settings and generate an API key.
  3. In n8n, create new **Trustmarkt API** credentials and paste your API key.

  The node supports Production, Testing, and Custom API environments.

  ## Compatibility

  Compatible with n8n version 1.60.0 or later.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Trustmarkt API documentation](https://www.trustmarkt.de/r/api)


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-04-16 09:43:35
author_name: upload-post
author_github_url: https://github.com/Upload-Post/
npm_package_name: n8n-nodes-upload-post
npm_version: 0.1.45
community_fetched_at: 2026-04-16T09:43:35.892Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "uploads",
      "options": [
        {
          "name": "Upload",
          "value": "uploads"
        },
        {
          "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": "List Users",
          "value": "listUsers",
          "action": "List users",
          "description": "List Upload-Post users (profiles)"
        },
        {
          "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
    }
  ]

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": "List Users",
      "value": "listUsers",
      "action": "List users",
      "description": "List Upload-Post users (profiles)",
      "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"
    }
  ]

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: Facebook, Instagram, LinkedIn, Pinterest, 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: Facebook, Instagram, LinkedIn, Pinterest, 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: Facebook, LinkedIn, Reddit, 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 analytics for uploads.
    - Optional filters: From Date, To Date, User Filter, Platforms.

  ### 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 takes longer than ~59 seconds and the API switches to async mode automatically.

  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.

  ### 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-vge.vgeAidr
package_name: n8n-nodes-vge
display_name: VGE AIDR
description: AI Detection & Response - LLM security gateway
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: tbartel74
author_github_url: https://github.com/Vigil-Guard/vge-n8n-nodes.git
npm_package_name: n8n-nodes-vge
npm_version: 1.0.3
community_fetched_at: 2026-04-16T09:43:35.897Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-vge

  ![n8n version](https://img.shields.io/badge/n8n-%3E%3D1.0.0-blue)
  ![Node.js](https://img.shields.io/badge/node-%3E%3D18.10-green)
  ![License](https://img.shields.io/badge/license-MIT-blue)

  n8n community node for **Vigil Guard Enterprise** - AI Detection & Response (AIDR) for LLM security.

  Protect your AI workflows from prompt injection attacks, PII leakage, harmful content, and policy violations with multi-language support.

  > **Note:** Vigil Guard Enterprise is a **self-hosted solution**. There is no public cloud API. You must deploy VGE on your own infrastructure before using this node.

  ## Overview

  The **VGE AIDR** node acts as a security gateway for LLM workflows, providing real-time protection for both inputs and outputs. Deploy it as a guard before your AI agent to filter malicious prompts, and after your AI agent to prevent sensitive data leakage and harmful content.

  ```
  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
  │ Chat Trigger │───►│  VGE AIDR    │───►│  AI Agent    │───►│  VGE AIDR    │───►│   Response   │
  │              │    │ (Input Guard)│    │  (OpenAI)    │    │(Output Guard)│    │              │
  └──────────────┘    └──────────────┘    └──────────────┘    └──────────────┘    └──────────────┘
                             │                                       │
                             │       VGE Detection Pipeline:         │
                             │  • Prompt injection attacks           │
                             │  • Content moderation (18 categories) │
                             │  • PII detection & redaction          │
                             │  • Policy enforcement                 │
                             └───────────────────────────────────────┘
  ```

  ## Detection Capabilities

  ### Prompt Injection Detection
  Multi-layer detection using heuristics, semantic analysis, and LLM-based classification to identify and block prompt injection attacks, jailbreak attempts, and manipulation techniques.

  ### Content Moderation
  Real-time content moderation with 18 detection categories across 8 languages (EN, PL, FR, ES, IT, PT, TR, RU):

  | Category | Description |
  |----------|-------------|
  | Hate Speech | Content promoting hatred against protected groups |
  | Violence | Content depicting or promoting physical violence |
  | Sexual Content | Explicit or sexually suggestive material |
  | Self-Harm | Content promoting self-harm or suicide |
  | Toxicity | Hostile, aggressive, or inflammatory content |
  | Severe Toxicity | Extremely harmful or dangerous content |
  | Insult | Personal attacks and demeaning language |
  | Vulgar | Profane or obscene language |
  | Crime | Content promoting illegal activities |

  ### PII Detection & Redaction
  Automatic detection and redaction of Personal Identifiable Information:

  | PII Type | Examples |
  |----------|----------|
  | Email | jan.kowalski@firma.pl → `[EMAIL]` |
  | Phone | +48 123 456 789 → `[PHONE]` |
  | Credit Card | 4111-1111-1111-1111 → `[CREDIT_CARD]` |
  | National ID | PESEL, NIP, SSN → `[ID]` |
  | Names | Personal names → `[PERSON]` |
  | Addresses | Physical addresses → `[ADDRESS]` |

  ### Policy Enforcement
  Configurable rules engine for custom security policies with per-category actions (ALLOW, BLOCK, LOG).

  ## Features

  - **Dual Protection** - Guard both inputs (before LLM) and outputs (after LLM)
  - **Multi-Language Support** - Content moderation in 8 languages
  - **Automatic Text Processing** - Returns `guardedText` based on detection decision
  - **PII Redaction** - Automatic sanitization of sensitive data
  - **Fail-Safe Design** - Configurable fail-open behavior prevents workflow disruption
  - **Passthrough Fields** - Preserve session context and custom fields across nodes
  - **Full Response Details** - Optional access to all detection branch results

  ## Installation

  ### Community Nodes (Recommended)

  1. Open your n8n instance
  2. Navigate to **Settings** > **Community Nodes**
  3. Search for `n8n-nodes-vge`
  4. Click **Install**
  5. Restart n8n if prompted

  ### Manual Installation

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

  Then restart n8n.

  ### Docker Development

  Mount the package as a custom node for local development:

  ```yaml
  # docker-compose.yml
  services:
    n8n:
      image: n8nio/n8n:latest
      environment:
        - N8N_CUSTOM_EXTENSIONS=/home/node/custom-nodes
      extra_hosts:
        - "api.vigilguard:host-gateway"
      volumes:
        - n8n_data:/home/node/.n8n
        - /path/to/VGE-n8n:/home/node/custom-nodes/n8n-nodes-vge:ro
  ```

  ## Configuration

  ### Step 1: Add VGE API Credentials

  1. Go to **Settings** > **Credentials**
  2. Click **Add Credential**
  3. Search for **VGE API**
  4. Enter your credentials:

  | Field | Description | Example |
  |-------|-------------|---------|
  | API Key | Your VGE API key | `vg_live_abc123...` or `vg_test_xyz789...` |
  | Base URL | Your VGE instance URL | `https://api.vigilguard.yourdomain.com` |
  | Skip SSL Verification | Whether to skip SSL verification (self-signed only) | `false` |

  ### Step 2: Add VGE AIDR Node

  Drag the **VGE AIDR** node into your workflow and configure the parameters:

  | Parameter | Description | Default |
  |-----------|-------------|---------|
  | Stream Direction | `Input (Before LLM)` or `Output (After LLM)` | Input |
  | Text | The text to analyze | `{{ $json.chatInput }}` |
  | Original Prompt | For output mode - helps detect context manipulation | - |
  | Passthrough Fields | Comma-separated fields to preserve | `sessionId,action` |

  ### Advanced Options

  | Option | Default | Description |
  |--------|---------|-------------|
  | Timeout | 5000ms | Request timeout in milliseconds |
  | Fail Open | true | On API error, continue with original text |
  | Include Full Response | false | Include all detection branch details |
  | Custom Metadata | `{}` | Additional metadata for logging/audit |

  ## TLS and Certificates (Self-Hosted)

  For self-hosted VGE, use a valid TLS certificate and keep SSL verification enabled.

  **Recommended approach:**
  - Issue a certificate for your VGE hostname (FQDN) using a trusted CA or your own internal CA.
  - Ensure the certificate includes the correct SAN (hostname or IP).
  - Install your CA certificate in the system trust store on the host and inside containers that call VGE.
  - For Node.js, you can also set `NODE_EXTRA_CA_CERTS` to point to your CA file inside the container.

  **Emergency option only:**
  The **Skip SSL Verification** credential setting disables certificate checks. Use it only as a temporary workaround when you cannot install a proper certificate. It increases MITM risk and should not be used in production.

  ## Output Data

  The node outputs a single item with detection results:

  ```json
  {
    "sessionId": "abc-123",
    "action": "chat",
    "guardedText": "The processed text based on decision",
    "vgDecision": "ALLOWED",
    "vgScore": 15,
    "vgThreatLevel": "LOW",
    "vgCategories": ["PROMPT_INJECTION", "TOXICITY"],
    "vgRequestId": "550e8400-e29b-41d4-a716-446655440000",
    "vgLatencyMs": 45
  }
  ```

  ### Understanding guardedText

  The `guardedText` field contains different content depending on the detection decision:

  | Decision | guardedText Contains | Use Case |
  |----------|---------------------|----------|
  | `ALLOWED` | Original text (unchanged) | Safe to process |
  | `SANITIZED` | Redacted text with PII removed | Safe after cleanup |
  | `BLOCKED` | Block message explaining rejection | Do not process |

  ### Additional Fields by Decision

  **ALLOWED:**
  - Standard fields only

  **SANITIZED:**
  - `vgOriginalText` - Original text before sanitization
  - `vgRedactedText` - Text with PII markers (e.g., `[EMAIL]`, `[PHONE]`)
  - `vgSanitizedText` - Alternative sanitized version

  **BLOCKED:**
  - `vgBlockMessage` - Human-readable block reason
  - `vgOriginalText` - Original blocked text (for logging)

  ## Example Workflows

  ### Complete Input + Output Guard

  Protect both user input and AI response:

  ```
  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
  │ Chat Trigger │───>│  VGE AIDR    │───>│  AI Agent    │───>│  VGE AIDR    │───>│   Response   │
  │              │    │ (Input Mode) │    │  (OpenAI)    │    │(Output Mode) │    │              │
  └──────────────┘    └──────────────┘    └──────────────┘    └──────────────┘    └──────────────┘
  ```

  **Input Guard Configuration:**
  - Stream Direction: `Input (Before LLM)`
  - Text: `{{ $json.chatInput }}`

  **Output Guard Configuration:**
  - Stream Direction: `Output (After LLM)`
  - Text: `{{ $json.output }}`
  - Original Prompt: `{{ $json.chatInput }}`

  ### Decision-Based Routing

  Route workflow based on detection decision using an IF node:

  ```
                      ┌──────────────┐
                      │  VGE AIDR    │
                      └──────────────┘
                             │
                             v
                      ┌──────────────┐
                      │     IF       │
                      │ vgDecision   │
                      └──────────────┘
                        │    │    │
              ALLOWED   │    │    │  BLOCKED
                        v    │    v
                 ┌──────┐    │  ┌──────────┐
                 │Proceed│   │  │  Error   │
                 │to LLM │    │  │ Response │
                 └──────┘    │  └──────────┘
                             │
                       SANITIZED
                             v
                      ┌──────────────┐
                      │ Log Warning  │
                      │ Then Proceed │
                      └──────────────┘
  ```

  **IF Node Conditions:**
  - Branch 1 (ALLOWED): `{{ $json.vgDecision === "ALLOWED" }}`
  - Branch 2 (SANITIZED): `{{ $json.vgDecision === "SANITIZED" }}`
  - Branch 3 (BLOCKED): `{{ $json.vgDecision === "BLOCKED" }}`

  ## Error Handling

  By default, the node uses **fail-open** behavior to prevent workflow disruption:

  - On API timeout or errors, items pass through with original text
  - Error details are included in the output for logging
  - Set **Fail Open** to `false` to throw errors instead

  **Fail-open output example:**

  ```json
  {
    "guardedText": "original user text",
    "vgError": "Connection timeout",
    "vgFailOpen": true,
    "vgDecision": "ALLOWED"
  }
  ```

  ## Development

  ### Build from Source

  ```bash
  # Clone the repository
  git clone https://github.com/vigilguard/n8n-nodes-vge.git
  cd n8n-nodes-vge

  # Install dependencies
  npm install

  # Build TypeScript
  npm run build

  # Copy icons to dist
  npm run copy:icons

  # Run linter
  npm run lint
  ```

  ### Project Structure

  ```
  n8n-nodes-vge/
  ├── nodes/
  │   └── VgeAidr/
  │       ├── VgeAidr.node.ts    # Main node implementation
  │       └── vge.svg            # Node icon
  ├── credentials/
  │   ├── VgeApi.credentials.ts  # API credentials
  │   └── vge.svg                # Credential icon
  ├── index.ts
  ├── package.json
  └── tsconfig.json
  ```

  ## Requirements

  | Requirement | Version |
  |-------------|---------|
  | Node.js | >= 18.10 |
  | n8n | >= 1.0.0 |
  | Vigil Guard Enterprise | Self-hosted instance required |

  ## Support

  - [Report Issues](https://github.com/vigilguard/n8n-nodes-vge/issues)
  - [Vigil Guard Documentation](https://docs.vigilguard.ai)
  - [API Reference](https://docs.vigilguard.ai/api)

  ## License

  MIT License - see [LICENSE](LICENSE) for details.

  ## Links

  - [Vigil Guard](https://vigilguard.ai)
  - [Python SDK](https://github.com/Vigil-Guard/vge-python-sdk)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

ai_documentation_summary:
  {"purpose":"The VGE AIDR node acts as a security gateway for LLM workflows, providing real-time protection against prompt injection, harmful content, and PII leakage by analyzing both inputs and outputs.","capabilities":["Prompt injection detection using heuristics and semantic analysis","Content moderation across 18 categories in 8 languages","Automatic PII detection and redaction (email, phone, credit card, ID, names, addresses)","Policy enforcement with configurable rules (ALLOW, BLOCK, LOG)","Dual protection mode (input guard before LLM, output guard after LLM)","Fail-safe design with configurable fail-open behavior","Passthrough fields to preserve session context and custom data"],"authentication":"API Key required (VGE API Key) with Base URL configuration for self-hosted instance","commonUseCases":["Protecting AI agent inputs from malicious prompt injection and jailbreak attempts","Preventing PII leakage from AI agent outputs","Moderating content for hate speech, violence, toxicity, and policy violations","Enforcing custom security policies in enterprise LLM workflows"],"limitations":["Requires self-hosted VGE deployment; no public cloud API available","Requires manual installation or Docker configuration for self-hosted environments","Content moderation limited to 8 languages (EN, PL, FR, ES, IT, PT, TR, RU)","Requires n8n version >= 1.0.0 and Node.js >= 18.10"],"relatedNodes":["VGE API Credential node","AI Agent nodes (e.g., OpenAI)","Chat Trigger nodes"]}


node_type: n8n-nodes-browserflow.browserflow
package_name: n8n-nodes-browserflow
display_name: Browserflow for LinkedIn
description: Automate LinkedIn actions with Browserflow for LinkedIn
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: browserflow
author_github_url: https://github.com/Browserflow-io/browserflow-n8n.git
npm_package_name: n8n-nodes-browserflow
npm_version: 1.0.6
community_fetched_at: 2026-04-16T09:43:35.898Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "linkedin",
      "options": [
        {
          "name": "",
          "value": "linkedin"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "checkConnection",
      "options": [
        {
          "name": "Check if a Person Is a Connection",
          "value": "checkConnection",
          "action": "Check if a person is a connection"
        },
        {
          "name": "Export LinkedIn Chat History",
          "value": "getChatHistory",
          "action": "Export linked in chat history"
        },
        {
          "name": "Get Data From A Linkedin Profile",
          "value": "getProfileData",
          "action": "Get data from a linkedin profile"
        },
        {
          "name": "Get Job Result",
          "value": "getJobResult",
          "action": "Get the result of a job"
        },
        {
          "name": "Invite Connections to Follow a LinkedIn Page",
          "value": "inviteToFollowPage",
          "action": "Invite connections to follow a linkedin page"
        },
        {
          "name": "List LinkedIn Connections",
          "value": "listConnections",
          "action": "List your linkedin connections"
        },
        {
          "name": "Scrape LinkedIn Posts",
          "value": "scrapePosts",
          "action": "Scrape linkedin posts"
        },
        {
          "name": "Scrape Profiles From A LinkedIn Post",
          "value": "scrapeProfilesFromPostComments",
          "action": "Scrape profiles from a linkedin post"
        },
        {
          "name": "Scrape Profiles From A LinkedIn Search",
          "value": "scrapeProfilesFromSearch",
          "action": "Scrape profiles from a linkedin search"
        },
        {
          "name": "Send A LinkedIn Connection Invite",
          "value": "sendConnectionInvite",
          "action": "Send a linked in connection invite"
        },
        {
          "name": "Send A LinkedIn Message",
          "value": "sendMessage",
          "action": "Send a linkedin message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "linkedin"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Check if a Person Is a Connection",
      "value": "checkConnection",
      "action": "Check if a person is a connection",
      "resource": "linkedin"
    },
    {
      "name": "Export LinkedIn Chat History",
      "value": "getChatHistory",
      "action": "Export linked in chat history",
      "resource": "linkedin"
    },
    {
      "name": "Get Data From A Linkedin Profile",
      "value": "getProfileData",
      "action": "Get data from a linkedin profile",
      "resource": "linkedin"
    },
    {
      "name": "Get Job Result",
      "value": "getJobResult",
      "action": "Get the result of a job",
      "resource": "linkedin"
    },
    {
      "name": "Invite Connections to Follow a LinkedIn Page",
      "value": "inviteToFollowPage",
      "action": "Invite connections to follow a linkedin page",
      "resource": "linkedin"
    },
    {
      "name": "List LinkedIn Connections",
      "value": "listConnections",
      "action": "List your linkedin connections",
      "resource": "linkedin"
    },
    {
      "name": "Scrape LinkedIn Posts",
      "value": "scrapePosts",
      "action": "Scrape linkedin posts",
      "resource": "linkedin"
    },
    {
      "name": "Scrape Profiles From A LinkedIn Post",
      "value": "scrapeProfilesFromPostComments",
      "action": "Scrape profiles from a linkedin post",
      "resource": "linkedin"
    },
    {
      "name": "Scrape Profiles From A LinkedIn Search",
      "value": "scrapeProfilesFromSearch",
      "action": "Scrape profiles from a linkedin search",
      "resource": "linkedin"
    },
    {
      "name": "Send A LinkedIn Connection Invite",
      "value": "sendConnectionInvite",
      "action": "Send a linked in connection invite",
      "resource": "linkedin"
    },
    {
      "name": "Send A LinkedIn Message",
      "value": "sendMessage",
      "action": "Send a linkedin message",
      "resource": "linkedin"
    }
  ]

npm_readme:
  ![Browserflow Logo](https://s3-eu-west-1.amazonaws.com/tpd/logos/675a07be8d2cf551a4f539e0/0x0.png)

  # Browserflow for LinkedIn

  The **Browserflow Node** allows you to automate LinkedIn interactions using the Browserflow API. This node provides a variety of operations to interact with LinkedIn profiles, scrape data, send connection invites, and more.

  You can get a free API key by registering [here](https://browserflow.io/n8n).

  ---

  [![Watch the video](https://img.youtube.com/vi/rwgCf9XJ1hM/0.jpg)](https://www.youtube.com/watch?v=rwgCf9XJ1hM)


  ## Features

  - **Check Connection**: Check the connection status of a LinkedIn profile.
  - **Get Profile Data**: Retrieve data from a LinkedIn profile.
  - **Send Connection Invite**: Send a connection invite to a LinkedIn profile (with an optional message).
  - **Get Chat History**: Retrieve chat history from a LinkedIn conversation.
  - **Scrape Profiles from Search**: Scrape LinkedIn profiles based on search criteria (e.g., category, search term, location).
  - **Scrape Profiles from Post Comments**: Scrape profiles from LinkedIn post comments and reactions.
  - **Send Message**: Send a direct message to a LinkedIn profile (with a mandatory message).

  ---

  ## Node Operations

  ### 1. Check Connection
  - **LinkedIn URL**: The LinkedIn profile URL to check the connection status.
  - **Endpoint**: `/linkedin-check-connection-status`

  ### 2. Get Profile Data
  - **LinkedIn URL**: The LinkedIn profile URL to retrieve data.
  - **Endpoint**: `/linkedin-profile-data`

  ### 3. Send Connection Invite
  - **LinkedIn URL**: The LinkedIn profile URL to send a connection invite.
  - **Add Message**: Toggle to include a custom message.
  - **Message**: Optional message to include in the invite.
  - **Endpoint**: `/linkedin-connection-invite`

  ### 4. Get Chat History
  - **LinkedIn URL**: The LinkedIn profile URL to retrieve chat history.
  - **Endpoint**: `/linkedin-get-chat-history`

  ### 5. Scrape Profiles from Search
  - **Category**: The category to scrape (persons or companies).
  - **Search Term**: The search term to use for scraping.
  - **Number of Pages**: The number of pages to scrape.
  - **City**: The city to filter the search results.
  - **Country**: The country to filter the search results.
  - **Endpoint**: `/linkedin-scrape-profiles-from-search`

  ### 6. Scrape Profiles from Post Comments
  - **Post URL**: The URL of the LinkedIn post to scrape profiles from.
  - **Add Comments**: Toggle to include comments in the scrape results.
  - **Comments Offset**: The number of comments to skip.
  - **Comments Limit**: The maximum number of comments to scrape.
  - **Add Reactions**: Toggle to include reactions in the scrape results.
  - **Reactions Offset**: The number of reactions to skip.
  - **Reactions Limit**: The maximum number of reactions to scrape.
  - **Endpoint**: `/linkedin-scrape-profiles-from-post-comments`

  ### 7. Send Message
  - **LinkedIn URL**: The LinkedIn profile URL to send a message.
  - **Message**: The message to send (mandatory).
  - **Endpoint**: `/linkedin-send-message`

  ---

  ## Example Workflows

  ### Example 1: Send a Connection Invite
  1. Add the **Browserflow Node** to your workflow.
  2. Set the operation to **Send Connection Invite**.
  3. Provide the LinkedIn profile URL.
  4. Optionally, enable **Add Message** and provide a custom message.
  5. Execute the workflow to send the connection invite.

  ### Example 2: Scrape Profiles from Search
  1. Add the **Browserflow Node** to your workflow.
  2. Set the operation to **Scrape Profiles from Search**.
  3. Provide the search criteria (e.g., category, search term, location).
  4. Execute the workflow to scrape profiles based on the search criteria.

  ### Example 3: Send a Direct Message
  1. Add the **Browserflow Node** to your workflow.
  2. Set the operation to **Send Message**.
  3. Provide the LinkedIn profile URL and the message.
  4. Execute the workflow to send the message.

  ---

ai_documentation_summary:
  {"purpose":"Automates LinkedIn interactions including profile data retrieval, connection management, messaging, and profile scraping via the Browserflow API.","capabilities":["Check connection status of a LinkedIn profile","Retrieve profile data from a LinkedIn URL","Send connection invites with optional custom messages","Retrieve chat history from LinkedIn conversations","Scrape profiles based on search criteria (category, location, search term)","Scrape profiles from LinkedIn post comments and reactions","Send direct messages to LinkedIn profiles"],"authentication":"API key required (obtained via registration at browserflow.io/n8n)","commonUseCases":["Automated lead generation through profile scraping","Automated networking via connection invites","Retrieving employee or contact data from LinkedIn","Monitoring LinkedIn conversations and chat histories"],"limitations":["Requires registration and API key generation from Browserflow","Some operations like sending messages may be subject to LinkedIn's rate limits or terms of service"],"relatedNodes":["n8n-nodes-browserflow.browserflow"]}


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

updated_at: 2026-04-16 09:43:35
author_name: skrapion
author_github_url: https://github.com/Skrapion/
npm_package_name: n8n-nodes-officernd
npm_version: 1.1.2
community_fetched_at: 2026-04-16T09:43:35.899Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "member",
      "options": [
        {
          "name": "Checkin",
          "value": "checkin"
        },
        {
          "name": "Day Pass",
          "value": "dayPass"
        },
        {
          "name": "Fee",
          "value": "fee"
        },
        {
          "name": "Member",
          "value": "member"
        },
        {
          "name": "Membership",
          "value": "membership"
        },
        {
          "name": "Payment",
          "value": "payment"
        },
        {
          "name": "Plan",
          "value": "plan"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a member",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get the data of a single member"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get members",
          "routing": {
            "send": {
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "url": "/members",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
                  },
                  "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
                }
              }
            }
          },
          "description": "Get the data of many members"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a member",
          "routing": {
            "request": {
              "method": "PUT"
            }
          },
          "description": "Update a member"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "member"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a membership",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get the data of a single membership"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get memberships",
          "routing": {
            "send": {
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                },
                {
                  "type": "setKeyValue",
                  "properties": {
                    "_id": "={{ $responseItem._id }}",
                    "name": "={{ $responseItem.name }}",
                    "plan": "={{ $responseItem.plan }}",
                    "type": "={{ $responseItem.type }}",
                    "price": "={{ $responseItem.price }}",
                    "member": "={{ $responseItem.member }}",
                    "source": "={{ $responseItem.source }}",
                    "status": "={{ $responseItem.status }}",
                    "company": "={{ $responseItem.company }}",
                    "deposit": "={{ $responseItem.deposit }}",
                    "endDate": "={{ $responseItem.endDate.slice(0,10) }}",
                    "contract": "={{ $responseItem.contract }}",
                    "discount": "={{ $responseItem.discount }}",
                    "isLocked": "={{ $responseItem.isLocked }}",
                    "location": "={{ $responseItem.location }}",
                    "createdAt": "={{ DateTime.fromISO($responseItem.createdAt).setZone($workflow.timezone, { keepLocalTime: true }).toISO() }}",
                    "createdBy": "={{ $responseItem.createdBy }}",
                    "startDate": "={{ $responseItem.startDate.slice(0,10) }}",
                    "isPersonal": "={{ $responseItem.isPersonal }}",
                    "modifiedAt": "={{ DateTime.fromISO($responseItem.modifiedAt).setZone($workflow.timezone, { keepLocalTime: true }).toISO() }}",
                    "modifiedBy": "={{ $responseItem.modifiedBy }}",
                    "properties": "={{ $responseItem.properties ? $responseItem.properties : undefined }}",
                    "intervalCount": "={{ $responseItem.intervalCount }}",
                    "discountAmount": "={{ $responseItem.discountAmount }}",
                    "discountedPrice": "={{ $responseItem.discountedPrice }}",
                    "calculatedStatus": "={{ $responseItem.calculatedStatus }}",
                    "calculatedDiscountAmount": "={{ $responseItem.calculatedDiscountAmount }}"
                  }
                }
              ]
            },
            "request": {
              "url": "/memberships",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
                  },
                  "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
                }
              }
            }
          },
          "description": "Get the data of many memberships"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "membership"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a set of day passes",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get a single set of day passes"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get sets of day passes",
          "routing": {
            "send": {
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "url": "/passes",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
                  },
                  "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
                }
              }
            }
          },
          "description": "Get many sets of day passes"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dayPass"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a plan",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get a single plan"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get plans",
          "routing": {
            "send": {
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "url": "/plans",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
                  },
                  "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
                }
              }
            }
          },
          "description": "Get many plans"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "plan"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "checkin",
      "options": [
        {
          "name": "Check In a Member",
          "value": "checkin",
          "action": "Check in a member",
          "routing": {
            "request": {
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "checkin"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a payment",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get the data of a single payment"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get payments",
          "routing": {
            "send": {
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "url": "/payments",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
                  },
                  "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
                }
              }
            }
          },
          "description": "Get the data of many payments"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "payment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a fee",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get the data of a single fee"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get fees",
          "routing": {
            "send": {
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "url": "/fees",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
                  },
                  "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
                }
              }
            }
          },
          "description": "Get the data of many fees"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fee"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a member",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get the data of a single member",
      "resource": "member"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get members",
      "routing": {
        "send": {
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "url": "/members",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
              },
              "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
            }
          }
        }
      },
      "description": "Get the data of many members",
      "resource": "member"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a member",
      "routing": {
        "request": {
          "method": "PUT"
        }
      },
      "description": "Update a member",
      "resource": "member"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a membership",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get the data of a single membership",
      "resource": "membership"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get memberships",
      "routing": {
        "send": {
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            },
            {
              "type": "setKeyValue",
              "properties": {
                "_id": "={{ $responseItem._id }}",
                "name": "={{ $responseItem.name }}",
                "plan": "={{ $responseItem.plan }}",
                "type": "={{ $responseItem.type }}",
                "price": "={{ $responseItem.price }}",
                "member": "={{ $responseItem.member }}",
                "source": "={{ $responseItem.source }}",
                "status": "={{ $responseItem.status }}",
                "company": "={{ $responseItem.company }}",
                "deposit": "={{ $responseItem.deposit }}",
                "endDate": "={{ $responseItem.endDate.slice(0,10) }}",
                "contract": "={{ $responseItem.contract }}",
                "discount": "={{ $responseItem.discount }}",
                "isLocked": "={{ $responseItem.isLocked }}",
                "location": "={{ $responseItem.location }}",
                "createdAt": "={{ DateTime.fromISO($responseItem.createdAt).setZone($workflow.timezone, { keepLocalTime: true }).toISO() }}",
                "createdBy": "={{ $responseItem.createdBy }}",
                "startDate": "={{ $responseItem.startDate.slice(0,10) }}",
                "isPersonal": "={{ $responseItem.isPersonal }}",
                "modifiedAt": "={{ DateTime.fromISO($responseItem.modifiedAt).setZone($workflow.timezone, { keepLocalTime: true }).toISO() }}",
                "modifiedBy": "={{ $responseItem.modifiedBy }}",
                "properties": "={{ $responseItem.properties ? $responseItem.properties : undefined }}",
                "intervalCount": "={{ $responseItem.intervalCount }}",
                "discountAmount": "={{ $responseItem.discountAmount }}",
                "discountedPrice": "={{ $responseItem.discountedPrice }}",
                "calculatedStatus": "={{ $responseItem.calculatedStatus }}",
                "calculatedDiscountAmount": "={{ $responseItem.calculatedDiscountAmount }}"
              }
            }
          ]
        },
        "request": {
          "url": "/memberships",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
              },
              "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
            }
          }
        }
      },
      "description": "Get the data of many memberships",
      "resource": "membership"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a set of day passes",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get a single set of day passes",
      "resource": "dayPass"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get sets of day passes",
      "routing": {
        "send": {
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "url": "/passes",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
              },
              "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
            }
          }
        }
      },
      "description": "Get many sets of day passes",
      "resource": "dayPass"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a plan",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get a single plan",
      "resource": "plan"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get plans",
      "routing": {
        "send": {
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "url": "/plans",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
              },
              "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
            }
          }
        }
      },
      "description": "Get many plans",
      "resource": "plan"
    },
    {
      "name": "Check In a Member",
      "value": "checkin",
      "action": "Check in a member",
      "routing": {
        "request": {
          "method": "POST"
        }
      },
      "resource": "checkin"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a payment",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get the data of a single payment",
      "resource": "payment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get payments",
      "routing": {
        "send": {
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "url": "/payments",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
              },
              "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
            }
          }
        }
      },
      "description": "Get the data of many payments",
      "resource": "payment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a fee",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get the data of a single fee",
      "resource": "fee"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get fees",
      "routing": {
        "send": {
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "url": "/fees",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
              },
              "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
            }
          }
        }
      },
      "description": "Get the data of many fees",
      "resource": "fee"
    }
  ]

npm_readme:
  # n8n-nodes-officernd

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

  _OfficeRnD_ is a cloud platform for managing coworking spaces, offices, and memberships. This node allows you to fetch members, memberships, plans, fees, and passes, as well as update and check in members.

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

  [Installation](#installation)
  [Operations](#operations)
  [Triggers](#triggers)
  [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

  The node supports the following operations:

  * Checkins
    * Check in a member
  * Day Passes
    * Get All Sets of Daypasses
    * Get a Set of Daypasses
  * Fees
    * Get Payment
    * Get All Payments
  * Members
    * Get Member
    * Get All Members
    * Update Member
  * Memberships
    * Get Membership
    * Get All Memberships
  * Payments
    * Get Payment
    * Get All Payments
  * Plans
    * Get Plan
    * Get All Plans

  ## Triggers
  * Company
    * Created
    * Updated
    * Removed
  * Company Payment Details
    * Created
  * Removed
  * Member
    * Created
    * Updated
  * Removed
  * Member Payment Details
    * Created
    * Removed
  * Invoice
    * Created
    * Updated
    * Removed
  * Invoice Charge
    * Created
    * Updated
    * Removed
  * Invoice Allocation
    * Created
    * Removed
  * Fee
    * Created
    * Updated
    * Removed
  * Membership
    * Created
    * Updated
    * Removed
  * Booking
    * Created
    * Updated
    * Removed
  * Contract
    * Created
    * Updated
    * Removed
  * Ticket
    * Created
    * Updated
    * Removed
  * Integration
    * Removed
  * Pass
    * Created
    * Updated
  * Occupancy Slot
    * Created
    * Removed

  ## Credentials

  To use this node, you must authenticate with OfficeRnD via an API token:

  Sign in to your OfficeRnD account.

  Navigate to Settings->Data & Accessibility->Developer Tools->Applications and add an application.

  Make sure you enable all the permissions listed in the Scopes field of your credentials. The scopes default to all the permissions you need to use all the features of this node. You can remove some of the scopes if you don't need to use all the features of this node, or add more scopes if you're using the HTTP Request operation to access operations that aren't included in this node.

  Once created, you can click the cog icon next to the application and choose 'View' to get your Client ID and Client Secret for your n8n credentials.

  You'll also need to set your Organization Slug. You can find this in the location bar when logged in to OfficeRnD:

  https://app.officernd.com/admin/<YOUR ORG SLUG>

  ## Compatibility

  Tested against n8n 2.4.8 and the OfficeRnD v2 API.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [OfficeRnD API Documentation](https://developer.officernd.com/reference)


node_type: @flowbie/n8n-nodes-transcribe-video.flowbie
package_name: @flowbie/n8n-nodes-transcribe-video
display_name: Flowbie
description: Upload and transcribe videos using Flowbie API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: flowbie-admin
author_github_url: https://github.com/flowbie-ai/n8n-nodes-transcribe-video.git
npm_package_name: @flowbie/n8n-nodes-transcribe-video
npm_version: 1.0.2
community_fetched_at: 2026-04-16T09:43:35.900Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "video",
      "options": [
        {
          "name": "Video",
          "value": "video"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "transcribe",
      "options": [
        {
          "name": "Transcribe",
          "value": "transcribe",
          "action": "Transcribe a video",
          "description": "Transcribe a video file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "video"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Transcribe",
      "value": "transcribe",
      "action": "Transcribe a video",
      "description": "Transcribe a video file",
      "resource": "video"
    }
  ]

npm_readme:
  # @flowbie/n8n-nodes-transcribe-video

  This is an n8n community node. It lets you transcribe videos using Flowbie AI in your n8n workflows.

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

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

  ## Installation

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

  ## Operations

  - **Transcribe Video**
    - Upload video from binary data (from previous node output)
    - Automatically polls for completion
    - Returns transcription text and timestamped segments

  ## Credentials

  You need a Flowbie API key to use this node.

  ### Getting an API Key

  1. Sign up at [flowbie.ai](https://flowbie.ai)
  2. Go to your dashboard
  3. Navigate to the API Keys section
  4. Click "Create New API Key"
  5. Give it a descriptive name (e.g., "n8n integration")
  6. Copy the generated API key

  ### Configuring in n8n

  1. In n8n, click on "Credentials" in the left sidebar
  2. Click "Add Credential"
  3. Search for "Flowbie API"
  4. Enter your API key
  5. (Optional) Change the API Gateway URL if using a self-hosted instance
  6. Click "Save"

  ## Compatibility

  Compatible with n8n@1.60.0 or later

  ## Usage

  ### Basic Example

  1. Use an HTTP Request node to download a video (or any node that outputs binary data)
  2. Add the Flowbie node to your workflow
  3. Select your Flowbie API credentials
  4. Configure binary property name (default: "data")
  5. Configure polling interval and timeout
  6. Execute the workflow

  ### Example Output

  ```json
  {
    "transcription": "Hello world, this is a test video...",
    "segments": [
      {
        "id": 0,
        "seek": 0,
        "start": 0.0,
        "end": 2.5,
        "text": "Hello world,",
        "tokens": [50364, 50414],
        "temperature": 0.0,
        "avg_logprob": -0.25,
        "compression_ratio": 1.2,
        "no_speech_prob": 0.01
      }
    ],
    "jobId": "job_abc123"
  }
  ```

  ### Accessing Data in Workflow

  Use expressions to access the transcription:
  - Full text: `{{ $json.transcription }}`
  - Segments: `{{ $json.segments }}`
  - First segment text: `{{ $json.segments[0].text }}`
  - Job ID: `{{ $json.jobId }}`

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Flowbie API documentation](https://flowbie.ai/docs)
  * [Flowbie website](https://flowbie.ai)

ai_documentation_summary:
  {"purpose":"This n8n community node uploads and transcribes videos using the Flowbie AI API, returning both full transcription text and timestamped segments.","capabilities":["Upload video from binary data","Automatic polling for transcription completion","Return full transcription text","Return timestamped transcription segments with metadata","Support for custom binary property names","Configurable polling interval and timeout"],"authentication":"API key required","commonUseCases":["Automated video captioning in content workflows","Extracting spoken content from uploaded videos","Integrating video analysis into marketing or support automation pipelines"],"limitations":["Requires a valid Flowbie API key and account","Binary data must be provided via previous node output (e.g., HTTP Request node)","Requires n8n version 1.60.0 or later"],"relatedNodes":["HTTP Request","Credentials","Set Binary Data"]}


node_type: n8n-nodes-veed.veed
package_name: n8n-nodes-veed
display_name: VEED AI Video API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: dmytrobaltak
author_github_url: https://github.com/veedstudio/
npm_package_name: n8n-nodes-veed
npm_version: 1.2.4
community_fetched_at: 2026-04-16T09:43:35.900Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Generate AI talking videos from an image and audio file using the Veed Fabric API. Automate creation of realistic talking videos, animation videos and ai avatars directly in your n8n workflows.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "fabric",
      "options": [
        {
          "name": "Fabric",
          "value": "fabric",
          "description": "Generate talking head videos"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateVideo",
      "options": [
        {
          "name": "Generate Video",
          "value": "generateVideo",
          "action": "Generate a video using fabric model",
          "description": "Generate a talking head video from image and audio"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fabric"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Video",
      "value": "generateVideo",
      "action": "Generate a video using fabric model",
      "description": "Generate a talking head video from image and audio",
      "resource": "fabric"
    }
  ]

npm_readme:
  # n8n-nodes-veed

  Generate AI talking videos from images and audio using the Veed Fabric API. Automate creation of realistic talking videos, animation videos and AI avatars directly in your n8n workflows.

  ## Features

  - **Fabric Video Generation**: Create AI-powered talking head videos from images and audio
  - Powered by [fal.ai](https://fal.ai)
  - Support for multiple model versions (Standard & Fast)
  - Real-time progress tracking via streaming status updates
  - Configurable timeouts

  ## Installation

  ### Community Nodes (Recommended)

  1. Go to **Settings > Community Nodes** in n8n
  2. Search for `veed`
  3. Click **Install**

  ### Manual Installation

  ```bash
  npm install n8n-nodes-veed
  ```

  ## Prerequisites

  - A fal.ai account ([sign up](https://fal.ai))
  - A fal.ai personal API key ([get your key](https://fal.ai/dashboard/keys))
  - n8n version 0.200.0 or higher
  - Node.js 22 or higher

  ## Setup

  1. In n8n, create a new **Fal.ai API** credential
  2. Paste your personal API key
  3. Add the **VEED AI Video API** node to your workflow

  ## Usage

  ### Fabric Video Generation

  Generate realistic talking head videos from a still image and audio file.

  #### Parameters

  **Image URL** (required)

  - Portrait image URL for the talking head
  - Best results: Front-facing photos, clear facial features
  - Supported formats: JPG, PNG, WebP

  **Audio URL** (required)

  - Speech audio URL for lip sync
  - Supported formats: MP3, WAV, M4A, AAC

  **Model Version**

  - **Fabric 1.0**: Lower price
  - **Fabric 1.0 Fast**: Faster generation, higher price

  **Resolution**

  - `480p`: Faster generation
  - `720p`: Higher quality

  **Aspect Ratio**

  - `16:9`: Landscape (YouTube, presentations)
  - `9:16`: Portrait (TikTok, Instagram Stories, Reels)
  - `1:1`: Square (Instagram Feed, LinkedIn)

  #### Options (Advanced)

  **Timeout** (default: 10 minutes)

  - Maximum time to wait for generation
  - Recommended: 10+ minutes for longer videos, 15+ for 720p
  - Range: 1-60 minutes
  - Note: The node uses fal.ai's streaming API for real-time status updates

  ## 🎬 Showcase Workflows

  > **Note:** These workflow examples are available in the repository for local development/testing only. They are not included in the published npm package.

  Ready-to-use workflow templates demonstrating the Veed Fabric node in complete pipelines:

  ### 1. **Simple Text-to-Video** (Beginner-Friendly)

  A minimal workflow to test the Veed Fabric node with pre-made assets.

  **What it does:**

  - Uses demo image and audio URLs
  - Generates a talking head video using Fabric Fast model
  - Shows generation progress and results
  - Formats output with video URL and generation time

  **Import:** `dev-workflow-examples/simple-text-to-video.json`

  ---

  ### 2. **Complete Text-to-Video Ad Generator** (Advanced)

  Full automated pipeline from text prompt to social media post.

  **What it does:**

  ```
  Text Prompt ("animated bear advertising sunglasses")
      ↓
  🤖 OpenAI GPT-4o-mini → Generates ad script + character description
      ↓
  🎨 OpenAI DALL-E 3 → Creates character image
      ↓
  🎙️ StreamElements TTS → Converts script to voice (FREE)
      ↓
  🎬 Veed Fabric → Generates talking head video
      ↓
  🐦 Twitter/X → Posts video with caption
  ```

  **Import:** `dev-workflow-examples/text-to-video-showcase.json`

  **Services used:**

  - 💰 **OpenAI GPT-4o-mini** ($5 free trial, ~$0.01/video) - Script generation
  - 💰 **OpenAI DALL-E 3** ($5 free trial, ~$0.04/image) - Image generation
  - ✅ **StreamElements TTS** (FREE, no API key needed) - Text-to-speech
  - 💰 **fal.ai** (Pay-per-use, ~$0.08-0.20/second) - Video generation
  - ✅ **Twitter/X API** (FREE tier) - Social posting

  ---

  ### 💡 Quick Start with Showcase Workflows

  > **Prerequisites:** These workflows are only available when running the node in development mode. See [Development](#development) section below for setup instructions.

  1. **Import a workflow:**

     ```
     n8n (localhost:5678) → Workflows → Import from File → Select JSON from dev-workflow-examples/
     ```

  2. **Set up credentials:**
     - **Simple workflow:** Only fal.ai API key required
     - **Advanced workflow:** OpenAI API key, Twitter OAuth2 credentials, fal.ai API key

  3. **Customize:**
     - **Simple:** Replace imageUrl and audioUrl in "📝 Set Demo Image & Audio" node
     - **Advanced:** Change adPrompt in "📝 Set Ad Concept" node
     - Adjust video settings (resolution, aspect ratio)

  4. **Execute and wait:**
     - Click "Test Workflow" button
     - Watch progress in execution logs

  5. **Use your video:**
     - Get video URL from output
     - Download and use in your content
     - Automatically posted to Twitter (advanced workflow)

  ## Performance

  - **Generation time**: Depending on audio length and video resolution
  - **Progress updates**: Real-time progress shown in execution logs
  - **Timeout handling**: Configurable timeout with clear error messages

  ## Troubleshooting

  Having issues? See the [Troubleshooting Guide](docs/TROUBLESHOOTING.md) for detailed solutions to common problems:

  - Authentication errors
  - Generation timeouts
  - Invalid URL errors
  - Rate limits
  - Network issues
  - And more...

  ## Compatibility

  - **n8n**: 0.200.0+
  - **Node.js**: 22+
  - **Supported platforms**: Linux, macOS, Windows

  ## Resources

  - [Veed Fabric Model on fal.ai](https://fal.ai/models/veed/fabric-1.0)
  - [Fabric Playground](https://fal.ai/models/veed/fabric-1.0/playground)
  - [fal.ai Documentation](https://docs.fal.ai)
  - [Report Issues](https://github.com/veedstudio/n8n-nodes-veed/issues)
  - [n8n Community Forum](https://community.n8n.io)

  ## Development

  ### Build

  ```bash
  pnpm build
  ```

  ### Test

  ```bash
  pnpm test          # Run all tests
  pnpm test:watch    # Watch mode
  pnpm test:coverage # Coverage report
  ```

  ### Local Development

  ```bash
  pnpm dev  # Starts n8n with your node at localhost:5678
  ```

  For detailed testing instructions, see [docs/TESTING.md](docs/TESTING.md)

  ## Contributing

  Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests
  5. Run `pnpm lint:fix`
  6. Submit a pull request

  ### n8n Community Node Restrictions

  When contributing, be aware of n8n's community node restrictions:

  - **❌ No `setTimeout` or `setInterval`**: These global timers are not allowed.
  - **✅ Required properties**: All nodes must have `usableAsTool` property
  - **✅ Credentials**: Must have `icon` and `test` properties

  ## License

  MIT

  ## Support

  For issues and questions:

  - [GitHub Issues](https://github.com/veedstudio/n8n-nodes-veed/issues)
  - [n8n Community Forum](https://community.n8n.io)

  ---

ai_documentation_summary:
  {"purpose":"Generates AI-powered talking head videos from images and audio files using the Veed Fabric API, supporting multiple model versions and real-time progress tracking.","capabilities":["Create talking head videos from image and audio","Generate animation videos and AI avatars","Support for Fabric 1.0 and Fabric 1.0 Fast models","Configurable resolution (480p, 720p)","Configurable aspect ratios (16:9, 9:16, 1:1)","Real-time progress tracking via streaming status updates","Configurable timeouts (1-60 minutes)"],"authentication":"API key required (fal.ai personal API key)","commonUseCases":["Text-to-video content creation","Social media video generation (TikTok, Instagram, YouTube)","Automated ad generation pipelines","AI avatar creation for presentations"],"limitations":["Requires fal.ai account and API key","Requires n8n version 0.200.0 or higher","Requires Node.js 22 or higher","Showcase workflows only available in development mode","Generation time depends on audio length and video resolution"],"relatedNodes":["fal.ai API","OpenAI GPT-4o-mini","OpenAI DALL-E 3","StreamElements TTS","Twitter/X API"]}


node_type: @mendable/n8n-nodes-firecrawl.firecrawl
package_name: @mendable/n8n-nodes-firecrawl
display_name: Firecrawl
description: Scrape, crawl, map, search, and extract structured data from websites using Firecrawl API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs: "={{[\"main\"]}}"
updated_at: 2026-04-16 09:43:35
author_name: cpeffer
author_github_url: https://github.com/mendableai/n8n-nodes-firecrawl.git
npm_package_name: @mendable/n8n-nodes-firecrawl
npm_version: 2.1.0
community_fetched_at: 2026-04-16T09:43:35.901Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "Scraping",
      "options": [
        {
          "name": "Account",
          "value": "Account"
        },
        {
          "name": "Agent",
          "value": "Agent"
        },
        {
          "name": "Browser",
          "value": "Browser"
        },
        {
          "name": "Crawling",
          "value": "Crawling"
        },
        {
          "name": "Extract (Legacy)",
          "value": "Extract"
        },
        {
          "name": "Interact",
          "value": "Interact"
        },
        {
          "name": "Map & Search",
          "value": "MapSearch"
        },
        {
          "name": "Scraping",
          "value": "Scraping"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrape",
      "options": [
        {
          "name": "/scrape",
          "value": "scrape",
          "action": "/scrape",
          "routing": {
            "request": {
              "url": "=/scrape",
              "method": "POST"
            }
          }
        },
        {
          "name": "Batch scrape multiple URLs simultaneously",
          "value": "batchScrape",
          "action": "Batch scrape multiple URLs simultaneously",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "setKeyValue",
                  "properties": {
                    "data": "={{$response.body}}"
                  }
                }
              ]
            },
            "request": {
              "url": "/batch/scrape",
              "method": "POST"
            }
          }
        },
        {
          "name": "Get batch scrape status",
          "value": "batchScrapeStatus",
          "action": "Get batch scrape status",
          "routing": {
            "request": {
              "method": "GET"
            }
          }
        },
        {
          "name": "Get batch scrape errors",
          "value": "batchScrapeErrors",
          "action": "Get batch scrape errors",
          "routing": {
            "request": {
              "method": "GET"
            }
          }
        },
        {
          "name": "Cancel batch scrape job",
          "value": "cancelBatchScrape",
          "action": "Cancel batch scrape job",
          "routing": {
            "request": {
              "method": "DELETE"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Scraping"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "crawl",
      "options": [
        {
          "name": "Crawl a website and scrape all pages",
          "value": "crawl",
          "action": "Crawl a website and scrape all pages",
          "routing": {
            "request": {
              "url": "=/crawl",
              "method": "POST"
            }
          }
        },
        {
          "name": "Get crawl status",
          "value": "getCrawlStatus",
          "action": "Get crawl status",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "setKeyValue",
                  "properties": {
                    "data": "={{$response.body}}"
                  }
                }
              ]
            },
            "request": {
              "method": "GET"
            }
          }
        },
        {
          "name": "Cancel a crawl job",
          "value": "cancelCrawl",
          "action": "Cancel a crawl job",
          "routing": {
            "request": {
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Get crawl errors",
          "value": "getCrawlErrors",
          "action": "Get crawl errors",
          "routing": {
            "request": {
              "method": "GET"
            }
          }
        },
        {
          "name": "List active crawls",
          "value": "crawlActive",
          "action": "List active crawls",
          "routing": {
            "request": {
              "url": "=/crawl/active",
              "method": "GET"
            }
          }
        },
        {
          "name": "Preview crawl params from prompt",
          "value": "crawlParamsPreview",
          "action": "Preview crawl params from prompt",
          "routing": {
            "request": {
              "url": "=/crawl/params-preview"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Crawling"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "agent",
      "options": [
        {
          "name": "Agent - AI-powered web data extraction (waits for completion)",
          "value": "agent",
          "action": "Agent - AI-powered web data extraction (waits for completion)",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/agent",
              "method": "POST"
            }
          }
        },
        {
          "name": "Agent (Async) - Returns job ID for manual polling",
          "value": "agentAsync",
          "action": "Agent (Async) - Returns job ID for manual polling",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "setKeyValue",
                  "properties": {
                    "data": "={{$response.body}}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/agent",
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Agent Status",
          "value": "getAgentStatus",
          "action": "Get Agent Status",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "setKeyValue",
                  "properties": {
                    "data": "={{$response.body}}"
                  }
                }
              ]
            },
            "request": {
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Agent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "map",
      "options": [
        {
          "name": "/map",
          "value": "map",
          "action": "/map",
          "routing": {
            "request": {
              "url": "=/map",
              "method": "POST"
            }
          }
        },
        {
          "name": "/search",
          "value": "search",
          "action": "/search",
          "routing": {
            "request": {
              "url": "=/search",
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "MapSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "browserContext",
      "options": [
        {
          "name": "Browser context",
          "value": "browserContext",
          "action": "Browser context",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/browser",
              "method": "GET"
            }
          }
        },
        {
          "name": "Create browser session",
          "value": "browserCreate",
          "action": "Create browser session",
          "routing": {
            "request": {
              "url": "=/browser",
              "method": "POST"
            }
          }
        },
        {
          "name": "Execute browser code",
          "value": "browserExecute",
          "action": "Execute browser code",
          "routing": {
            "request": {
              "method": "POST"
            }
          }
        },
        {
          "name": "List browser sessions",
          "value": "browserList",
          "action": "List browser sessions",
          "routing": {
            "request": {
              "url": "=/browser",
              "method": "GET"
            }
          }
        },
        {
          "name": "Delete browser session",
          "value": "browserDelete",
          "action": "Delete browser session",
          "routing": {
            "request": {
              "method": "DELETE"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Browser"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "interactContext",
      "options": [
        {
          "name": "Interact context",
          "value": "interactContext",
          "action": "Interact context",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/browser",
              "method": "GET"
            }
          }
        },
        {
          "name": "Execute interaction",
          "value": "interact",
          "action": "Execute interaction",
          "routing": {
            "request": {
              "method": "POST"
            }
          }
        },
        {
          "name": "Stop interaction",
          "value": "interactStop",
          "action": "Stop interaction",
          "routing": {
            "request": {
              "method": "DELETE"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Interact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "teamCreditUsage",
      "options": [
        {
          "name": "Get team credit usage",
          "value": "teamCreditUsage",
          "action": "Get team credit usage",
          "routing": {
            "request": {
              "url": "=/team/credit-usage",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get historical credit usage",
          "value": "creditUsageHistorical",
          "action": "Get historical credit usage",
          "routing": {
            "request": {
              "url": "=/team/credit-usage/historical",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get team token usage",
          "value": "teamTokenUsage",
          "action": "Get team token usage",
          "routing": {
            "request": {
              "url": "=/team/token-usage",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get historical token usage",
          "value": "teamTokenUsageHistorical",
          "action": "Get historical token usage",
          "routing": {
            "request": {
              "url": "=/team/token-usage/historical",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get team queue status",
          "value": "teamQueueStatus",
          "action": "Get team queue status",
          "routing": {
            "request": {
              "url": "=/team/queue-status",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "extract",
      "options": [
        {
          "name": "Extract structured data from websites using AI",
          "value": "extract",
          "action": "Extract structured data from websites using AI",
          "routing": {
            "request": {
              "url": "=/extract",
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Extract Status",
          "value": "getExtractStatus",
          "action": "Get Extract Status",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "setKeyValue",
                  "properties": {
                    "data": "={{$response.body}}"
                  }
                }
              ]
            },
            "request": {
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Extract"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /scrape",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Scraping"
          ],
          "operation": [
            "scrape"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /batchScrape",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Scraping"
          ],
          "operation": [
            "batchScrape"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /batchScrapeStatus",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Scraping"
          ],
          "operation": [
            "batchScrapeStatus"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /batchScrapeErrors",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Scraping"
          ],
          "operation": [
            "batchScrapeErrors"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "DELETE /cancelBatchScrape",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Scraping"
          ],
          "operation": [
            "cancelBatchScrape"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /crawl",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Crawling"
          ],
          "operation": [
            "crawl"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /getCrawlStatus",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Crawling"
          ],
          "operation": [
            "getCrawlStatus"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "DELETE /cancelCrawl",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Crawling"
          ],
          "operation": [
            "cancelCrawl"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /getCrawlErrors",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Crawling"
          ],
          "operation": [
            "getCrawlErrors"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /crawlActive",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Crawling"
          ],
          "operation": [
            "crawlActive"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /crawlParamsPreview",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Crawling"
          ],
          "operation": [
            "crawlParamsPreview"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /agent",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Agent"
          ],
          "operation": [
            "agent"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /agentAsync",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Agent"
          ],
          "operation": [
            "agentAsync"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /getAgentStatus",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Agent"
          ],
          "operation": [
            "getAgentStatus"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /map",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "MapSearch"
          ],
          "operation": [
            "map"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /search",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "MapSearch"
          ],
          "operation": [
            "search"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /teamCreditUsage",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Account"
          ],
          "operation": [
            "teamCreditUsage"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /creditUsageHistorical",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Account"
          ],
          "operation": [
            "creditUsageHistorical"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /teamTokenUsage",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Account"
          ],
          "operation": [
            "teamTokenUsage"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /teamTokenUsageHistorical",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Account"
          ],
          "operation": [
            "teamTokenUsageHistorical"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /teamQueueStatus",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Account"
          ],
          "operation": [
            "teamQueueStatus"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /browserCreate",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Browser"
          ],
          "operation": [
            "browserCreate"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /browserExecute",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Browser"
          ],
          "operation": [
            "browserExecute"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /browserList",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Browser"
          ],
          "operation": [
            "browserList"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "DELETE /browserDelete",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Browser"
          ],
          "operation": [
            "browserDelete"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /interact",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Interact"
          ],
          "operation": [
            "interact"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "DELETE /interactStop",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Interact"
          ],
          "operation": [
            "interactStop"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /extract",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Extract"
          ],
          "operation": [
            "extract"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /getExtractStatus",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Extract"
          ],
          "operation": [
            "getExtractStatus"
          ]
        }
      }
    }
  ]

operations:
  [
    {
      "name": "/scrape",
      "value": "scrape",
      "action": "/scrape",
      "routing": {
        "request": {
          "url": "=/scrape",
          "method": "POST"
        }
      },
      "resource": "Scraping"
    },
    {
      "name": "Batch scrape multiple URLs simultaneously",
      "value": "batchScrape",
      "action": "Batch scrape multiple URLs simultaneously",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "setKeyValue",
              "properties": {
                "data": "={{$response.body}}"
              }
            }
          ]
        },
        "request": {
          "url": "/batch/scrape",
          "method": "POST"
        }
      },
      "resource": "Scraping"
    },
    {
      "name": "Get batch scrape status",
      "value": "batchScrapeStatus",
      "action": "Get batch scrape status",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "resource": "Scraping"
    },
    {
      "name": "Get batch scrape errors",
      "value": "batchScrapeErrors",
      "action": "Get batch scrape errors",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "resource": "Scraping"
    },
    {
      "name": "Cancel batch scrape job",
      "value": "cancelBatchScrape",
      "action": "Cancel batch scrape job",
      "routing": {
        "request": {
          "method": "DELETE"
        }
      },
      "resource": "Scraping"
    },
    {
      "name": "Crawl a website and scrape all pages",
      "value": "crawl",
      "action": "Crawl a website and scrape all pages",
      "routing": {
        "request": {
          "url": "=/crawl",
          "method": "POST"
        }
      },
      "resource": "Crawling"
    },
    {
      "name": "Get crawl status",
      "value": "getCrawlStatus",
      "action": "Get crawl status",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "setKeyValue",
              "properties": {
                "data": "={{$response.body}}"
              }
            }
          ]
        },
        "request": {
          "method": "GET"
        }
      },
      "resource": "Crawling"
    },
    {
      "name": "Cancel a crawl job",
      "value": "cancelCrawl",
      "action": "Cancel a crawl job",
      "routing": {
        "request": {
          "method": "DELETE"
        }
      },
      "resource": "Crawling"
    },
    {
      "name": "Get crawl errors",
      "value": "getCrawlErrors",
      "action": "Get crawl errors",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "resource": "Crawling"
    },
    {
      "name": "List active crawls",
      "value": "crawlActive",
      "action": "List active crawls",
      "routing": {
        "request": {
          "url": "=/crawl/active",
          "method": "GET"
        }
      },
      "resource": "Crawling"
    },
    {
      "name": "Preview crawl params from prompt",
      "value": "crawlParamsPreview",
      "action": "Preview crawl params from prompt",
      "routing": {
        "request": {
          "url": "=/crawl/params-preview"
        }
      },
      "resource": "Crawling"
    },
    {
      "name": "Agent - AI-powered web data extraction (waits for completion)",
      "value": "agent",
      "action": "Agent - AI-powered web data extraction (waits for completion)",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/agent",
          "method": "POST"
        }
      },
      "resource": "Agent"
    },
    {
      "name": "Agent (Async) - Returns job ID for manual polling",
      "value": "agentAsync",
      "action": "Agent (Async) - Returns job ID for manual polling",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "setKeyValue",
              "properties": {
                "data": "={{$response.body}}"
              }
            }
          ]
        },
        "request": {
          "url": "=/agent",
          "method": "POST"
        }
      },
      "resource": "Agent"
    },
    {
      "name": "Get Agent Status",
      "value": "getAgentStatus",
      "action": "Get Agent Status",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "setKeyValue",
              "properties": {
                "data": "={{$response.body}}"
              }
            }
          ]
        },
        "request": {
          "method": "GET"
        }
      },
      "resource": "Agent"
    },
    {
      "name": "/map",
      "value": "map",
      "action": "/map",
      "routing": {
        "request": {
          "url": "=/map",
          "method": "POST"
        }
      },
      "resource": "MapSearch"
    },
    {
      "name": "/search",
      "value": "search",
      "action": "/search",
      "routing": {
        "request": {
          "url": "=/search",
          "method": "POST"
        }
      },
      "resource": "MapSearch"
    },
    {
      "name": "Browser context",
      "value": "browserContext",
      "action": "Browser context",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/browser",
          "method": "GET"
        }
      },
      "resource": "Browser"
    },
    {
      "name": "Create browser session",
      "value": "browserCreate",
      "action": "Create browser session",
      "routing": {
        "request": {
          "url": "=/browser",
          "method": "POST"
        }
      },
      "resource": "Browser"
    },
    {
      "name": "Execute browser code",
      "value": "browserExecute",
      "action": "Execute browser code",
      "routing": {
        "request": {
          "method": "POST"
        }
      },
      "resource": "Browser"
    },
    {
      "name": "List browser sessions",
      "value": "browserList",
      "action": "List browser sessions",
      "routing": {
        "request": {
          "url": "=/browser",
          "method": "GET"
        }
      },
      "resource": "Browser"
    },
    {
      "name": "Delete browser session",
      "value": "browserDelete",
      "action": "Delete browser session",
      "routing": {
        "request": {
          "method": "DELETE"
        }
      },
      "resource": "Browser"
    },
    {
      "name": "Interact context",
      "value": "interactContext",
      "action": "Interact context",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/browser",
          "method": "GET"
        }
      },
      "resource": "Interact"
    },
    {
      "name": "Execute interaction",
      "value": "interact",
      "action": "Execute interaction",
      "routing": {
        "request": {
          "method": "POST"
        }
      },
      "resource": "Interact"
    },
    {
      "name": "Stop interaction",
      "value": "interactStop",
      "action": "Stop interaction",
      "routing": {
        "request": {
          "method": "DELETE"
        }
      },
      "resource": "Interact"
    },
    {
      "name": "Get team credit usage",
      "value": "teamCreditUsage",
      "action": "Get team credit usage",
      "routing": {
        "request": {
          "url": "=/team/credit-usage",
          "method": "GET"
        }
      },
      "resource": "Account"
    },
    {
      "name": "Get historical credit usage",
      "value": "creditUsageHistorical",
      "action": "Get historical credit usage",
      "routing": {
        "request": {
          "url": "=/team/credit-usage/historical",
          "method": "GET"
        }
      },
      "resource": "Account"
    },
    {
      "name": "Get team token usage",
      "value": "teamTokenUsage",
      "action": "Get team token usage",
      "routing": {
        "request": {
          "url": "=/team/token-usage",
          "method": "GET"
        }
      },
      "resource": "Account"
    },
    {
      "name": "Get historical token usage",
      "value": "teamTokenUsageHistorical",
      "action": "Get historical token usage",
      "routing": {
        "request": {
          "url": "=/team/token-usage/historical",
          "method": "GET"
        }
      },
      "resource": "Account"
    },
    {
      "name": "Get team queue status",
      "value": "teamQueueStatus",
      "action": "Get team queue status",
      "routing": {
        "request": {
          "url": "=/team/queue-status",
          "method": "GET"
        }
      },
      "resource": "Account"
    },
    {
      "name": "Extract structured data from websites using AI",
      "value": "extract",
      "action": "Extract structured data from websites using AI",
      "routing": {
        "request": {
          "url": "=/extract",
          "method": "POST"
        }
      },
      "resource": "Extract"
    },
    {
      "name": "Get Extract Status",
      "value": "getExtractStatus",
      "action": "Get Extract Status",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "setKeyValue",
              "properties": {
                "data": "={{$response.body}}"
              }
            }
          ]
        },
        "request": {
          "method": "GET"
        }
      },
      "resource": "Extract"
    }
  ]

npm_readme:
  # n8n-nodes-firecrawl 🔥

  This is an n8n community node. It lets you use **[Firecrawl](https://firecrawl.dev)** in your n8n workflows.

  > 🔥 Turn entire websites into LLM-ready markdown or structured data. Scrape, crawl and extract with a single API.

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

  [Installation](#installation)
  [Operations](#operations)
  [AI Agent Tool Usage](#ai-agent-tool-usage)
  [Credentials](#credentials)
  [Compatibility](#compatibility)
  [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 **Firecrawl** node supports the following operations:

  ### Search
  - Search and optionally scrape search results

  ### Map
  - Input a website and get all the website urls

  ### Scrape
  - Scrapes a URL and get its content in LLM-ready format (markdown, structured data via LLM Extract, screenshot, html)

  ### Crawl
  - Scrapes all the URLs of a web page and return content in LLM-ready format

  ### Batch Scrape
  - Start a batch job to scrape multiple URLs at once

  ### Batch Scrape Status
  - Get the status/result of a batch scrape job by ID

  ### Batch Scrape Errors
  - Retrieve errors for a batch scrape job by ID

  ### Crawl Active
  - List all currently active crawl jobs for your team

  ### Crawl Params Preview
  - Preview crawl parameters generated from a natural-language prompt

  ### Cancel Crawl
  - Cancel a running crawl job by ID

  ### Get Crawl Errors
  - Retrieve errors for a crawl job by ID

  ### Get Crawl Status
  - Check the current status of a crawl job

  ### Extract Data
  - Get structured data from single page, multiple pages or entire websites with AI

  ### Get Extract Status
  - Get the current status of an extraction job

  ### Team Token Usage
  - Get remaining and plan tokens for the authenticated team

  ### Team Credit Usage
  - Get remaining and plan credits for the authenticated team

  ### Historical Credit Usage
  - Get historical credit usage for your team

  ### Historical Token Usage
  - Get historical token usage for your team

  ### Team Queue Status
  - Get your team's current queue load (waiting, active, max concurrency)

  ## AI Agent Tool Usage

  This node can be used as a tool with n8n's AI Agent node, allowing AI agents to scrape, crawl, and extract data from websites dynamically.

  ### Requirements

  - **n8n version 1.79.0 or higher** is required for AI tool support
  - Set the environment variable `N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true` to enable community nodes as AI tools

  ### Docker Configuration

  ```yaml
  version: '3'
  services:
    n8n:
      image: n8nio/n8n
      environment:
        - N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
      ports:
        - "5678:5678"
      volumes:
        - ~/.n8n:/home/node/.n8n
  ```

  ### Using with AI Agents

  1. Add the **AI Agent** node to your workflow
  2. Connect the **Firecrawl** node as a tool input to the AI Agent
  3. The AI agent can now dynamically decide when and how to use Firecrawl operations

  ### Dynamic Parameters with $fromAI()

  When using Firecrawl as an AI tool, you can let the AI agent decide parameter values dynamically using the `$fromAI()` function. Click the "Let the model define this parameter" button next to any field to enable this feature.

  Example expressions:
  ```javascript
  // Let AI decide the URL to scrape
  {{ $fromAI("url", "The URL to scrape", "string") }}

  // Let AI decide the search query
  {{ $fromAI("query", "Search query for finding relevant pages", "string") }}

  // Let AI decide whether to include subdomains
  {{ $fromAI("includeSubdomains", "Whether to include subdomains", "boolean", false) }}
  ```

  ### Best Practices for AI Tool Usage

  1. **Use clear operation names**: The AI agent uses operation descriptions to decide when to use each tool
  2. **Provide context in prompts**: When using the Extract operation, provide clear prompts to guide data extraction
  3. **Set reasonable limits**: Configure default limits to prevent excessive API usage
  4. **Use the Map operation first**: For unknown sites, use Map to discover URLs before scraping

  ## Credentials

  To use the Firecrawl node, you need to:

  1. Sign up for a Firecrawl account at [https://firecrawl.dev](https://firecrawl.dev)
  2. Get your API key from the Firecrawl dashboard
  3. In n8n, add your Firecrawl API key to the node's credentials

  > [!CAUTION]  
  > The API key should be kept secure and never shared publicly

  ## Compatibility

  - **Minimum n8n version: 1.79.0** (required for AI tool support)
  - Tested against n8n versions: 1.79.0+
  - Node.js version: 18 or higher

  > **Note**: If you don't need AI tool support, earlier versions of n8n may work, but 1.79.0+ is recommended.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [Firecrawl Documentation](https://firecrawl.dev/docs)
  * [Firecrawl API Reference](https://docs.firecrawl.dev/api-reference/introduction)

  ## Version history

  ### 1.1.0
  - **AI Agent Tool Support**: Node can now be used as a tool with n8n's AI Agent node
    - Added `usableAsTool: true` to enable tool mode
    - Enhanced all field descriptions for better AI context understanding
    - Supports `$fromAI()` function for dynamic parameter values
  - Updated minimum n8n version requirement to 1.79.0
  - Improved operation descriptions for clearer AI agent decision making

  ### 1.0.6
  - Add support for additional Firecrawl endpoints:
    - Batch Scrape (start/status/errors)
    - Crawl Active
    - Crawl Params Preview
    - Cancel Crawl 
    - Get Crawl Errors
    - Team Token Usage
    - Team Credit Usage
    - Historical Credit Usage
    - Historical Token Usage
    - Team Queue Status
  - Wire new operations into the node and align with Firecrawl API v2

  ### 1.0.5
  - API version updated to [/v2](https://docs.firecrawl.dev/migrate-to-v2)
  - Unified sitemap configuration parameters in Map operation
  - Replaced `ignoreSitemap` and `sitemapOnly` with unified `sitemap` parameter
  - `sitemap` parameter now accepts: "include" (default), "only", or "skip"

  ### 1.0.4
  - Add additional fields property for custom data in Firecrawl API nodes

  ### 1.0.2
  - Add integration parameter in all endpoint calls

  ### 1.0.1
  - Support for Search operation

  ### 1.0.0
  - Initial release
  - Support for all basic Firecrawl operations:
    - Map URLs
    - Scrape URL
    - Crawl Website
    - Get Crawl Status
    - Extract Data
    - Get Extract Status
  - Basic error handling and response processing
  - Support for custom body options

  ## More information

  Refer to our [documentation on creating nodes](https://docs.n8n.io/integrations/creating-nodes/) for detailed information on building your own nodes.

ai_documentation_summary:
  {"purpose":"This n8n community node integrates with the Firecrawl API to scrape, crawl, map, search, and extract structured data from websites, including support for AI agent tool usage.","capabilities":["Search and scrape search results","Map website URLs","Scrape single URLs in LLM-ready format (markdown, structured data, screenshot, HTML)","Crawl entire websites","Batch scrape multiple URLs","Monitor batch scrape job status and errors","Manage crawl jobs (active, status, errors, cancellation)","Extract structured data from pages or websites using AI","Monitor team token and credit usage","Check team queue status"],"authentication":"API key required (Firecrawl API key)","commonUseCases":["Web scraping for content aggregation","Website mapping and URL discovery","Structured data extraction for AI workflows","Full website crawling for documentation or analysis","AI agent-driven dynamic web data collection"],"limitations":["Requires n8n version 1.79.0 or higher for AI tool support","AI tool usage requires environment variable N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true","Minimum Node.js version 18 required","Community node (may have different update frequency than official nodes)"],"relatedNodes":["AI Agent node","HTTP Request node","Code node"]}


node_type: @klardaten/n8n-nodes-datevconnect.accounting
package_name: @klardaten/n8n-nodes-datevconnect
display_name: Klardaten DATEVconnect: Accounting
description: Interact with DATEV Accounting API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: johannespfeiffer
author_github_url: https://github.com/Klardaten/n8n-nodes-datevconnect.git
npm_package_name: @klardaten/n8n-nodes-datevconnect
npm_version: 1.0.12
community_fetched_at: 2026-04-16T09:43:35.902Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "client",
      "options": [
        {
          "name": "Account Posting",
          "value": "accountPosting",
          "description": "Operations on account postings"
        },
        {
          "name": "Accounting Sequence",
          "value": "accountingSequence",
          "description": "Operations on accounting sequences"
        },
        {
          "name": "Accounting Statistic",
          "value": "accountingStatistics",
          "description": "Operations on monthly accounting sequence statistics"
        },
        {
          "name": "Accounting Sums and Balance",
          "value": "accountingSumsAndBalances",
          "description": "Operations on accounting balance sheet and P&L data"
        },
        {
          "name": "Accounting Transaction Key",
          "value": "accountingTransactionKeys",
          "description": "Operations on accounting transaction key master data"
        },
        {
          "name": "Accounts Payable",
          "value": "accountsPayable",
          "description": "Operations on accounts payable (open items)"
        },
        {
          "name": "Accounts Receivable",
          "value": "accountsReceivable",
          "description": "Operations on accounts receivable (open items)"
        },
        {
          "name": "Business Partner",
          "value": "businessPartners",
          "description": "Operations on debitors (customers) and creditors (suppliers)"
        },
        {
          "name": "Client",
          "value": "client",
          "description": "Operations on accounting clients/companies"
        },
        {
          "name": "Cost Center Property",
          "value": "costCenterProperties",
          "description": "Operations on cost center properties and attributes"
        },
        {
          "name": "Cost Centers/Unit",
          "value": "costCentersUnits",
          "description": "Operations on cost centers and cost units"
        },
        {
          "name": "Cost Sequence",
          "value": "costSequences",
          "description": "Operations on cost accounting sequences"
        },
        {
          "name": "Cost System",
          "value": "costSystems",
          "description": "Operations on cost accounting systems"
        },
        {
          "name": "Fiscal Year",
          "value": "fiscalYear",
          "description": "Operations on fiscal years"
        },
        {
          "name": "General Ledger Account",
          "value": "generalLedgerAccounts",
          "description": "Operations on chart of accounts"
        },
        {
          "name": "Internal Cost Service",
          "value": "internalCostServices",
          "description": "Operations on internal cost service allocations"
        },
        {
          "name": "Posting Proposal",
          "value": "postingProposals",
          "description": "Operations on posting proposal rules and batch processing"
        },
        {
          "name": "Stocktaking Data",
          "value": "stocktakingData",
          "description": "Operations on inventory stocktaking data"
        },
        {
          "name": "Terms of Payment",
          "value": "termsOfPayment",
          "description": "Operations on payment terms and conditions"
        },
        {
          "name": "Various Addresses",
          "value": "variousAddresses",
          "description": "Operations on various business partner addresses"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many clients",
          "description": "Retrieve a list of many clients/companies"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a client",
          "description": "Retrieve a specific client/company"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "client"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many fiscal years",
          "description": "Retrieve a list of fiscal years for a client"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a fiscal year",
          "description": "Retrieve a specific fiscal year"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fiscalYear"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many accounts receivable",
          "description": "Retrieve a list of accounts receivable (uncondensed)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an account receivable",
          "description": "Retrieve a specific account receivable"
        },
        {
          "name": "Get Condensed",
          "value": "getCondensed",
          "action": "Get condensed accounts receivable",
          "description": "Retrieve a condensed list of accounts receivable"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accountsReceivable"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many accounts payable",
          "description": "Retrieve a list of accounts payable (uncondensed)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an account payable",
          "description": "Retrieve a specific account payable"
        },
        {
          "name": "Get Condensed",
          "value": "getCondensed",
          "action": "Get condensed accounts payable",
          "description": "Retrieve a condensed list of accounts payable"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accountsPayable"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many account postings",
          "description": "Retrieve a list of account postings"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an account posting",
          "description": "Retrieve a specific account posting"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accountPosting"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an accounting sequence",
          "description": "Create an accounting sequence"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an accounting sequence",
          "description": "Retrieve a specific accounting sequence"
        },
        {
          "name": "Get Accounting Record",
          "value": "getAccountingRecord",
          "action": "Get specific accounting record from sequence",
          "description": "Retrieve a specific accounting record from a sequence"
        },
        {
          "name": "Get Accounting Records",
          "value": "getAccountingRecords",
          "action": "Get accounting records from sequence",
          "description": "Retrieve all accounting records of a specific processed sequence"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many accounting sequences",
          "description": "Retrieve a list of processed accounting sequences"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accountingSequence"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getRulesIncoming",
      "options": [
        {
          "name": "Batch - Cash Register",
          "value": "batchCashRegister",
          "action": "Process batch of cash register posting proposals",
          "description": "Process batch of cash register posting proposals"
        },
        {
          "name": "Batch - Incoming",
          "value": "batchIncoming",
          "action": "Process batch of incoming invoice posting proposals",
          "description": "Process batch of incoming invoice posting proposals"
        },
        {
          "name": "Batch - Outgoing",
          "value": "batchOutgoing",
          "action": "Process batch of outgoing invoice posting proposals",
          "description": "Process batch of outgoing invoice posting proposals"
        },
        {
          "name": "Get Rule - Cash Register",
          "value": "getRuleCashRegister",
          "action": "Get a posting proposal rule for cash register",
          "description": "Retrieve a specific posting proposal rule for cash register"
        },
        {
          "name": "Get Rule - Incoming",
          "value": "getRuleIncoming",
          "action": "Get a posting proposal rule for incoming invoices",
          "description": "Retrieve a specific posting proposal rule for incoming invoices"
        },
        {
          "name": "Get Rule - Outgoing",
          "value": "getRuleOutgoing",
          "action": "Get a posting proposal rule for outgoing invoices",
          "description": "Retrieve a specific posting proposal rule for outgoing invoices"
        },
        {
          "name": "Get Rules - Cash Register",
          "value": "getRulesCashRegister",
          "action": "Get posting proposal rules for cash register",
          "description": "Retrieve posting proposal rules for cash register"
        },
        {
          "name": "Get Rules - Incoming",
          "value": "getRulesIncoming",
          "action": "Get posting proposal rules for incoming invoices",
          "description": "Retrieve posting proposal rules for incoming invoices"
        },
        {
          "name": "Get Rules - Outgoing",
          "value": "getRulesOutgoing",
          "action": "Get posting proposal rules for outgoing invoices",
          "description": "Retrieve posting proposal rules for outgoing invoices"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "postingProposals"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many accounting sums and balances",
          "description": "Retrieve a list of accounting sums and balances"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an accounting sums and balances entry",
          "description": "Retrieve a specific account from sums and balances"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accountingSumsAndBalances"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getDebitors",
      "options": [
        {
          "name": "Create Creditor",
          "value": "createCreditor",
          "action": "Create a creditor",
          "description": "Create a new creditor"
        },
        {
          "name": "Create Debitor",
          "value": "createDebitor",
          "action": "Create a debitor",
          "description": "Create a new debitor"
        },
        {
          "name": "Get Creditor",
          "value": "getCreditor",
          "action": "Get a creditor",
          "description": "Retrieve a specific creditor"
        },
        {
          "name": "Get Creditors",
          "value": "getCreditors",
          "action": "Get many creditors",
          "description": "Retrieve a list of creditors (suppliers)"
        },
        {
          "name": "Get Debitor",
          "value": "getDebitor",
          "action": "Get a debitor",
          "description": "Retrieve a specific debitor"
        },
        {
          "name": "Get Debitors",
          "value": "getDebitors",
          "action": "Get many debitors",
          "description": "Retrieve a list of debitors (customers)"
        },
        {
          "name": "Get Next Available Creditor",
          "value": "getNextAvailableCreditor",
          "action": "Get next available creditor number",
          "description": "Get the next available creditor account number"
        },
        {
          "name": "Get Next Available Debitor",
          "value": "getNextAvailableDebitor",
          "action": "Get next available debitor number",
          "description": "Get the next available debitor account number"
        },
        {
          "name": "Update Creditor",
          "value": "updateCreditor",
          "action": "Update a creditor",
          "description": "Update an existing creditor"
        },
        {
          "name": "Update Debitor",
          "value": "updateDebitor",
          "action": "Update a debitor",
          "description": "Update an existing debitor"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "businessPartners"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many general ledger accounts",
          "description": "Retrieve a list of general ledger accounts"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a general ledger account",
          "description": "Retrieve a specific general ledger account"
        },
        {
          "name": "Get Utilized",
          "value": "getUtilized",
          "action": "Get utilized general ledger accounts",
          "description": "Retrieve a list of utilized general ledger accounts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "generalLedgerAccounts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many terms of payment",
          "description": "Retrieve a list of terms of payment"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a term of payment",
          "description": "Retrieve a specific term of payment"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a term of payment",
          "description": "Create a new term of payment"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a term of payment",
          "description": "Update an existing term of payment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "termsOfPayment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many stocktaking data",
          "description": "Retrieve a list of stocktaking data"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a stocktaking data entry",
          "description": "Retrieve a specific stocktaking data entry"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a stocktaking data entry",
          "description": "Create a new stocktaking data entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "stocktakingData"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many cost systems",
          "description": "Retrieve a list of cost systems"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a cost system",
          "description": "Retrieve a specific cost system"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "costSystems"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many cost centers units",
          "description": "Retrieve a list of cost centers/units"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a cost center unit",
          "description": "Retrieve a specific cost center/unit"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "costCentersUnits"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many cost center properties",
          "description": "Retrieve a list of cost center properties"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a cost center property",
          "description": "Retrieve a specific cost center property"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "costCenterProperties"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create internal cost service",
          "description": "Create internal cost service allocation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "internalCostServices"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many cost sequences",
          "description": "Retrieve a list of cost sequences"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a cost sequence",
          "description": "Retrieve a specific cost sequence"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a cost sequence",
          "description": "Create a new cost sequence"
        },
        {
          "name": "Get Cost Accounting Records",
          "value": "getCostAccountingRecords",
          "action": "Get cost accounting records",
          "description": "Retrieve cost accounting records for a sequence"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "costSequences"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many accounting statistics",
          "description": "Retrieve accounting statistics data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accountingStatistics"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many accounting transaction keys",
          "description": "Retrieve a list of accounting transaction keys"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an accounting transaction key",
          "description": "Retrieve a specific accounting transaction key"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accountingTransactionKeys"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many various addresses",
          "description": "Retrieve a list of various addresses"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a various address",
          "description": "Retrieve a specific various address"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a various address",
          "description": "Create a new various address"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "variousAddresses"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many clients",
      "description": "Retrieve a list of many clients/companies",
      "resource": "client"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a client",
      "description": "Retrieve a specific client/company",
      "resource": "client"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many fiscal years",
      "description": "Retrieve a list of fiscal years for a client",
      "resource": "fiscalYear"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a fiscal year",
      "description": "Retrieve a specific fiscal year",
      "resource": "fiscalYear"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many accounts receivable",
      "description": "Retrieve a list of accounts receivable (uncondensed)",
      "resource": "accountsReceivable"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an account receivable",
      "description": "Retrieve a specific account receivable",
      "resource": "accountsReceivable"
    },
    {
      "name": "Get Condensed",
      "value": "getCondensed",
      "action": "Get condensed accounts receivable",
      "description": "Retrieve a condensed list of accounts receivable",
      "resource": "accountsReceivable"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many accounts payable",
      "description": "Retrieve a list of accounts payable (uncondensed)",
      "resource": "accountsPayable"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an account payable",
      "description": "Retrieve a specific account payable",
      "resource": "accountsPayable"
    },
    {
      "name": "Get Condensed",
      "value": "getCondensed",
      "action": "Get condensed accounts payable",
      "description": "Retrieve a condensed list of accounts payable",
      "resource": "accountsPayable"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many account postings",
      "description": "Retrieve a list of account postings",
      "resource": "accountPosting"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an account posting",
      "description": "Retrieve a specific account posting",
      "resource": "accountPosting"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an accounting sequence",
      "description": "Create an accounting sequence",
      "resource": "accountingSequence"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an accounting sequence",
      "description": "Retrieve a specific accounting sequence",
      "resource": "accountingSequence"
    },
    {
      "name": "Get Accounting Record",
      "value": "getAccountingRecord",
      "action": "Get specific accounting record from sequence",
      "description": "Retrieve a specific accounting record from a sequence",
      "resource": "accountingSequence"
    },
    {
      "name": "Get Accounting Records",
      "value": "getAccountingRecords",
      "action": "Get accounting records from sequence",
      "description": "Retrieve all accounting records of a specific processed sequence",
      "resource": "accountingSequence"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many accounting sequences",
      "description": "Retrieve a list of processed accounting sequences",
      "resource": "accountingSequence"
    },
    {
      "name": "Batch - Cash Register",
      "value": "batchCashRegister",
      "action": "Process batch of cash register posting proposals",
      "description": "Process batch of cash register posting proposals",
      "resource": "postingProposals"
    },
    {
      "name": "Batch - Incoming",
      "value": "batchIncoming",
      "action": "Process batch of incoming invoice posting proposals",
      "description": "Process batch of incoming invoice posting proposals",
      "resource": "postingProposals"
    },
    {
      "name": "Batch - Outgoing",
      "value": "batchOutgoing",
      "action": "Process batch of outgoing invoice posting proposals",
      "description": "Process batch of outgoing invoice posting proposals",
      "resource": "postingProposals"
    },
    {
      "name": "Get Rule - Cash Register",
      "value": "getRuleCashRegister",
      "action": "Get a posting proposal rule for cash register",
      "description": "Retrieve a specific posting proposal rule for cash register",
      "resource": "postingProposals"
    },
    {
      "name": "Get Rule - Incoming",
      "value": "getRuleIncoming",
      "action": "Get a posting proposal rule for incoming invoices",
      "description": "Retrieve a specific posting proposal rule for incoming invoices",
      "resource": "postingProposals"
    },
    {
      "name": "Get Rule - Outgoing",
      "value": "getRuleOutgoing",
      "action": "Get a posting proposal rule for outgoing invoices",
      "description": "Retrieve a specific posting proposal rule for outgoing invoices",
      "resource": "postingProposals"
    },
    {
      "name": "Get Rules - Cash Register",
      "value": "getRulesCashRegister",
      "action": "Get posting proposal rules for cash register",
      "description": "Retrieve posting proposal rules for cash register",
      "resource": "postingProposals"
    },
    {
      "name": "Get Rules - Incoming",
      "value": "getRulesIncoming",
      "action": "Get posting proposal rules for incoming invoices",
      "description": "Retrieve posting proposal rules for incoming invoices",
      "resource": "postingProposals"
    },
    {
      "name": "Get Rules - Outgoing",
      "value": "getRulesOutgoing",
      "action": "Get posting proposal rules for outgoing invoices",
      "description": "Retrieve posting proposal rules for outgoing invoices",
      "resource": "postingProposals"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many accounting sums and balances",
      "description": "Retrieve a list of accounting sums and balances",
      "resource": "accountingSumsAndBalances"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an accounting sums and balances entry",
      "description": "Retrieve a specific account from sums and balances",
      "resource": "accountingSumsAndBalances"
    },
    {
      "name": "Create Creditor",
      "value": "createCreditor",
      "action": "Create a creditor",
      "description": "Create a new creditor",
      "resource": "businessPartners"
    },
    {
      "name": "Create Debitor",
      "value": "createDebitor",
      "action": "Create a debitor",
      "description": "Create a new debitor",
      "resource": "businessPartners"
    },
    {
      "name": "Get Creditor",
      "value": "getCreditor",
      "action": "Get a creditor",
      "description": "Retrieve a specific creditor",
      "resource": "businessPartners"
    },
    {
      "name": "Get Creditors",
      "value": "getCreditors",
      "action": "Get many creditors",
      "description": "Retrieve a list of creditors (suppliers)",
      "resource": "businessPartners"
    },
    {
      "name": "Get Debitor",
      "value": "getDebitor",
      "action": "Get a debitor",
      "description": "Retrieve a specific debitor",
      "resource": "businessPartners"
    },
    {
      "name": "Get Debitors",
      "value": "getDebitors",
      "action": "Get many debitors",
      "description": "Retrieve a list of debitors (customers)",
      "resource": "businessPartners"
    },
    {
      "name": "Get Next Available Creditor",
      "value": "getNextAvailableCreditor",
      "action": "Get next available creditor number",
      "description": "Get the next available creditor account number",
      "resource": "businessPartners"
    },
    {
      "name": "Get Next Available Debitor",
      "value": "getNextAvailableDebitor",
      "action": "Get next available debitor number",
      "description": "Get the next available debitor account number",
      "resource": "businessPartners"
    },
    {
      "name": "Update Creditor",
      "value": "updateCreditor",
      "action": "Update a creditor",
      "description": "Update an existing creditor",
      "resource": "businessPartners"
    },
    {
      "name": "Update Debitor",
      "value": "updateDebitor",
      "action": "Update a debitor",
      "description": "Update an existing debitor",
      "resource": "businessPartners"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many general ledger accounts",
      "description": "Retrieve a list of general ledger accounts",
      "resource": "generalLedgerAccounts"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a general ledger account",
      "description": "Retrieve a specific general ledger account",
      "resource": "generalLedgerAccounts"
    },
    {
      "name": "Get Utilized",
      "value": "getUtilized",
      "action": "Get utilized general ledger accounts",
      "description": "Retrieve a list of utilized general ledger accounts",
      "resource": "generalLedgerAccounts"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many terms of payment",
      "description": "Retrieve a list of terms of payment",
      "resource": "termsOfPayment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a term of payment",
      "description": "Retrieve a specific term of payment",
      "resource": "termsOfPayment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a term of payment",
      "description": "Create a new term of payment",
      "resource": "termsOfPayment"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a term of payment",
      "description": "Update an existing term of payment",
      "resource": "termsOfPayment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many stocktaking data",
      "description": "Retrieve a list of stocktaking data",
      "resource": "stocktakingData"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a stocktaking data entry",
      "description": "Retrieve a specific stocktaking data entry",
      "resource": "stocktakingData"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a stocktaking data entry",
      "description": "Create a new stocktaking data entry",
      "resource": "stocktakingData"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many cost systems",
      "description": "Retrieve a list of cost systems",
      "resource": "costSystems"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a cost system",
      "description": "Retrieve a specific cost system",
      "resource": "costSystems"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many cost centers units",
      "description": "Retrieve a list of cost centers/units",
      "resource": "costCentersUnits"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a cost center unit",
      "description": "Retrieve a specific cost center/unit",
      "resource": "costCentersUnits"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many cost center properties",
      "description": "Retrieve a list of cost center properties",
      "resource": "costCenterProperties"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a cost center property",
      "description": "Retrieve a specific cost center property",
      "resource": "costCenterProperties"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create internal cost service",
      "description": "Create internal cost service allocation",
      "resource": "internalCostServices"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many cost sequences",
      "description": "Retrieve a list of cost sequences",
      "resource": "costSequences"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a cost sequence",
      "description": "Retrieve a specific cost sequence",
      "resource": "costSequences"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a cost sequence",
      "description": "Create a new cost sequence",
      "resource": "costSequences"
    },
    {
      "name": "Get Cost Accounting Records",
      "value": "getCostAccountingRecords",
      "action": "Get cost accounting records",
      "description": "Retrieve cost accounting records for a sequence",
      "resource": "costSequences"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many accounting statistics",
      "description": "Retrieve accounting statistics data",
      "resource": "accountingStatistics"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many accounting transaction keys",
      "description": "Retrieve a list of accounting transaction keys",
      "resource": "accountingTransactionKeys"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an accounting transaction key",
      "description": "Retrieve a specific accounting transaction key",
      "resource": "accountingTransactionKeys"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many various addresses",
      "description": "Retrieve a list of various addresses",
      "resource": "variousAddresses"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a various address",
      "description": "Retrieve a specific various address",
      "resource": "variousAddresses"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a various address",
      "description": "Create a new various address",
      "resource": "variousAddresses"
    }
  ]

npm_readme:
  # n8n DATEVConnect

  This repository provides custom n8n nodes for integrating with the DATEVconnect APIs. It requires the [Klardaten DATEVconnect Gateway](https://klardaten.com/products/datevconnect-gateway) to be set up.

  ## Available Nodes

  | Node                           | Description                                                                                                             |
  | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
  | `Accounting`                   | Access DATEV Accounting API for clients, fiscal years, accounts receivable, account postings, and accounting sequences. |
  | `MasterData`                   | Fetches master data entities from DATEV using the configured credentials.                                               |
  | `Document Management`          | Access DATEV Document Management or DMS for documents, structure items, property templates.                             |
  | `Order Management`             | Read and manage orders, suborders, invoices, fees, and related employee data.                                           |
  | `Identity & Access Management` | Manage SCIM-based DATEV IAM resources such as service configuration, schemas, users, and groups.                        |

  Refer to the node descriptions inside the n8n editor for input parameters and output structure.

  ## Installation

  ### Through the n8n UI

  1. Navigate to **Settings → Community Nodes → Install** inside your n8n instance.
  2. Enter `@klardaten/n8n-nodes-datevconnect` as the package name.
  3. Confirm the warning prompt and restart n8n so the nodes are registered.

  ### Manual (filesystem) installation

  ```bash
  cd ~/.n8n
  npm install @klardaten/n8n-nodes-datevconnect
  ```

  Copy or symlink the contents of the installed `node_modules/@klardaten/n8n-nodes-datevconnect/dist/{nodes,credentials}` directories into your `~/.n8n/custom/` folder if you prefer the legacy custom-nodes workflow, then restart n8n.

  ## Development

  1. **Install dependencies**
     ```bash
     npm install
     ```
  2. **Build** (optional during development; n8n compiles on the fly)
     ```bash
     npm run dev
     ```

  ## Required Credentials

  You need a Klardaten account and an instance id (of the DATEV instance you want to access).

  - `email`
  - `password`
  - `clientInstanceId`

  ## Running Tests

  Use the npm test runner to execute the automated tests:

  ```bash
  npm test
  ```

  ## Usage in n8n

  1. Create a new workflow in n8n.
  2. Add the **Klardaten DATEVconnect: Master Data** or **Accounting** etc. node and choose the credential you configured.
  3. Select the desired operation (e.g., list client entries) and configure any filters.
  4. Execute the workflow or schedule it as part of a larger automation.

  All nodes authenticate using the stored credentials and interact with their respective DATEVconnect APIs.

  ## Additional Notes

  DATEV provides endpoint reference details under

  - [Accounting](https://developer.datev.de/en/product-detail/accounting/1.7.4/reference)
  - [Client Master Data](https://developer.datev.de/en/product-detail/client-master-data/1.7.0/reference).
  - [Document Management](https://developer.datev.de/en/product-detail/document-management/2.3.0/reference)
  - [Order Management](https://developer.datev.de/en/product-detail/order-management/1.4.7/reference)
  - [Identity & Access Management – User Administration](https://developer.datev.de/en/product-detail/identity-and-access-management-user-administration/1.1.2/reference)

ai_documentation_summary:
  {"purpose":"This n8n node enables interaction with the DATEV Accounting API to manage accounting data, fiscal years, and financial records.","capabilities":["Access DATEV Accounting API","Retrieve client information","Manage fiscal years","Handle accounts receivable","Process account postings","Manage accounting sequences","Filter and list client entries"],"authentication":"Email and Password with Client Instance ID","commonUseCases":["Automated financial data extraction","Accounting record synchronization","Client master data management","Automated invoice processing"],"limitations":["Requires Klardaten DATEVconnect Gateway setup","Requires a valid Klardaten account and DATEV instance ID","Requires n8n restart after installation"],"relatedNodes":["Klardaten DATEVconnect: Master Data","Klardaten DATEVconnect: Document Management","Klardaten DATEVconnect: Order Management","Klardaten DATEVconnect: Identity & Access Management"]}


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

updated_at: 2026-04-16 09:43:35
author_name: outscraper-api
author_github_url: https://github.com/outscraper/
npm_package_name: n8n-nodes-outscraper
npm_version: 0.2.1
community_fetched_at: 2026-04-16T09:43:35.903Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "googleMaps",
      "options": [
        {
          "name": "AI Scraper",
          "value": "aiScraper"
        },
        {
          "name": "Airbnb",
          "value": "airbnb"
        },
        {
          "name": "AppStore",
          "value": "appStore"
        },
        {
          "name": "Booking",
          "value": "booking"
        },
        {
          "name": "Company Insight",
          "value": "companyInsights"
        },
        {
          "name": "Company Website Finder",
          "value": "companyWebsiteFinder"
        },
        {
          "name": "Emails & Contact",
          "value": "emailsAndContacts"
        },
        {
          "name": "Expedia",
          "value": "expedia"
        },
        {
          "name": "G2 Review",
          "value": "g2Reviews"
        },
        {
          "name": "Geocoding",
          "value": "geocoding"
        },
        {
          "name": "GetApp Review",
          "value": "getAppReviews"
        },
        {
          "name": "Google Map",
          "value": "googleMaps"
        },
        {
          "name": "Google Search",
          "value": "googleSearch"
        },
        {
          "name": "Indeed",
          "value": "indeed"
        },
        {
          "name": "Phone Identity Finder",
          "value": "phoneIdentityFinder"
        },
        {
          "name": "Phones Owner",
          "value": "phonesOwners"
        },
        {
          "name": "Product Hunt",
          "value": "productHunt"
        },
        {
          "name": "Similarweb",
          "value": "similarweb"
        },
        {
          "name": "Target Review",
          "value": "targetReviews"
        },
        {
          "name": "TikTok Profile",
          "value": "tiktokProfiles"
        },
        {
          "name": "TripAdvisor",
          "value": "tripadvisor"
        },
        {
          "name": "Trustpilot",
          "value": "trustpilot"
        },
        {
          "name": "Twitter Profile",
          "value": "twitterProfiles"
        },
        {
          "name": "Universal AI Scraper",
          "value": "universalScraper"
        },
        {
          "name": "Walmart Review",
          "value": "walmartReviews"
        },
        {
          "name": "WebPage Screenshoter",
          "value": "webPageScreenshoter"
        },
        {
          "name": "Whitepages Addresses Scraper",
          "value": "whitepagesAddresses"
        },
        {
          "name": "Yellow Pages Search",
          "value": "yellowPagesSearch"
        },
        {
          "name": "Yelp",
          "value": "yelp"
        },
        {
          "name": "YouTube",
          "value": "youtube"
        },
        {
          "name": "Zillow",
          "value": "zillow"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search for businesses on google maps",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/maps/search-v3",
              "method": "GET"
            }
          },
          "description": "Search for businesses on Google Maps"
        },
        {
          "name": "Get Reviews",
          "value": "reviews",
          "action": "Get reviews for a place on google maps",
          "routing": {
            "request": {
              "url": "/maps/reviews-v3",
              "method": "GET"
            }
          },
          "description": "Get reviews for a place on Google Maps"
        },
        {
          "name": "Get Photos",
          "value": "photos",
          "action": "Get photos for a place on google maps",
          "routing": {
            "request": {
              "url": "/maps/photos-v3",
              "method": "GET"
            }
          },
          "description": "Get photos for a place on Google Maps"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "googleMaps"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search on google",
          "routing": {
            "request": {
              "url": "/google-search-v3",
              "method": "GET"
            }
          },
          "description": "Search on Google"
        },
        {
          "name": "Search Careers",
          "value": "searchCareers",
          "action": "Search for career listings on google",
          "routing": {
            "request": {
              "url": "/google-search-careers",
              "method": "GET"
            }
          },
          "description": "Search for career listings on Google"
        },
        {
          "name": "Search Events",
          "value": "searchEvents",
          "action": "Search for events on google",
          "routing": {
            "request": {
              "url": "/google-search-events",
              "method": "GET"
            }
          },
          "description": "Search for events on Google"
        },
        {
          "name": "Search Images",
          "value": "searchImages",
          "action": "Search for images on google",
          "routing": {
            "request": {
              "url": "/google-search-images-v2",
              "method": "GET"
            }
          },
          "description": "Search for images on Google"
        },
        {
          "name": "Search News",
          "value": "searchNews",
          "action": "Search for news on google",
          "routing": {
            "request": {
              "url": "/google-search-news",
              "method": "GET"
            }
          },
          "description": "Search for news on Google"
        },
        {
          "name": "Search Shopping",
          "value": "searchShopping",
          "action": "Search for shopping products on google",
          "routing": {
            "request": {
              "url": "/google-search-shopping",
              "method": "GET"
            }
          },
          "description": "Search for shopping products on Google"
        },
        {
          "name": "Search Videos",
          "value": "searchVideos",
          "action": "Search for videos on google",
          "routing": {
            "request": {
              "url": "/google-search-videos",
              "method": "GET"
            }
          },
          "description": "Search for videos on Google"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "googleSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Get Reviews",
          "value": "reviews",
          "action": "Get reviews from G2",
          "routing": {
            "request": {
              "url": "/g2/reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from G2"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "g2Reviews"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "business",
      "options": [
        {
          "name": "Get Business Info",
          "value": "business",
          "action": "Get business information from trustpilot",
          "routing": {
            "request": {
              "url": "/trustpilot",
              "method": "GET"
            }
          },
          "description": "Get business information from Trustpilot"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search businesses on trustpilot",
          "routing": {
            "request": {
              "url": "/trustpilot/search",
              "method": "GET"
            }
          },
          "description": "Search businesses on Trustpilot"
        },
        {
          "name": "Get Reviews",
          "value": "reviews",
          "action": "Get reviews from trustpilot",
          "routing": {
            "request": {
              "url": "/trustpilot/reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from Trustpilot"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "trustpilot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Get Reviews",
          "value": "reviews",
          "action": "Get reviews from trip advisor",
          "routing": {
            "request": {
              "url": "/tripadvisor-reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from TripAdvisor"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search on trip advisor",
          "routing": {
            "request": {
              "url": "/tripadvisor-search",
              "method": "GET"
            }
          },
          "description": "Search on TripAdvisor"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tripadvisor"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search on expedia",
          "routing": {
            "request": {
              "url": "/expedia/search",
              "method": "GET"
            }
          },
          "description": "Search on Expedia"
        },
        {
          "name": "Get Reviews",
          "value": "reviews",
          "action": "Get reviews from expedia",
          "routing": {
            "request": {
              "url": "/expedia/reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from Expedia"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "expedia"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search for videos on you tube",
          "description": "Search for videos on YouTube"
        },
        {
          "name": "Channel",
          "value": "channel",
          "action": "Get you tube channel information",
          "description": "Get YouTube channel information"
        },
        {
          "name": "Comments",
          "value": "comments",
          "action": "Get comments from you tube videos",
          "description": "Get comments from YouTube videos"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "youtube"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search on yelp",
          "routing": {
            "request": {
              "url": "/yelp-search",
              "method": "GET"
            }
          },
          "description": "Search on Yelp"
        },
        {
          "name": "Business",
          "value": "business",
          "action": "Get business information from yelp",
          "routing": {
            "request": {
              "url": "/yelp-business",
              "method": "GET"
            }
          },
          "description": "Get business information from Yelp"
        },
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from yelp businesses",
          "routing": {
            "request": {
              "url": "/yelp-reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from Yelp businesses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "yelp"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from product hunt",
          "routing": {
            "request": {
              "url": "/producthunt-reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from Product Hunt"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "productHunt"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "jobSearch",
      "options": [
        {
          "name": "Job Search",
          "value": "jobSearch",
          "action": "Get jobs from indeed",
          "routing": {
            "request": {
              "url": "/indeed-jobs",
              "method": "GET"
            }
          },
          "description": "Get jobs from Indeed"
        },
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from indeed companies",
          "routing": {
            "request": {
              "url": "/indeed-reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from Indeed companies"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "indeed"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search on booking",
          "routing": {
            "request": {
              "url": "/booking/search",
              "method": "GET"
            }
          },
          "description": "Search results from Booking.com"
        },
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from booking",
          "routing": {
            "request": {
              "url": "/booking/reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from Booking.com hotels"
        },
        {
          "name": "Prices",
          "value": "prices",
          "action": "Get prices from booking",
          "routing": {
            "request": {
              "url": "/booking/prices",
              "method": "GET"
            }
          },
          "description": "Get prices from Booking.com hotels"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "booking"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search on zillow",
          "routing": {
            "request": {
              "url": "/zillow/search",
              "method": "GET"
            }
          },
          "description": "Returns listings from Zillow"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "zillow"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from appstore",
          "routing": {
            "request": {
              "url": "/appstore/reviews",
              "method": "GET"
            }
          },
          "description": "Returns reviews from AppStore apps"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "appStore"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "geocode",
      "options": [
        {
          "name": "Geocode",
          "value": "geocode",
          "action": "Geocode address",
          "routing": {
            "request": {
              "url": "/geocoding",
              "method": "GET"
            }
          },
          "description": "Translates human-readable addresses into locations on the map"
        },
        {
          "name": "Reverse Geocode",
          "value": "reverseGeocode",
          "action": "Reverse geocode coordinates",
          "routing": {
            "request": {
              "url": "/reverse-geocoding",
              "method": "GET"
            }
          },
          "description": "Translate locations on the map into human-readable addresses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "geocoding"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getInsights",
      "options": [
        {
          "name": "Get Insights",
          "value": "getInsights",
          "action": "Get company insights",
          "routing": {
            "request": {
              "url": "/company-insights",
              "method": "GET"
            }
          },
          "description": "Finds company details such as revenue, size, founding year, public status, etc"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "companyInsights"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrape",
      "options": [
        {
          "name": "Scrape",
          "value": "scrape",
          "action": "Scrape web page with ai",
          "routing": {
            "request": {
              "url": "/universal-scraper-v3",
              "method": "GET"
            }
          },
          "description": "Extracts structured data from a webpage using AI"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiScraper"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrape",
      "options": [
        {
          "name": "Scrape",
          "value": "scrape",
          "action": "Scrape web page",
          "routing": {
            "request": {
              "url": "/universal-scraper",
              "method": "GET"
            }
          },
          "description": "Extracts the data you need from any web page by using AI"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "universalScraper"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "screenshot",
      "options": [
        {
          "name": "Screenshot",
          "value": "screenshot",
          "action": "Screenshot web page",
          "routing": {
            "request": {
              "url": "/screenshoter",
              "method": "GET"
            }
          },
          "description": "Captures high-quality screenshots of any webpage"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webPageScreenshoter"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search on airbnb",
          "routing": {
            "request": {
              "url": "/airbnb/search",
              "method": "GET"
            }
          },
          "description": "Returns search results from Airbnb"
        },
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from airbnb",
          "routing": {
            "request": {
              "url": "/airbnb/reviews",
              "method": "GET"
            }
          },
          "description": "Returns reviews from Airbnb accommodations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "airbnb"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from walmart",
          "routing": {
            "request": {
              "url": "/walmart/reviews",
              "method": "GET"
            }
          },
          "description": "Returns reviews from a list of Walmart products"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "walmartReviews"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from target",
          "routing": {
            "request": {
              "url": "/target/reviews",
              "method": "GET"
            }
          },
          "description": "Returns reviews from a list of Target products"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "targetReviews"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "profiles",
      "options": [
        {
          "name": "Profiles",
          "value": "profiles",
          "action": "Get twitter profiles",
          "routing": {
            "request": {
              "url": "/twitter/profiles",
              "method": "GET"
            }
          },
          "description": "Returns information from the list of Twitter profiles"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "twitterProfiles"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "profiles",
      "options": [
        {
          "name": "Profiles",
          "value": "profiles",
          "action": "Get tik tok profiles",
          "routing": {
            "request": {
              "url": "/tiktok/profiles",
              "method": "GET"
            }
          },
          "description": "Returns information from the list of TikTok profiles"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tiktokProfiles"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from get app",
          "routing": {
            "request": {
              "url": "/getapp/reviews",
              "method": "GET"
            }
          },
          "description": "Returns reviews from GetApp apps"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "getAppReviews"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search yellow pages",
          "routing": {
            "request": {
              "url": "/yellowpages-search",
              "method": "GET"
            }
          },
          "description": "Returns search results from Yellow Pages"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "yellowPagesSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "findIdentity",
      "options": [
        {
          "name": "Find Identity",
          "value": "findIdentity",
          "action": "Find phone identity",
          "routing": {
            "request": {
              "url": "/whitepages-phones",
              "method": "GET"
            }
          },
          "description": "Returns insights about phone number owners (name, address, etc.)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "phoneIdentityFinder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrapeAddresses",
      "options": [
        {
          "name": "Scrape Addresses",
          "value": "scrapeAddresses",
          "action": "Scrape whitepages addresses",
          "routing": {
            "request": {
              "url": "/whitepages-addresses",
              "method": "GET"
            }
          },
          "description": "Returns insights about addresses and their residents"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "whitepagesAddresses"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getOwners",
      "options": [
        {
          "name": "Get Owners",
          "value": "getOwners",
          "action": "Get phone owners",
          "routing": {
            "request": {
              "url": "/phones-owners",
              "method": "GET"
            }
          },
          "description": "Returns insights about phone number owners (name, address, etc.)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "phonesOwners"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getData",
      "options": [
        {
          "name": "Get Data",
          "value": "getData",
          "action": "Get similarweb data",
          "routing": {
            "request": {
              "url": "/similarweb",
              "method": "GET"
            }
          },
          "description": "Returns data from Similarweb businesses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "similarweb"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "findWebsite",
      "options": [
        {
          "name": "Find Website",
          "value": "findWebsite",
          "action": "Find company website",
          "routing": {
            "request": {
              "url": "/company-website-finder",
              "method": "GET"
            }
          },
          "description": "Returns data from Company Website Finder businesses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "companyWebsiteFinder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "findEmailsAndContacts",
      "options": [
        {
          "name": "Find Emails & Contacts",
          "value": "findEmailsAndContacts",
          "action": "Find emails and contacts",
          "routing": {
            "request": {
              "url": "/emails-and-contacts",
              "method": "GET"
            }
          },
          "description": "Finds email addresses, social links, and phones from domains"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "emailsAndContacts"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Search",
      "value": "search",
      "action": "Search for businesses on google maps",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/maps/search-v3",
          "method": "GET"
        }
      },
      "description": "Search for businesses on Google Maps",
      "resource": "googleMaps"
    },
    {
      "name": "Get Reviews",
      "value": "reviews",
      "action": "Get reviews for a place on google maps",
      "routing": {
        "request": {
          "url": "/maps/reviews-v3",
          "method": "GET"
        }
      },
      "description": "Get reviews for a place on Google Maps",
      "resource": "googleMaps"
    },
    {
      "name": "Get Photos",
      "value": "photos",
      "action": "Get photos for a place on google maps",
      "routing": {
        "request": {
          "url": "/maps/photos-v3",
          "method": "GET"
        }
      },
      "description": "Get photos for a place on Google Maps",
      "resource": "googleMaps"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on google",
      "routing": {
        "request": {
          "url": "/google-search-v3",
          "method": "GET"
        }
      },
      "description": "Search on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Search Careers",
      "value": "searchCareers",
      "action": "Search for career listings on google",
      "routing": {
        "request": {
          "url": "/google-search-careers",
          "method": "GET"
        }
      },
      "description": "Search for career listings on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Search Events",
      "value": "searchEvents",
      "action": "Search for events on google",
      "routing": {
        "request": {
          "url": "/google-search-events",
          "method": "GET"
        }
      },
      "description": "Search for events on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Search Images",
      "value": "searchImages",
      "action": "Search for images on google",
      "routing": {
        "request": {
          "url": "/google-search-images-v2",
          "method": "GET"
        }
      },
      "description": "Search for images on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Search News",
      "value": "searchNews",
      "action": "Search for news on google",
      "routing": {
        "request": {
          "url": "/google-search-news",
          "method": "GET"
        }
      },
      "description": "Search for news on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Search Shopping",
      "value": "searchShopping",
      "action": "Search for shopping products on google",
      "routing": {
        "request": {
          "url": "/google-search-shopping",
          "method": "GET"
        }
      },
      "description": "Search for shopping products on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Search Videos",
      "value": "searchVideos",
      "action": "Search for videos on google",
      "routing": {
        "request": {
          "url": "/google-search-videos",
          "method": "GET"
        }
      },
      "description": "Search for videos on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Get Reviews",
      "value": "reviews",
      "action": "Get reviews from G2",
      "routing": {
        "request": {
          "url": "/g2/reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from G2",
      "resource": "g2Reviews"
    },
    {
      "name": "Get Business Info",
      "value": "business",
      "action": "Get business information from trustpilot",
      "routing": {
        "request": {
          "url": "/trustpilot",
          "method": "GET"
        }
      },
      "description": "Get business information from Trustpilot",
      "resource": "trustpilot"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search businesses on trustpilot",
      "routing": {
        "request": {
          "url": "/trustpilot/search",
          "method": "GET"
        }
      },
      "description": "Search businesses on Trustpilot",
      "resource": "trustpilot"
    },
    {
      "name": "Get Reviews",
      "value": "reviews",
      "action": "Get reviews from trustpilot",
      "routing": {
        "request": {
          "url": "/trustpilot/reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from Trustpilot",
      "resource": "trustpilot"
    },
    {
      "name": "Get Reviews",
      "value": "reviews",
      "action": "Get reviews from trip advisor",
      "routing": {
        "request": {
          "url": "/tripadvisor-reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from TripAdvisor",
      "resource": "tripadvisor"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on trip advisor",
      "routing": {
        "request": {
          "url": "/tripadvisor-search",
          "method": "GET"
        }
      },
      "description": "Search on TripAdvisor",
      "resource": "tripadvisor"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on expedia",
      "routing": {
        "request": {
          "url": "/expedia/search",
          "method": "GET"
        }
      },
      "description": "Search on Expedia",
      "resource": "expedia"
    },
    {
      "name": "Get Reviews",
      "value": "reviews",
      "action": "Get reviews from expedia",
      "routing": {
        "request": {
          "url": "/expedia/reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from Expedia",
      "resource": "expedia"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search for videos on you tube",
      "description": "Search for videos on YouTube",
      "resource": "youtube"
    },
    {
      "name": "Channel",
      "value": "channel",
      "action": "Get you tube channel information",
      "description": "Get YouTube channel information",
      "resource": "youtube"
    },
    {
      "name": "Comments",
      "value": "comments",
      "action": "Get comments from you tube videos",
      "description": "Get comments from YouTube videos",
      "resource": "youtube"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on yelp",
      "routing": {
        "request": {
          "url": "/yelp-search",
          "method": "GET"
        }
      },
      "description": "Search on Yelp",
      "resource": "yelp"
    },
    {
      "name": "Business",
      "value": "business",
      "action": "Get business information from yelp",
      "routing": {
        "request": {
          "url": "/yelp-business",
          "method": "GET"
        }
      },
      "description": "Get business information from Yelp",
      "resource": "yelp"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from yelp businesses",
      "routing": {
        "request": {
          "url": "/yelp-reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from Yelp businesses",
      "resource": "yelp"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from product hunt",
      "routing": {
        "request": {
          "url": "/producthunt-reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from Product Hunt",
      "resource": "productHunt"
    },
    {
      "name": "Job Search",
      "value": "jobSearch",
      "action": "Get jobs from indeed",
      "routing": {
        "request": {
          "url": "/indeed-jobs",
          "method": "GET"
        }
      },
      "description": "Get jobs from Indeed",
      "resource": "indeed"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from indeed companies",
      "routing": {
        "request": {
          "url": "/indeed-reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from Indeed companies",
      "resource": "indeed"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on booking",
      "routing": {
        "request": {
          "url": "/booking/search",
          "method": "GET"
        }
      },
      "description": "Search results from Booking.com",
      "resource": "booking"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from booking",
      "routing": {
        "request": {
          "url": "/booking/reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from Booking.com hotels",
      "resource": "booking"
    },
    {
      "name": "Prices",
      "value": "prices",
      "action": "Get prices from booking",
      "routing": {
        "request": {
          "url": "/booking/prices",
          "method": "GET"
        }
      },
      "description": "Get prices from Booking.com hotels",
      "resource": "booking"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on zillow",
      "routing": {
        "request": {
          "url": "/zillow/search",
          "method": "GET"
        }
      },
      "description": "Returns listings from Zillow",
      "resource": "zillow"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from appstore",
      "routing": {
        "request": {
          "url": "/appstore/reviews",
          "method": "GET"
        }
      },
      "description": "Returns reviews from AppStore apps",
      "resource": "appStore"
    },
    {
      "name": "Geocode",
      "value": "geocode",
      "action": "Geocode address",
      "routing": {
        "request": {
          "url": "/geocoding",
          "method": "GET"
        }
      },
      "description": "Translates human-readable addresses into locations on the map",
      "resource": "geocoding"
    },
    {
      "name": "Reverse Geocode",
      "value": "reverseGeocode",
      "action": "Reverse geocode coordinates",
      "routing": {
        "request": {
          "url": "/reverse-geocoding",
          "method": "GET"
        }
      },
      "description": "Translate locations on the map into human-readable addresses",
      "resource": "geocoding"
    },
    {
      "name": "Get Insights",
      "value": "getInsights",
      "action": "Get company insights",
      "routing": {
        "request": {
          "url": "/company-insights",
          "method": "GET"
        }
      },
      "description": "Finds company details such as revenue, size, founding year, public status, etc",
      "resource": "companyInsights"
    },
    {
      "name": "Scrape",
      "value": "scrape",
      "action": "Scrape web page with ai",
      "routing": {
        "request": {
          "url": "/universal-scraper-v3",
          "method": "GET"
        }
      },
      "description": "Extracts structured data from a webpage using AI",
      "resource": "aiScraper"
    },
    {
      "name": "Scrape",
      "value": "scrape",
      "action": "Scrape web page",
      "routing": {
        "request": {
          "url": "/universal-scraper",
          "method": "GET"
        }
      },
      "description": "Extracts the data you need from any web page by using AI",
      "resource": "universalScraper"
    },
    {
      "name": "Screenshot",
      "value": "screenshot",
      "action": "Screenshot web page",
      "routing": {
        "request": {
          "url": "/screenshoter",
          "method": "GET"
        }
      },
      "description": "Captures high-quality screenshots of any webpage",
      "resource": "webPageScreenshoter"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on airbnb",
      "routing": {
        "request": {
          "url": "/airbnb/search",
          "method": "GET"
        }
      },
      "description": "Returns search results from Airbnb",
      "resource": "airbnb"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from airbnb",
      "routing": {
        "request": {
          "url": "/airbnb/reviews",
          "method": "GET"
        }
      },
      "description": "Returns reviews from Airbnb accommodations",
      "resource": "airbnb"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from walmart",
      "routing": {
        "request": {
          "url": "/walmart/reviews",
          "method": "GET"
        }
      },
      "description": "Returns reviews from a list of Walmart products",
      "resource": "walmartReviews"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from target",
      "routing": {
        "request": {
          "url": "/target/reviews",
          "method": "GET"
        }
      },
      "description": "Returns reviews from a list of Target products",
      "resource": "targetReviews"
    },
    {
      "name": "Profiles",
      "value": "profiles",
      "action": "Get twitter profiles",
      "routing": {
        "request": {
          "url": "/twitter/profiles",
          "method": "GET"
        }
      },
      "description": "Returns information from the list of Twitter profiles",
      "resource": "twitterProfiles"
    },
    {
      "name": "Profiles",
      "value": "profiles",
      "action": "Get tik tok profiles",
      "routing": {
        "request": {
          "url": "/tiktok/profiles",
          "method": "GET"
        }
      },
      "description": "Returns information from the list of TikTok profiles",
      "resource": "tiktokProfiles"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from get app",
      "routing": {
        "request": {
          "url": "/getapp/reviews",
          "method": "GET"
        }
      },
      "description": "Returns reviews from GetApp apps",
      "resource": "getAppReviews"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search yellow pages",
      "routing": {
        "request": {
          "url": "/yellowpages-search",
          "method": "GET"
        }
      },
      "description": "Returns search results from Yellow Pages",
      "resource": "yellowPagesSearch"
    },
    {
      "name": "Find Identity",
      "value": "findIdentity",
      "action": "Find phone identity",
      "routing": {
        "request": {
          "url": "/whitepages-phones",
          "method": "GET"
        }
      },
      "description": "Returns insights about phone number owners (name, address, etc.)",
      "resource": "phoneIdentityFinder"
    },
    {
      "name": "Scrape Addresses",
      "value": "scrapeAddresses",
      "action": "Scrape whitepages addresses",
      "routing": {
        "request": {
          "url": "/whitepages-addresses",
          "method": "GET"
        }
      },
      "description": "Returns insights about addresses and their residents",
      "resource": "whitepagesAddresses"
    },
    {
      "name": "Get Owners",
      "value": "getOwners",
      "action": "Get phone owners",
      "routing": {
        "request": {
          "url": "/phones-owners",
          "method": "GET"
        }
      },
      "description": "Returns insights about phone number owners (name, address, etc.)",
      "resource": "phonesOwners"
    },
    {
      "name": "Get Data",
      "value": "getData",
      "action": "Get similarweb data",
      "routing": {
        "request": {
          "url": "/similarweb",
          "method": "GET"
        }
      },
      "description": "Returns data from Similarweb businesses",
      "resource": "similarweb"
    },
    {
      "name": "Find Website",
      "value": "findWebsite",
      "action": "Find company website",
      "routing": {
        "request": {
          "url": "/company-website-finder",
          "method": "GET"
        }
      },
      "description": "Returns data from Company Website Finder businesses",
      "resource": "companyWebsiteFinder"
    },
    {
      "name": "Find Emails & Contacts",
      "value": "findEmailsAndContacts",
      "action": "Find emails and contacts",
      "routing": {
        "request": {
          "url": "/emails-and-contacts",
          "method": "GET"
        }
      },
      "description": "Finds email addresses, social links, and phones from domains",
      "resource": "emailsAndContacts"
    }
  ]

npm_readme:
  # n8n-nodes-outscraper

  ![Outscraper Logo](https://outscraper.com/wp-content/uploads/2023/11/cropped-logo-long-e1628850886215.webp)

  This is an n8n community node for integrating with the [Outscraper API](https://outscraper.com). It allows you to automate data extraction from various online platforms including Google Maps, Google Search, YouTube, Trustpilot, TripAdvisor, Expedia, and G2 Reviews.

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

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

  ## Installation

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

  ### Community Nodes (Recommended)

  For users on n8n v0.187+:

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-outscraper` in the input field
  4. Agree to the risks of using community nodes
  5. Click **Install**

  ### Manual Installation

  To install the node manually:

  1. Open your n8n installation folder
  2. Go to the `node_modules` folder
  3. Create a new folder called `n8n-nodes-outscraper`
  4. Download the [latest release](https://github.com/outscraper/n8n-nodes-outscraper/releases) and extract it into the folder
  5. Restart n8n

  ### npm Installation

  To install via npm:

  ```bash
  npm install n8n-nodes-outscraper
  ```

  ## Operations

  The Outscraper node supports the following platforms and operations:

  ### Google Maps
  - **Search**: Search for businesses on Google Maps
  - **Reviews**: Get reviews for businesses on Google Maps
  - **Photos**: Get photos for businesses on Google Maps

  ### Google Search
  - **Search**: Perform Google search queries

  ## Credentials

  To use this node, you need an Outscraper API key.

  1. Create an account on [Outscraper](https://app.outscraper.com/signup)
  2. Navigate to the [account page](https://app.outscraper.com/account/api) to get your API key
  3. In n8n, create new credentials of type **Outscraper API**
  4. Enter your API key and the API URL (default: https://api.outscraper.cloud)

  ## Usage

  1. Add the Outscraper node to your workflow
  2. Select the resource (e.g., Google Maps) you want to work with
  3. Choose the operation (e.g., Search, Reviews)
  4. Configure the required parameters
  5. Connect the node to the rest of your workflow

  ### Example: Search for Businesses on Google Maps

  1. Add the Outscraper node
  2. Select **Google Maps** as the resource
  3. Select **Search** as the operation
  4. Enter your search query (e.g., "coffee shops in New York")
  5. Set additional parameters like limit, async mode, etc.
  6. Run the workflow to get the search results

  ## Resources

  * [Outscraper Website](https://outscraper.com)
  * [Outscraper API Documentation](https://app.outscraper.com/api-docs)
  * [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## Version History

  ### 0.2.1 (2026-02-19)
  * New service AI Scraper

  ### 0.2.0 (2026-01-22)
  * Fixed screenshot service

  ### 0.1.7 (2025-07-17)
  * Added Emails & Contacts scraper

  ### 0.1.6 (2025-07-17)
  * Fixed support for operations

  ### 0.1.5 (2025-06-27)
  * Added support for geocoding operations (Geocode and Reverse Geocode)
  * Enhanced operations with prices functionality
  * Improved field configurations and routing options

  ### 0.1.4 (2025-06-26)

  * Enhanced field configurations with additional parameters

  ### 0.1.3 (2025-06-26)

  * Improved routing and display options

  ### 0.1.2 (2025-06-26)

  * Refactored node structure for better maintainability
  * Updated field configurations with improved descriptions
  * Enhanced error handling and validation

  ### 0.1.1 (2025-06-25)

  * Fixed minor bugs and improved stability
  * Updated dependencies and documentation

  ### 0.1.0 (2025-06-25)

  * Initial release
  * Support for Google Maps, Google Search

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Automates data extraction from online platforms including Google Maps, Google Search, YouTube, Trustpilot, TripAdvisor, Expedia, and G2 Reviews via the Outscraper API.","capabilities":["Search businesses on Google Maps","Retrieve reviews from Google Maps","Extract photos from Google Maps","Perform Google Search queries","Scrape emails and contacts","Geocode and reverse geocoding","Access AI Scraper service","Retrieve prices and ratings data"],"authentication":"API key required","commonUseCases":["Automated business research and competitor analysis","Review monitoring and sentiment analysis","Lead generation via email and contact scraping","Market research using geocoding and location data"],"limitations":["Community node (requires accepting risks)","Requires separate Outscraper account and API key"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


node_type: n8n-nodes-signifycrm.signifyCrm
package_name: n8n-nodes-signifycrm
display_name: SignifyCRM
description: Consume SignifyCRM API
category: Communication
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: signifycrm
author_github_url: https://github.com/serveradmin-git/
npm_package_name: n8n-nodes-signifycrm
npm_version: 0.1.3
community_fetched_at: 2026-04-16T09:43:35.905Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Case",
          "value": "case"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Lead",
          "value": "lead"
        },
        {
          "name": "Opportunity",
          "value": "opportunity"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Delete a contact"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "description": "Get a contact"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contacts",
          "description": "Get many contacts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update a contact"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an account",
          "description": "Create an account"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an account",
          "description": "Delete an account"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an account",
          "description": "Get an account"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many accounts",
          "description": "Get many accounts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an account",
          "description": "Update an account"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a lead",
          "description": "Create a lead"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a lead",
          "description": "Delete a lead"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a lead",
          "description": "Get a lead"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many leads",
          "description": "Get many leads"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a lead",
          "description": "Update a lead"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lead"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a opportunity",
          "description": "Create a opportunity"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a opportunity",
          "description": "Delete a opportunity"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a opportunity",
          "description": "Get a opportunity"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many opportunities",
          "description": "Get many opportunities"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a opportunity",
          "description": "Update a opportunity"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "opportunity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a case",
          "description": "Create a case"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a case",
          "description": "Delete a case"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a case",
          "description": "Get a case"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many cases",
          "description": "Get many cases"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a case",
          "description": "Update a case"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "case"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task",
          "description": "Create a task"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a task",
          "description": "Delete a task"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a task",
          "description": "Get a task"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tasks",
          "description": "Get many tasks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a task",
          "description": "Update a task"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a contact",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "description": "Get a contact",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contacts",
      "description": "Get many contacts",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update a contact",
      "resource": "contact"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an account",
      "description": "Create an account",
      "resource": "account"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an account",
      "description": "Delete an account",
      "resource": "account"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an account",
      "description": "Get an account",
      "resource": "account"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many accounts",
      "description": "Get many accounts",
      "resource": "account"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an account",
      "description": "Update an account",
      "resource": "account"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__",
      "resource": "account"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a lead",
      "description": "Create a lead",
      "resource": "lead"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a lead",
      "description": "Delete a lead",
      "resource": "lead"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a lead",
      "description": "Get a lead",
      "resource": "lead"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many leads",
      "description": "Get many leads",
      "resource": "lead"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a lead",
      "description": "Update a lead",
      "resource": "lead"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__",
      "resource": "lead"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a opportunity",
      "description": "Create a opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a opportunity",
      "description": "Delete a opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a opportunity",
      "description": "Get a opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many opportunities",
      "description": "Get many opportunities",
      "resource": "opportunity"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a opportunity",
      "description": "Update a opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__",
      "resource": "opportunity"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a case",
      "description": "Create a case",
      "resource": "case"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a case",
      "description": "Delete a case",
      "resource": "case"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a case",
      "description": "Get a case",
      "resource": "case"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many cases",
      "description": "Get many cases",
      "resource": "case"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a case",
      "description": "Update a case",
      "resource": "case"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__",
      "resource": "case"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "description": "Create a task",
      "resource": "task"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a task",
      "description": "Delete a task",
      "resource": "task"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a task",
      "description": "Get a task",
      "resource": "task"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tasks",
      "description": "Get many tasks",
      "resource": "task"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a task",
      "description": "Update a task",
      "resource": "task"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__",
      "resource": "task"
    }
  ]

npm_readme:
  # n8n-nodes-signifycrm

  This is an n8n community node. It lets you use [SignifyCRM](https://www.signifycrm.com/) in your n8n workflows.

  SignifyCRM is a powerful CRM platform serving APAC businesses since 2006, helping teams automate sales pipelines, manage marketing campaigns, and streamline customer support.

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

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

  ## Installation

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

  ```bash
  npm install n8n-nodes-signifycrm
  ```

  ## Operations

  The SignifyCRM node supports the following **resources** and **operations**:

  ### Account
  - **create**: Create a new Account record  
  - **get**: Retrieve an Account by ID  
  - **getAll**: Retrieve multiple Accounts
  - **update**: Update an existing Account  
  - **delete**: Soft-delete an Account  

  ### Contact
  - **create**: Create a new Contact record  
  - **get**: Retrieve a Contact by ID  
  - **getAll**: Retrieve multiple Contacts  
  - **update**: Update an existing Contact  
  - **delete**: Soft-delete a Contact  

  ### Lead
  - **create**: Create a new Lead record  
  - **get**: Retrieve a Lead by ID  
  - **getAll**: Retrieve multiple Leads  
  - **update**: Update an existing Lead  
  - **delete**: Soft-delete a Lead  

  ### Opportunity
  - **create**: Create a new Opportunity record  
  - **get**: Retrieve an Opportunity by ID  
  - **getAll**: Retrieve multiple Opportunities  
  - **update**: Update an existing Opportunity  
  - **delete**: Soft-delete an Opportunity  

  ### Case
  - **create**: Create a new Case record  
  - **get**: Retrieve a Case by ID  
  - **getAll**: Retrieve multiple Cases  
  - **update**: Update an existing Case  
  - **delete**: Soft-delete a Case  

  ### Task
  - **create**: Create a new Task record  
  - **get**: Retrieve a Task by ID  
  - **getAll**: Retrieve multiple Tasks  
  - **update**: Update an existing Task  
  - **delete**: Soft-delete a Task  

  ## Credentials

  To connect your workflows to SignifyCRM, you must create a **SignifyCRM API** credential in n8n.

  ### Prerequisites
  - An active SignifyCRM account (contact your administrator if you don’t have one).  
  - Your SignifyCRM instance URL (e.g. `https://example.signifycrm.com`).  
  - A valid **API Key** issued by your SignifyCRM administrator.  
  - Your SignifyCRM **Username** and **Password**.

  ### Authentication Method
  This node uses SignifyCRM’s REST-API login endpoint (`POST /rest_api/v1/rest/login`) to authenticate on every request. Your API key is sent in the request body along with your login credentials.

  ### How to set up in n8n
  1. In n8n, go to **Settings → Credentials**.  
  2. Click **New Credential** and choose **SignifyCRM API**.  
  3. Enter the following fields:  
     - **Site URL**  
       - The full base URL of your SignifyCRM instance (e.g. `https://example.signifycrm.com`).  
     - **API Key**  
       - Your SignifyCRM API key.  
     - **Username**  
       - Your SignifyCRM username.  
     - **Password**  
       - Your SignifyCRM login password.  
  4. Click **Save**.  
  5. n8n will automatically send a test request to `/rest_api/v1/rest/login`. If the test succeeds, your credential is ready to use.

  For more details on SignifyCRM authentication, refer to the [SignifyCRM API docs](https://support.signifycrm.net/service/api_v1/docs/).

  ## Compatibility

  This node was developed and tested with latest stable n8n release and SignifyCRM API v1.

  ## Usage

  If you’re new to n8n, check out the [Try it out guide](https://docs.n8n.io/try-it-out/) first.

  1. **Add the node**  
     On your workflow canvas click the “+” button and search for **SignifyCRM**.

  2. **Select your credential**  
     In the node’s **Credentials** dropdown, pick the **SignifyCRM API** you created.

  3. **Choose a resource & operation**  
     - **Resource**: e.g. Account, Contact, Lead, Opportunity, Case, or Task  
     - **Operation**: e.g. create, get, getAll, update, delete  

  4. **Fill in the parameters**  
     - Required fields will be marked in red  
     - You can expand **Additional Fields** to set any optional properties  

  5. **Connect to other nodes**  
     - Use an **HTTP Request**, **Set**, or **Function** node before/after to pass data in or handle results  

  6. **Execute the workflow**  
     - Click **Execute Node** (or run the whole workflow) to test  
     - Inspect the output in the node’s **Output** panel

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [SignifyCRM API v1 documentation](https://support.signifycrm.net/service/api_v1/docs/)  
  * [GitHub repository & README](https://github.com/serveradmin-git/n8n-nodes-signifycrm#readme)  

  ## Version history

  - **1.0.0**
    - Initial release  
    - Resources: Account, Contact, Lead, Opportunity, Case, Task  
    - Operations: create · get · getAll · update · delete  
    - Built and tested against n8n latest and SignifyCRM API v1

  ## License

  This project is licensed under the [MIT License](LICENSE.md).

ai_documentation_summary:
  {"purpose":"A community n8n node that enables automation workflows to interact with the SignifyCRM API for managing CRM records.","capabilities":["Create new Account, Contact, Lead, Opportunity, Case, and Task records","Retrieve single or multiple records for Account, Contact, Lead, Opportunity, Case, and Task","Update existing records for Account, Contact, Lead, Opportunity, Case, and Task","Soft-delete records for Account, Contact, Lead, Opportunity, Case, and Task"],"authentication":"API Key required (sent in request body with username and password)","commonUseCases":["Automating customer data entry from forms or other systems","Syncing CRM data between different platforms","Triggering sales pipeline updates based on external events","Managing support cases and tasks automatically"],"limitations":["Only supports SignifyCRM API v1","Soft-delete operations do not permanently remove data","Requires a separate SignifyCRM API credential setup in n8n"],"relatedNodes":["HTTP Request","Set","Function"]}


node_type: @prospeo/n8n-nodes-prospeo.prospeo
package_name: @prospeo/n8n-nodes-prospeo
display_name: Prospeo
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: apoorva-prospeo
author_github_url: https://github.com/prospeo-v2/n8n-nodes-prospeo.git
npm_package_name: @prospeo/n8n-nodes-prospeo
npm_version: 1.0.0
community_fetched_at: 2026-04-16T09:43:35.905Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Prospeo is a B2B platform to find people and company data and enrich them with verified emails and mobile numbers.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "person",
      "options": [
        {
          "name": "Person",
          "value": "person"
        },
        {
          "name": "Company",
          "value": "company"
        },
        {
          "name": "Account",
          "value": "account"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "enrich",
      "options": [
        {
          "name": "Enrich Person",
          "value": "enrich",
          "action": "Enrich a person",
          "routing": {
            "request": {
              "url": "/enrich-person",
              "method": "POST"
            }
          },
          "description": "Enriches a person with details like email, mobile number, job title, etc"
        },
        {
          "name": "Find Verified Work Email",
          "value": "findEmail",
          "action": "Find verified work email",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "setKeyValue",
                  "properties": {
                    "email": "={{ $responseItem.person?.email?.email ?? null }}"
                  }
                }
              ]
            },
            "request": {
              "url": "/enrich-person",
              "body": {
                "only_verified_email": true
              },
              "method": "POST"
            }
          },
          "description": "Finds a verified work email for a person"
        },
        {
          "name": "Find Verified Mobile Number",
          "value": "findMobile",
          "action": "Find verified mobile number",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "setKeyValue",
                  "properties": {
                    "mobile": "={{ $responseItem.person?.mobile?.mobile ?? null }}"
                  }
                }
              ]
            },
            "request": {
              "url": "/enrich-person",
              "body": {
                "only_verified_mobile": true
              },
              "method": "POST"
            }
          },
          "description": "Finds a verified mobile number for a person"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "person"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "enrich",
      "options": [
        {
          "name": "Enrich Company",
          "value": "enrich",
          "action": "Enrich a company",
          "routing": {
            "request": {
              "url": "/enrich-company",
              "method": "POST"
            }
          },
          "description": "Enriches a company with various details"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "info",
      "options": [
        {
          "name": "Get Account Information",
          "value": "info",
          "action": "Get account information",
          "routing": {
            "request": {
              "url": "/account-information",
              "method": "GET"
            }
          },
          "description": "Finds various details related to your Prospeo account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Enrich Person",
      "value": "enrich",
      "action": "Enrich a person",
      "routing": {
        "request": {
          "url": "/enrich-person",
          "method": "POST"
        }
      },
      "description": "Enriches a person with details like email, mobile number, job title, etc",
      "resource": "person"
    },
    {
      "name": "Find Verified Work Email",
      "value": "findEmail",
      "action": "Find verified work email",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "setKeyValue",
              "properties": {
                "email": "={{ $responseItem.person?.email?.email ?? null }}"
              }
            }
          ]
        },
        "request": {
          "url": "/enrich-person",
          "body": {
            "only_verified_email": true
          },
          "method": "POST"
        }
      },
      "description": "Finds a verified work email for a person",
      "resource": "person"
    },
    {
      "name": "Find Verified Mobile Number",
      "value": "findMobile",
      "action": "Find verified mobile number",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "setKeyValue",
              "properties": {
                "mobile": "={{ $responseItem.person?.mobile?.mobile ?? null }}"
              }
            }
          ]
        },
        "request": {
          "url": "/enrich-person",
          "body": {
            "only_verified_mobile": true
          },
          "method": "POST"
        }
      },
      "description": "Finds a verified mobile number for a person",
      "resource": "person"
    },
    {
      "name": "Enrich Company",
      "value": "enrich",
      "action": "Enrich a company",
      "routing": {
        "request": {
          "url": "/enrich-company",
          "method": "POST"
        }
      },
      "description": "Enriches a company with various details",
      "resource": "company"
    },
    {
      "name": "Get Account Information",
      "value": "info",
      "action": "Get account information",
      "routing": {
        "request": {
          "url": "/account-information",
          "method": "GET"
        }
      },
      "description": "Finds various details related to your Prospeo account",
      "resource": "account"
    }
  ]

npm_readme:
  # n8n-nodes-prospeo

  n8n community node for [Prospeo](https://prospeo.io/) - find verified emails and mobile numbers for people and companies.

  ## Operations

  ### Person
  - **Enrich Person** - Get person data (job title, company, socials, contact info)
  - **Find Verified Work Email** - Get verified business email
  - **Find Verified Mobile Number** - Get verified mobile number

  ### Company
  - **Enrich Company** - Get company details (size, industry, location, etc.)

  ### Account
  - **Get Account Information** - Check your API usage

  ## Installation

  ### Via n8n

  1. Go to **Settings** and then **Community Nodes**
  2. Click **Install**
  3. Enter `n8n-nodes-prospeo` in the search box.
  4. Click on **Install** button.

  ### Manual

  ```bash
  cd ~/.n8n/custom-n8n-nodes-directory
  git clone https://github.com/prospeo-v2/n8n-nodes-prospeo.git
  cd n8n-nodes-prospeo
  npm install && npm run build
  # Restart n8n after all the steps
  ```

  ## Credentials

  1. Get your API key from [Prospeo dashboard](https://app.prospeo.io/api).
  2. In n8n, for Prospeo, and the new credential with API key.

  ## Links

  - [Prospeo](https://prospeo.io/)
  - [Prospeo API Docs](https://prospeo.io/api-docs)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

  ## Issues

  [Open an issue](https://github.com/prospeo-v2/n8n-nodes-prospeo/issues)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"A community n8n node that connects to the Prospeo B2B platform to retrieve verified emails, mobile numbers, and detailed company or person data.","capabilities":["Enrich person data (job title, company, socials, contact info)","Find verified work email for a person","Find verified mobile number for a person","Enrich company details (size, industry, location)","Check API usage and account information"],"authentication":"API key required","commonUseCases":["Lead verification and enrichment","Sales outreach with verified contact details","Company research and prospecting","Data cleaning for contact lists"],"limitations":["Requires manual installation via git clone and npm build for non-community node users","Limited to Prospeo platform's data availability and API rate limits"],"relatedNodes":["HTTP Request","Cron Trigger","Set"]}


node_type: n8n-nodes-lucidlink.lucidlink
package_name: n8n-nodes-lucidlink
display_name: LucidLink
description: Interact with the self-hosted LucidLink LucidAPI
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: charlesleighton
author_github_url: https://github.com/LucidCodeLab/
npm_package_name: n8n-nodes-lucidlink
npm_version: 0.1.4
community_fetched_at: 2026-04-16T09:43:35.906Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "filespace",
      "options": [
        {
          "name": "Data Store",
          "value": "dataStore"
        },
        {
          "name": "Direct Link",
          "value": "directLink"
        },
        {
          "name": "Entry",
          "value": "entry"
        },
        {
          "name": "External Entry",
          "value": "externalEntry"
        },
        {
          "name": "Filespace",
          "value": "filespace"
        },
        {
          "name": "Group",
          "value": "group"
        },
        {
          "name": "Health",
          "value": "health"
        },
        {
          "name": "Member",
          "value": "member"
        },
        {
          "name": "Permission",
          "value": "permission"
        },
        {
          "name": "Provider",
          "value": "provider"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "check",
      "options": [
        {
          "name": "Check",
          "value": "check",
          "action": "Check lucid api health",
          "routing": {
            "request": {
              "url": "/api/v1/health",
              "method": "GET"
            }
          },
          "description": "Check if the LucidAPI instance is responsive"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "health"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get available providers and regions",
          "routing": {
            "request": {
              "url": "/api/v1/providers",
              "method": "GET"
            }
          },
          "description": "List many available storage providers and their regions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "provider"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a filespace",
          "routing": {
            "request": {
              "url": "/api/v1/filespaces",
              "method": "POST"
            }
          },
          "description": "Create a new filespace"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a filespace",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a filespace"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a filespace",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get information for a single filespace"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many filespaces",
          "routing": {
            "request": {
              "url": "/api/v1/filespaces",
              "method": "GET"
            }
          },
          "description": "Get information for many filespaces"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a filespace",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update the name of a filespace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "filespace"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a directory entry",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/entries",
              "body": {
                "type": "dir"
              },
              "method": "POST"
            }
          },
          "description": "Create a new directory in the filespace"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an entry",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/entries/{{$parameter[\"entryId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an empty directory from the filespace"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an entry",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/entries/{{$parameter[\"entryId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a filesystem entry by ID"
        },
        {
          "name": "List Children",
          "value": "listChildren",
          "action": "List directory children",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/entries/{{$parameter[\"entryId\"]}}/children",
              "method": "GET"
            }
          },
          "description": "List entries within a directory"
        },
        {
          "name": "Resolve Path",
          "value": "resolve",
          "action": "Resolve a path to an entry",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/entries/resolve",
              "method": "GET"
            }
          },
          "description": "Look up a filesystem entry by its path"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "entry"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a data store",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/data-stores",
              "body": {
                "kind": "S3DataStore"
              },
              "method": "POST"
            }
          },
          "description": "Create a new S3 data store"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a data store",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/data-stores/{{$parameter[\"dataStoreId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a data store by ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a data store",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/data-stores/{{$parameter[\"dataStoreId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get information about a data store"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many data stores",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/data-stores",
              "method": "GET"
            }
          },
          "description": "List many data stores in the filespace"
        },
        {
          "name": "Update Credentials",
          "value": "update",
          "action": "Update data store credentials",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/data-stores/{{$parameter[\"dataStoreId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update the S3 access key and secret key for a data store"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dataStore"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate a direct link",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/direct-links",
              "method": "GET"
            }
          },
          "description": "Generate a shareable direct link to a filesystem entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "directLink"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listIds",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an external entry",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/entries",
              "method": "POST"
            }
          },
          "description": "Link an S3 object or HTTP file as an entry in the filespace"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an external entry",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/entries/{{$parameter[\"entryId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Remove an external file entry from the filespace"
        },
        {
          "name": "List IDs",
          "value": "listIds",
          "action": "List external entry i ds",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/entries/ids",
              "method": "GET"
            }
          },
          "description": "List all external entry IDs for a given data store"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an external entry",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/entries/{{$parameter[\"entryId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update the URL of an existing HTTP link file entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "externalEntry"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add Member",
          "value": "addMember",
          "action": "Add a member to a group",
          "routing": {
            "request": {
              "url": "=/api/v1/groups/{{$parameter[\"groupId\"]}}/members/{{$parameter[\"memberId\"]}}",
              "method": "PUT"
            }
          },
          "description": "Add a workspace member to a group"
        },
        {
          "name": "Add Members (Bulk)",
          "value": "addMembersBulk",
          "action": "Bulk add members to groups",
          "routing": {
            "request": {
              "url": "/api/v1/groups/members",
              "method": "PUT"
            }
          },
          "description": "Add multiple members to groups in one request"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a group",
          "routing": {
            "request": {
              "url": "/api/v1/groups",
              "method": "POST"
            }
          },
          "description": "Create a new group in the workspace"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a group",
          "routing": {
            "request": {
              "url": "=/api/v1/groups/{{$parameter[\"groupId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Remove a group from the workspace"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a group",
          "routing": {
            "request": {
              "url": "=/api/v1/groups/{{$parameter[\"groupId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a group by its principal ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many groups",
          "routing": {
            "request": {
              "url": "/api/v1/groups",
              "method": "GET"
            }
          },
          "description": "Get workspace groups list"
        },
        {
          "name": "Get Members",
          "value": "getMembers",
          "action": "Get group members",
          "routing": {
            "request": {
              "url": "=/api/v1/groups/{{$parameter[\"groupId\"]}}/members",
              "method": "GET"
            }
          },
          "description": "List all members in a group"
        },
        {
          "name": "Remove Member",
          "value": "removeMember",
          "action": "Remove a member from a group",
          "routing": {
            "request": {
              "url": "=/api/v1/groups/{{$parameter[\"groupId\"]}}/members/{{$parameter[\"memberId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Remove a workspace member from a group"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a group",
          "routing": {
            "request": {
              "url": "=/api/v1/groups/{{$parameter[\"groupId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update group properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "group"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add a member to the workspace",
          "routing": {
            "request": {
              "url": "/api/v1/members",
              "method": "POST"
            }
          },
          "description": "Invite a user to the workspace by email"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Remove a member from the workspace",
          "routing": {
            "request": {
              "url": "=/api/v1/members/{{$parameter[\"memberId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Remove a member from the workspace"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a member",
          "routing": {
            "request": {
              "url": "=/api/v1/members/{{$parameter[\"memberId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a workspace member by principal ID"
        },
        {
          "name": "Get Groups",
          "value": "getGroups",
          "action": "Get a member s groups",
          "routing": {
            "request": {
              "url": "=/api/v1/members/{{$parameter[\"memberId\"]}}/groups",
              "method": "GET"
            }
          },
          "description": "Get the groups that a member belongs to"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many members",
          "routing": {
            "request": {
              "url": "/api/v1/members",
              "method": "GET"
            }
          },
          "description": "Get the workspace members list"
        },
        {
          "name": "Update Role",
          "value": "update",
          "action": "Update a member role",
          "routing": {
            "request": {
              "url": "=/api/v1/members/{{$parameter[\"memberId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update the role of a workspace member"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "member"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Grant",
          "value": "grant",
          "action": "Grant a permission",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/permissions",
              "method": "POST"
            }
          },
          "description": "Grant access to a principal for a filesystem directory"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List permissions",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/permissions",
              "method": "GET"
            }
          },
          "description": "List permissions for a filespace"
        },
        {
          "name": "Revoke",
          "value": "revoke",
          "action": "Revoke a permission",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/permissions/{{$parameter[\"permissionId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Remove a permission from a filespace"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a permission",
          "routing": {
            "request": {
              "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/permissions/{{$parameter[\"permissionId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Change the permissions for an existing permission entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "permission"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Check",
      "value": "check",
      "action": "Check lucid api health",
      "routing": {
        "request": {
          "url": "/api/v1/health",
          "method": "GET"
        }
      },
      "description": "Check if the LucidAPI instance is responsive",
      "resource": "health"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get available providers and regions",
      "routing": {
        "request": {
          "url": "/api/v1/providers",
          "method": "GET"
        }
      },
      "description": "List many available storage providers and their regions",
      "resource": "provider"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a filespace",
      "routing": {
        "request": {
          "url": "/api/v1/filespaces",
          "method": "POST"
        }
      },
      "description": "Create a new filespace",
      "resource": "filespace"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a filespace",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a filespace",
      "resource": "filespace"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a filespace",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get information for a single filespace",
      "resource": "filespace"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many filespaces",
      "routing": {
        "request": {
          "url": "/api/v1/filespaces",
          "method": "GET"
        }
      },
      "description": "Get information for many filespaces",
      "resource": "filespace"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a filespace",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update the name of a filespace",
      "resource": "filespace"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a directory entry",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/entries",
          "body": {
            "type": "dir"
          },
          "method": "POST"
        }
      },
      "description": "Create a new directory in the filespace",
      "resource": "entry"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an entry",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/entries/{{$parameter[\"entryId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an empty directory from the filespace",
      "resource": "entry"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an entry",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/entries/{{$parameter[\"entryId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a filesystem entry by ID",
      "resource": "entry"
    },
    {
      "name": "List Children",
      "value": "listChildren",
      "action": "List directory children",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/entries/{{$parameter[\"entryId\"]}}/children",
          "method": "GET"
        }
      },
      "description": "List entries within a directory",
      "resource": "entry"
    },
    {
      "name": "Resolve Path",
      "value": "resolve",
      "action": "Resolve a path to an entry",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/entries/resolve",
          "method": "GET"
        }
      },
      "description": "Look up a filesystem entry by its path",
      "resource": "entry"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a data store",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/data-stores",
          "body": {
            "kind": "S3DataStore"
          },
          "method": "POST"
        }
      },
      "description": "Create a new S3 data store",
      "resource": "dataStore"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a data store",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/data-stores/{{$parameter[\"dataStoreId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a data store by ID",
      "resource": "dataStore"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a data store",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/data-stores/{{$parameter[\"dataStoreId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get information about a data store",
      "resource": "dataStore"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many data stores",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/data-stores",
          "method": "GET"
        }
      },
      "description": "List many data stores in the filespace",
      "resource": "dataStore"
    },
    {
      "name": "Update Credentials",
      "value": "update",
      "action": "Update data store credentials",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/data-stores/{{$parameter[\"dataStoreId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update the S3 access key and secret key for a data store",
      "resource": "dataStore"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate a direct link",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/direct-links",
          "method": "GET"
        }
      },
      "description": "Generate a shareable direct link to a filesystem entry",
      "resource": "directLink"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an external entry",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/entries",
          "method": "POST"
        }
      },
      "description": "Link an S3 object or HTTP file as an entry in the filespace",
      "resource": "externalEntry"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an external entry",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/entries/{{$parameter[\"entryId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Remove an external file entry from the filespace",
      "resource": "externalEntry"
    },
    {
      "name": "List IDs",
      "value": "listIds",
      "action": "List external entry i ds",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/entries/ids",
          "method": "GET"
        }
      },
      "description": "List all external entry IDs for a given data store",
      "resource": "externalEntry"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an external entry",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/external/entries/{{$parameter[\"entryId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update the URL of an existing HTTP link file entry",
      "resource": "externalEntry"
    },
    {
      "name": "Add Member",
      "value": "addMember",
      "action": "Add a member to a group",
      "routing": {
        "request": {
          "url": "=/api/v1/groups/{{$parameter[\"groupId\"]}}/members/{{$parameter[\"memberId\"]}}",
          "method": "PUT"
        }
      },
      "description": "Add a workspace member to a group",
      "resource": "group"
    },
    {
      "name": "Add Members (Bulk)",
      "value": "addMembersBulk",
      "action": "Bulk add members to groups",
      "routing": {
        "request": {
          "url": "/api/v1/groups/members",
          "method": "PUT"
        }
      },
      "description": "Add multiple members to groups in one request",
      "resource": "group"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a group",
      "routing": {
        "request": {
          "url": "/api/v1/groups",
          "method": "POST"
        }
      },
      "description": "Create a new group in the workspace",
      "resource": "group"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a group",
      "routing": {
        "request": {
          "url": "=/api/v1/groups/{{$parameter[\"groupId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Remove a group from the workspace",
      "resource": "group"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a group",
      "routing": {
        "request": {
          "url": "=/api/v1/groups/{{$parameter[\"groupId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a group by its principal ID",
      "resource": "group"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many groups",
      "routing": {
        "request": {
          "url": "/api/v1/groups",
          "method": "GET"
        }
      },
      "description": "Get workspace groups list",
      "resource": "group"
    },
    {
      "name": "Get Members",
      "value": "getMembers",
      "action": "Get group members",
      "routing": {
        "request": {
          "url": "=/api/v1/groups/{{$parameter[\"groupId\"]}}/members",
          "method": "GET"
        }
      },
      "description": "List all members in a group",
      "resource": "group"
    },
    {
      "name": "Remove Member",
      "value": "removeMember",
      "action": "Remove a member from a group",
      "routing": {
        "request": {
          "url": "=/api/v1/groups/{{$parameter[\"groupId\"]}}/members/{{$parameter[\"memberId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Remove a workspace member from a group",
      "resource": "group"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a group",
      "routing": {
        "request": {
          "url": "=/api/v1/groups/{{$parameter[\"groupId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update group properties",
      "resource": "group"
    },
    {
      "name": "Add",
      "value": "add",
      "action": "Add a member to the workspace",
      "routing": {
        "request": {
          "url": "/api/v1/members",
          "method": "POST"
        }
      },
      "description": "Invite a user to the workspace by email",
      "resource": "member"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Remove a member from the workspace",
      "routing": {
        "request": {
          "url": "=/api/v1/members/{{$parameter[\"memberId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Remove a member from the workspace",
      "resource": "member"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a member",
      "routing": {
        "request": {
          "url": "=/api/v1/members/{{$parameter[\"memberId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a workspace member by principal ID",
      "resource": "member"
    },
    {
      "name": "Get Groups",
      "value": "getGroups",
      "action": "Get a member s groups",
      "routing": {
        "request": {
          "url": "=/api/v1/members/{{$parameter[\"memberId\"]}}/groups",
          "method": "GET"
        }
      },
      "description": "Get the groups that a member belongs to",
      "resource": "member"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many members",
      "routing": {
        "request": {
          "url": "/api/v1/members",
          "method": "GET"
        }
      },
      "description": "Get the workspace members list",
      "resource": "member"
    },
    {
      "name": "Update Role",
      "value": "update",
      "action": "Update a member role",
      "routing": {
        "request": {
          "url": "=/api/v1/members/{{$parameter[\"memberId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update the role of a workspace member",
      "resource": "member"
    },
    {
      "name": "Grant",
      "value": "grant",
      "action": "Grant a permission",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/permissions",
          "method": "POST"
        }
      },
      "description": "Grant access to a principal for a filesystem directory",
      "resource": "permission"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List permissions",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/permissions",
          "method": "GET"
        }
      },
      "description": "List permissions for a filespace",
      "resource": "permission"
    },
    {
      "name": "Revoke",
      "value": "revoke",
      "action": "Revoke a permission",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/permissions/{{$parameter[\"permissionId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Remove a permission from a filespace",
      "resource": "permission"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a permission",
      "routing": {
        "request": {
          "url": "=/api/v1/filespaces/{{$parameter[\"filespaceId\"]}}/permissions/{{$parameter[\"permissionId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Change the permissions for an existing permission entry",
      "resource": "permission"
    }
  ]

npm_readme:
  # n8n-nodes-lucidlink

  This is an n8n community node for [LucidLink](https://www.lucidlink.com/). It lets you interact with the self-hosted **LucidLink LucidAPI** from your n8n workflows.

  LucidLink is a cloud-native file system that lets teams work with large files stored in object storage (e.g. Amazon S3) as if they were local. The LucidAPI is a REST API that ships with self-hosted LucidLink deployments and gives programmatic control over filespaces, entries, groups, members, permissions, and more.

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

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

  ---

  ## Installation

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

  The package name is **`n8n-nodes-lucidlink`**.

  ---

  ## Operations

  This node covers 9 resources and 38 operations against the LucidLink LucidAPI v1.4.2.

  ### Direct Link

  | Operation | Description                                                          |
  | --------- | -------------------------------------------------------------------- |
  | Generate  | Generate a shareable direct link to a filesystem entry by ID or path |

  ### Filespace

  | Operation | Description            |
  | --------- | ---------------------- |
  | Create    | Create a new filespace |
  | Get Many  | List all filespaces    |
  | Get       | Get a filespace by ID  |
  | Update    | Rename a filespace     |
  | Delete    | Delete a filespace     |

  ### Entry

  | Operation     | Description                             |
  | ------------- | --------------------------------------- |
  | Create        | Create a new directory entry            |
  | Get           | Get an entry by ID                      |
  | Resolve       | Resolve an entry by its filesystem path |
  | List Children | List the children of a directory entry  |
  | Delete        | Delete an entry by ID                   |

  ### Data Store

  | Operation          | Description                                |
  | ------------------ | ------------------------------------------ |
  | Create             | Create a new S3 data store                 |
  | Get Many           | List all data stores in a filespace        |
  | Get                | Get a data store by ID                     |
  | Update Credentials | Update the S3 credentials for a data store |
  | Delete             | Delete a data store                        |

  ### External Entry

  | Operation | Description                                                       |
  | --------- | ----------------------------------------------------------------- |
  | Create    | Create a new external entry (SingleObjectFile or HttpLinkFile)    |
  | Update    | Update the URL of an existing HTTP link file entry                |
  | List IDs  | List external entry IDs in a data store                           |
  | Delete    | Delete an external entry                                          |

  ### Group

  | Operation        | Description                                    |
  | ---------------- | ---------------------------------------------- |
  | Create           | Create a new group                             |
  | Get Many         | List groups (optionally filter by name)        |
  | Get              | Get a group by ID                              |
  | Update           | Update a group                                 |
  | Delete           | Delete a group                                 |
  | Get Members      | List members of a group                        |
  | Add Member       | Add a single member to a group                 |
  | Bulk Add Members | Add multiple members across groups in one call |
  | Remove Member    | Remove a member from a group                   |

  ### Member

  | Operation   | Description                               |
  | ----------- | ----------------------------------------- |
  | Add         | Add a new member                          |
  | Get Many    | List members (optionally filter by email) |
  | Get         | Get a member by ID                        |
  | Update Role | Update a member's role                    |
  | Delete      | Delete a member                           |
  | Get Groups  | List the groups a member belongs to       |

  ### Permission

  | Operation | Description                                 |
  | --------- | ------------------------------------------- |
  | Grant     | Grant a permission on a path to a principal |
  | List      | List permissions in a filespace             |
  | Update    | Update an existing permission               |
  | Revoke    | Revoke a permission                         |

  ### Provider

  | Operation | Description                                        |
  | --------- | -------------------------------------------------- |
  | Get Many  | List available storage providers and their regions |

  ---

  ## Credentials

  The LucidLink LucidAPI is self-hosted, so you configure the connection endpoint in n8n's credential settings rather than using a fixed URL.

  ### Prerequisites

  - A running LucidLink API deployment | [deployment guide](https://support.lucidlink.com/hc/en-us/articles/40221700126605-Deployment-Usage-LucidLink-API-Container)
  - A service account bearer token

  ### Setup

  1. In n8n, go to **Credentials → New** and search for **LucidLink API**.
  2. Fill in the two fields:

     | Field         | Description                                             | Example                 |
     | ------------- | ------------------------------------------------------- | ----------------------- |
     | **Base URL**  | Full base URL of your LucidAPI instance, including port | `http://localhost:7778` |
     | **API Token** | Bearer token for your service account                   | `eyJ...`                |

  3. Click **Save** — n8n will test the credential by hitting `GET /api/v1/health` and confirm it can connect.

  ---

  ## Compatibility

  - **Minimum n8n version:** 1.0.0
  - **LucidAPI version:** 1.4.2
  - Tested against n8n `1.x` running on Node.js 20+

  ---

  ## Usage

  ### Self-hosted base URL

  Because the LucidAPI is self-hosted, the base URL must be set in your credentials. Every user or team running their own LucidLink deployment will have a different address (e.g. `http://192.168.1.10:7778` or `https://lucidapi.mycompany.com`).

  ### Filespace-scoped resources

  Several resources (Direct Link, Entry, Data Store, External Entry, Permission) require a **Filespace ID**. This appears as a shared field at the top of the node when one of those resources is selected.

  ### Cursor-based pagination

  ### External Entry kinds

  When creating an external entry, select the **Kind**:

  - **Single Object File (S3)** — links a file from an S3 bucket. Requires a Data Store ID and S3 Object ID.
  - **HTTP Link File** — links a file accessible via a public HTTP/HTTPS URL. Requires only the URL.

  The **Update** operation is only applicable to `HttpLinkFile` entries and updates the linked URL.

  ### Cursor-based pagination

  The following operations support cursor-based pagination via `limit` and `Next Cursor` fields:

  - Entry → List Children
  - External Entry → List IDs
  - Permission → List

  Pass the `nextCursor` value returned in a previous response into the **Next Cursor** field to fetch the next page. Use a Loop node to iterate through all pages automatically.

  ### Bulk add group members

  The **Group → Bulk Add Members** operation accepts a list of `{ groupId, memberId }` pairs in a single API call (up to 100 items). Use the **Add item** button in the node UI to build the list.

  ### Creating a filespace with customer storage

  When creating a filespace with `storageOwner = customer`, an additional set of S3 fields appears: Access Key ID, Secret Access Key, and optional Endpoint and Bucket Name.

  ---

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [LucidLink website](https://www.lucidlink.com/)
  - [LucidLink Knowledge Base](https://support.lucidlink.com/hc/en-us)
  - LucidAPI reference — available at `<Base_URL>/api/v1/docs/` once your LucidLink API instance is running
  - [Node source code](https://github.com/LucidCodeLab/n8n-nodes-lucidlink)

  ---

  ## Version history

  ### 0.1.5

  Aligned with LucidLink LucidAPI v1.4.2:

  - **External Entry → Create**: added `HttpLinkFile` kind support — choose between `SingleObjectFile` (S3) and `HttpLinkFile` (public HTTP URL) when creating an external entry
  - **External Entry → Update**: new operation to update the URL of an existing `HttpLinkFile` entry (`PATCH /api/v1/filespaces/{filespaceId}/external/entries/{entryId}`)
  - **Data Store → Create**: corrected minimum value for `URL Expiration (Minutes)` from 360 to 4320 (3 days) to match the API spec

  ### 0.1.3

  - Added **Direct Link** resource with a Generate operation (`GET /api/v1/filespaces/{filespaceId}/direct-links`)

  ### 0.1.0

  Initial release. Covers the full LucidLink LucidAPI v1.3.0 surface:

  - 8 resources: Filespace, Entry, Data Store, External Entry, Group, Member, Permission, Provider
  - 36 operations
  - Configurable base URL and bearer token credentials


node_type: @replyio/n8n-nodes-reply.reply
package_name: @replyio/n8n-nodes-reply
display_name: Reply
description: Interact with Reply.io API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: bborys
author_github_url: https://github.com/reply-team/n8n-public.git
npm_package_name: @replyio/n8n-nodes-reply
npm_version: 0.21.0
community_fetched_at: 2026-04-16T09:43:35.907Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Contact Status",
          "value": "contactStatus"
        },
        {
          "name": "Sequence",
          "value": "sequence"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Delete a contact"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "description": "Get a contact"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contacts",
          "description": "Get many contacts with pagination"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update an existing contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "updateStatus",
      "options": [
        {
          "name": "Clear Status",
          "value": "clearStatus",
          "action": "Clear contact status",
          "description": "Clear statuses from a contact"
        },
        {
          "name": "Update Status",
          "value": "updateStatus",
          "action": "Update contact status",
          "description": "Update the status of a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contactStatus"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Add Contact",
          "value": "addContact",
          "action": "Add contact to sequence",
          "description": "Add an existing contact to a sequence by contact ID"
        },
        {
          "name": "Archive a Sequence",
          "value": "archive",
          "action": "Archive a sequence"
        },
        {
          "name": "Get a Sequence",
          "value": "get",
          "action": "Get a sequence",
          "description": "Get a sequence by ID"
        },
        {
          "name": "Get Contacts",
          "value": "getContacts",
          "action": "Get contacts in sequence",
          "description": "Get contacts in a sequence with pagination"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many sequences",
          "description": "Get many sequences with pagination"
        },
        {
          "name": "Pause a Sequence",
          "value": "pause",
          "action": "Pause a sequence"
        },
        {
          "name": "Start a Sequence",
          "value": "start",
          "action": "Start a sequence"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sequence"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "description": "Get a contact",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contacts",
      "description": "Get many contacts with pagination",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update an existing contact",
      "resource": "contact"
    },
    {
      "name": "Clear Status",
      "value": "clearStatus",
      "action": "Clear contact status",
      "description": "Clear statuses from a contact",
      "resource": "contactStatus"
    },
    {
      "name": "Update Status",
      "value": "updateStatus",
      "action": "Update contact status",
      "description": "Update the status of a contact",
      "resource": "contactStatus"
    },
    {
      "name": "Add Contact",
      "value": "addContact",
      "action": "Add contact to sequence",
      "description": "Add an existing contact to a sequence by contact ID",
      "resource": "sequence"
    },
    {
      "name": "Archive a Sequence",
      "value": "archive",
      "action": "Archive a sequence",
      "resource": "sequence"
    },
    {
      "name": "Get a Sequence",
      "value": "get",
      "action": "Get a sequence",
      "description": "Get a sequence by ID",
      "resource": "sequence"
    },
    {
      "name": "Get Contacts",
      "value": "getContacts",
      "action": "Get contacts in sequence",
      "description": "Get contacts in a sequence with pagination",
      "resource": "sequence"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many sequences",
      "description": "Get many sequences with pagination",
      "resource": "sequence"
    },
    {
      "name": "Pause a Sequence",
      "value": "pause",
      "action": "Pause a sequence",
      "resource": "sequence"
    },
    {
      "name": "Start a Sequence",
      "value": "start",
      "action": "Start a sequence",
      "resource": "sequence"
    }
  ]

npm_readme:
  # @replyio/n8n-nodes-reply

  This is an n8n community node for [Reply.io](https://reply.io) - a sales engagement platform that automates multichannel outreach across email, LinkedIn, calls, SMS, and WhatsApp.

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

  ## Installation

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

  ## Nodes

  ### Reply

  Interact with Reply.io API to manage contacts, sequences, and contact statuses.

  **Resources & Operations:**

  | Resource | Operations |
  |----------|------------|
  | Contact | Create, Get, Get Many, Update, Delete |
  | Contact Status | Update Status, Clear Status |
  | Sequence | Get, Get Many, Get Contacts, Add Contact, Start, Pause, Archive |

  ### Reply Trigger

  Starts workflows when Reply.io events occur.

  **Supported Events:**

  | Category | Events |
  |----------|--------|
  | Email | Sent, Opened, Bounced, Link Clicked, Replied, Reply Categorized |
  | LinkedIn | Message Sent, Message Replied, Connection Sent, Connection Accepted, Reply Categorized |
  | Sequence | Contact Finished, Contact Opted Out, Contact Called |
  | Account Health | Email Connection Lost, Email Account Error |

  ## Credentials

  1. Log in to your [Reply.io](https://reply.io) account
  2. Go to **Settings** > **API Key**
  3. Copy your API key
  4. In n8n, create new Reply API credentials and paste the key

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Reply.io API to manage sales engagement workflows, including contacts, sequences, and statuses.","capabilities":["Create, retrieve, update, and delete contacts","Update and clear contact statuses","Manage sequences (get, add contacts, start, pause, archive)","Trigger workflows on Reply.io events (email, LinkedIn, sequence, account health)","Monitor outreach metrics like opens, clicks, replies, and bounces"],"authentication":"API key required (obtained from Reply.io Settings > API Key)","commonUseCases":["Automating multi-channel sales outreach","Tracking engagement across email, LinkedIn, calls, SMS, and WhatsApp","Managing contact lists and sequence execution","Monitoring campaign performance and opt-outs"],"limitations":["Community node (not official n8n node)","Requires manual API key configuration in n8n"],"relatedNodes":["n8n HTTP Request","n8n Webhook","n8n Code Node"]}


node_type: n8n-nodes-magnetite.magnetite
package_name: n8n-nodes-magnetite
display_name: Magnetite
description: Add leads to Magnetite campaigns for automated outreach
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: magnetite
author_github_url: https://github.com/MagnetiteAI/
npm_package_name: n8n-nodes-magnetite
npm_version: 2.0.0
community_fetched_at: 2026-04-16T09:43:35.908Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "campaign",
      "options": [
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "Lead Magnet (Legacy)",
          "value": "leadMagnet"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addLead",
      "options": [
        {
          "name": "Add Lead",
          "value": "addLead",
          "action": "Add a lead to campaign",
          "description": "Add a lead to a campaign for automated outreach"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate a lead magnet",
          "description": "Generate a personalized lead magnet"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get lead magnet status",
          "description": "Retrieve the status of a lead magnet generation job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "leadMagnet"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Lead",
      "value": "addLead",
      "action": "Add a lead to campaign",
      "description": "Add a lead to a campaign for automated outreach",
      "resource": "campaign"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate a lead magnet",
      "description": "Generate a personalized lead magnet",
      "resource": "leadMagnet"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get lead magnet status",
      "description": "Retrieve the status of a lead magnet generation job",
      "resource": "leadMagnet"
    }
  ]

npm_readme:
  # n8n-nodes-magnetite

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

  This is an n8n community node for [Magnetite](https://magnetite.ai). It lets you generate AI-powered, personalized lead magnets directly in your n8n workflows.

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

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

  ## Installation

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

  1. Go to **Settings > Community Nodes**.
  2. Select **Install**.
  3. Enter `n8n-nodes-magnetite` in **Enter npm package name**.
  4. Agree to the risks of installing unverified code from a public source.
  5. Select **Install**.

  After installing the node, you can use it like any other node in your workflows.

  ## Operations

  ### Lead Magnet

  - **Generate**: Create a personalized lead magnet for a lead
  - **Get Status**: Retrieve the status of a lead magnet generation job

  ## Credentials

  This node requires a Magnetite API key. You can obtain this from your Magnetite dashboard:

  1. Log in to your [Magnetite dashboard](https://app.magnetite.ai)
  2. Go to **Project Settings** → **API & Integrations**
  3. Copy your API key

  Configure the credentials in n8n:
  - **API Key**: Your Magnetite API key
  - **Base URL**: `https://app.magnetite.ai` (default)

  ## Compatibility

  - Minimum n8n version: 0.198.0
  - Tested up to n8n version: 1.98.1

  ## Usage

  ### Basic Lead Magnet Generation

  1. Add the **Magnetite** node to your workflow
  2. Set **Operation** to **Generate**
  3. Configure the required fields:
     - **Project ID**: Your Magnetite project ID
     - **Email**: Lead's email address
  4. Optionally add lead information:
     - Full Name, Company, Domain, Industry, etc.
  5. Add custom fields as JSON if your project requires them

  ### Checking Generation Status

  1. Use the **Get Status** operation
  2. Provide the **Job ID** from a previous generation request
  3. The node returns the current status and results when complete

  ### Example Workflow

  ```json
  {
    "nodes": [
      {
        "name": "Magnetite",
        "type": "n8n-nodes-magnetite.magnetite",
        "parameters": {
          "operation": "generate",
          "projectId": "proj_abc123",
          "email": "{{$json.email}}",
          "leadData": {
            "fullName": "{{$json.name}}",
            "company": "{{$json.company}}"
          }
        }
      }
    ]
  }
  ```

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Magnetite help](https://help.magnetite.ai)
  - [Magnetite API documentation](https://app.magnetite.ai/docs)

  ## Version history

  ### 1.0.4
  - Updated API docs url to https://app.magnetite.ai/docs

  ### 1.0.2
  - Fixed credential test endpoint
  - Improved connection reliability

  ### 1.0.1
  - Updated GitHub repository URL
  - Documentation improvements

  ### 1.0.0
  - Initial release
  - Generate lead magnets
  - Check generation status
  - Support for all standard lead fields
  - Custom fields support via JSON
  - Webhook notifications support

  ## License

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables users to generate AI-powered, personalized lead magnets directly within n8n workflows and track the status of ongoing generation jobs.","capabilities":["Generate personalized lead magnets for specific leads","Retrieve status of lead magnet generation jobs","Support for standard lead fields (Full Name, Company, Domain, Industry)","Custom field support via JSON configuration","Webhook notifications support"],"authentication":"API key required","commonUseCases":["Automated personalized outreach campaigns","Lead nurturing with custom content generation","Integrating lead data into Magnetite projects"],"limitations":["Community node (unverified code from public source)","Requires valid Magnetite API key and project ID"],"relatedNodes":["n8n-nodes-core.webhook","n8n-nodes-core.set","n8n-nodes-core.code"]}


node_type: n8n-nodes-docuwriter-ai.docuWriter
package_name: n8n-nodes-docuwriter-ai
display_name: DocuWriter.ai
description: Generate AI-powered documentation and code analysis
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: magarrent
author_github_url: https://github.com/DocuWriter-ai/
npm_package_name: n8n-nodes-docuwriter-ai
npm_version: 1.1.1
community_fetched_at: 2026-04-16T09:43:35.909Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "codeDocumentation",
      "options": [
        {
          "name": "Code Documentation",
          "value": "codeDocumentation"
        },
        {
          "name": "Code Tests",
          "value": "codeTests"
        },
        {
          "name": "Code Comments",
          "value": "codeComments"
        },
        {
          "name": "UML Diagram",
          "value": "umlDiagram"
        },
        {
          "name": "Code Optimization",
          "value": "codeOptimization"
        },
        {
          "name": "Generations",
          "value": "generations"
        },
        {
          "name": "User Info",
          "value": "userInfo"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate code documentation",
          "description": "Generate documentation from source code"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "codeDocumentation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate code tests",
          "description": "Generate test cases from source code"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "codeTests"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate code comments",
          "description": "Generate comments for source code"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "codeComments"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate UML diagram",
          "description": "Generate UML diagram from source code"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "umlDiagram"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "optimize",
      "options": [
        {
          "name": "Optimize",
          "value": "optimize",
          "action": "Optimize code",
          "description": "Optimize and refactor source code"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "codeOptimization"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get All",
          "value": "getAll",
          "action": "Get all generations",
          "description": "Get all generations"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get generation",
          "description": "Get a specific generation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "generations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get All",
          "value": "getAll",
          "action": "Get all generations",
          "description": "Get all generations"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get generation",
          "description": "Get a specific generation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "generations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get user info",
          "description": "Get user account information"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "userInfo"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate code documentation",
      "description": "Generate documentation from source code",
      "resource": "codeDocumentation"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate code tests",
      "description": "Generate test cases from source code",
      "resource": "codeTests"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate code comments",
      "description": "Generate comments for source code",
      "resource": "codeComments"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate UML diagram",
      "description": "Generate UML diagram from source code",
      "resource": "umlDiagram"
    },
    {
      "name": "Optimize",
      "value": "optimize",
      "action": "Optimize code",
      "description": "Optimize and refactor source code",
      "resource": "codeOptimization"
    },
    {
      "name": "Get All",
      "value": "getAll",
      "action": "Get all generations",
      "description": "Get all generations",
      "resource": "generations"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get generation",
      "description": "Get a specific generation",
      "resource": "generations"
    },
    {
      "name": "Get All",
      "value": "getAll",
      "action": "Get all generations",
      "description": "Get all generations",
      "resource": "generations"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get generation",
      "description": "Get a specific generation",
      "resource": "generations"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get user info",
      "description": "Get user account information",
      "resource": "userInfo"
    }
  ]

npm_readme:
  # n8n-nodes-docuwriter-ai

  ![DocuWriter.ai Logo](https://www.docuwriter.ai/assets/logo-horizontal.png)

  An n8n community node that integrates with [DocuWriter.ai](https://www.docuwriter.ai) - the AI-powered platform for automated code documentation, testing, and optimization.

  [![npm version](https://badge.fury.io/js/n8n-nodes-docuwriter-ai.svg)](https://badge.fury.io/js/n8n-nodes-docuwriter-ai)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

  ## Features

  ### 🔧 Core Capabilities

  - **Code Documentation Generation**: Transform source code into comprehensive documentation
  - **Automated Test Creation**: Generate test suites for your code
  - **UML Diagram Generation**: Create visual representations of code architecture
  - **Code Optimization**: Get AI-powered suggestions for improving code quality
  - **Generation Management**: Access and retrieve previously generated content
  - **User Info**: Check account status and credit balance
  - **Webhook Support**: Real-time triggers when generations are created or updated

  ### 📚 Use Cases

  - **CI/CD Integration**: Automatically generate documentation on code commits
  - **Quality Assurance**: Create test suites for new features
  - **Code Review Automation**: Generate optimization suggestions and architectural diagrams
  - **Documentation Maintenance**: Keep project documentation up-to-date automatically

  ## Installation

  ### Prerequisites

  - n8n version 0.198.0 or later
  - DocuWriter.ai account and API token

  ### Installation Methods

  #### Community Nodes (Recommended)

  1. In your n8n instance, go to **Settings** > **Community Nodes**
  2. Click **Install a community node**
  3. Enter: `n8n-nodes-docuwriter-ai`
  4. Click **Install**

  #### Manual Installation

  ```bash
  # Install via npm
  npm install n8n-nodes-docuwriter-ai
  ```

  ## Configuration

  ### 1. Get Your API Token

  1. Visit [DocuWriter.ai](https://app.docuwriter.ai)
  2. Sign up or log in to your account
  3. Navigate to **Settings** > **API Keys**
  4. Generate a new API token
  5. Copy the token for use in n8n

  ### 2. Configure Credentials in n8n

  1. In n8n, go to **Credentials**
  2. Click **Create New Credential**
  3. Search for and select **DocuWriter.ai API**
  4. Fill in your credentials:
     - **API Token**: Your DocuWriter.ai API token
     - **Base URL**: `https://app.docuwriter.ai` (default)
  5. Click **Save**

  ## How It Works

  The DocuWriter.ai n8n integration provides seamless automation for code documentation, testing, and optimization:

  ### Integration Architecture

  ```mermaid
  graph TB
      subgraph "n8n Workflow"
          TN[Trigger Nodes]
          AN[Action Nodes]
          ON[Other n8n Nodes]
      end
      
      subgraph "DocuWriter.ai Platform"
          API[DocuWriter API]
          AI[AI Processing Engine]
          DB[(User Data & Generations)]
      end
      
      subgraph "External Systems"
          GH[GitHub/GitLab]
          GD[Google Drive]
          SL[Slack/Discord]
          EM[Email Services]
      end
      
      TN -->|Webhook Events| AN
      AN -->|API Requests| API
      API --> AI
      AI --> DB
      API -->|Generated Content| AN
      AN --> ON
      ON --> GH
      ON --> GD
      ON --> SL
      ON --> EM
  ```

  ### Action Node Workflow

  ```mermaid
  sequenceDiagram
      participant W as n8n Workflow
      participant DN as DocuWriter Node
      participant API as DocuWriter API
      participant AI as AI Engine
      
      W->>DN: Source Code + Parameters
      DN->>API: POST /n8n/code-documentation
      Note over API: Authenticate with Bearer Token
      API->>AI: Process Code
      AI->>AI: Generate Documentation/Tests/UML
      AI-->>API: Generated Content
      API-->>DN: Response with Generated Data
      DN-->>W: Formatted Output for Next Node
  ```

  ### Trigger Node Workflow

  ```mermaid
  sequenceDiagram
      participant DW as DocuWriter.ai
      participant WH as Webhook System
      participant TN as Trigger Node
      participant W as n8n Workflow
      
      Note over DW: User generates documentation
      DW->>WH: generation.created event
      WH->>TN: POST webhook with payload
      TN->>TN: Filter by event type
      TN->>TN: Process generation data
      TN-->>W: Trigger workflow execution
      W->>W: Process generation content
  ```

  ## Usage

  The DocuWriter.ai integration provides two main node types:

  ## Action Node

  The DocuWriter.ai action node provides multiple resources and operations for generating content:

  ### Resources

  #### Code Documentation
  Generate comprehensive documentation from source code.

  **Parameters:**
  - `sourceCode` (required): The source code to analyze
  - `filename` (required): Filename for context
    (Mode is always Accurate)
  - `outputLanguage`: Language for documentation (default: English)
  - `documentationType`: Type of documentation to generate

  #### Code Tests
  Generate automated test suites.

  **Parameters:**
  - `sourceCode` (required): The source code to test
  - `filename` (required): Filename for context
  - `testFramework`: Testing framework to use (auto-detect available)
  - `testType`: Type of tests (unit tests, etc.)

  #### UML Diagram
  Create visual diagrams from code structure.

  **Parameters:**
  - `sourceCode` (required): The source code to analyze
  - `filename` (required): Filename for context
  - `diagramType` (required): Type of UML diagram (class, sequence, use_case, activity, component, state, object)

  #### Code Optimization
  Get AI-powered code improvement suggestions.

  **Parameters:**
  - `sourceCode` (required): The source code to optimize
  - `filename` (required): Filename for context
  - `optimizationFocus`: Focus area (all, performance, readability, maintainability, security)

  #### Generations
  Retrieve previously generated content.

  **Operations:**
  - `Get All`: List all generations with optional filtering by type and limit
  - `Get`: Retrieve a specific generation by ID

  #### User Info
  Get account information and remaining credits.

  ## Trigger Node

  The DocuWriter.ai Trigger node allows you to create workflows that respond to events in DocuWriter.ai.

  ### Supported Events

  - **Generation Created**: Triggers when a new generation is created
  - **Generation Updated**: Triggers when a generation is updated

  ### Event Filtering

  - **Filter by Generation Type**: Optionally filter events by specific generation types
  - **Generation Types**: Choose from available types including Documentation, Tests, Optimizer, Converter, Swagger API Docs, Comment, Diagrams, and Git-based generations

  ### Webhook Payload Structure

  ```json
  {
    "event": "generation.created",
    "timestamp": "2024-01-15T10:30:00Z",
    "data": {
      "uuid": "550e8400-e29b-41d4-a716-446655440000",
      "filename": "example.js",
      "generation_type": "[Basic] => Documentation",
      "generated_by_user": "user@example.com",
      "updated_at": "2024-01-15T10:30:00Z",
      "tag": "project-alpha"
    }
  }
  ```

  ## Examples

  ### Basic Code Documentation

  ```json
  {
    "resource": "codeDocumentation",
    "operation": "generate",
    "sourceCode": "function calculateTotal(items) {\n  return items.reduce((sum, item) => sum + item.price, 0);\n}",
    "filename": "calculator.js",
    
  }
  ```

  ### Generate Tests

  ```json
  {
    "resource": "codeTests",
    "operation": "generate",
    "sourceCode": "class User {\n  constructor(name) {\n    this.name = name;\n  }\n}",
    "filename": "User.js",
    "testFramework": "auto-detect"
  }
  ```

  ### Create UML Class Diagram

  ```json
  {
    "resource": "umlDiagram",
    "operation": "generate",
    "sourceCode": "public class Vehicle {\n  private String brand;\n  public void start() {}\n}",
    "filename": "Vehicle.java",
    "diagramType": "class"
  }
  ```

  ## Workflow Examples

  ### Example: Automated Code Quality Pipeline

  ```mermaid
  graph LR
      FU[File Upload Trigger] --> RF[Read File]
      RF --> DOC[Generate Documentation]
      RF --> TEST[Generate Tests]
      RF --> UML[Generate UML]
      RF --> OPT[Optimize Code]
      
      DOC --> REP[Create Quality Report]
      TEST --> REP
      UML --> REP
      OPT --> REP
      
      REP --> SAVE[Save Report]
      REP --> CHECK{Quality Score > 70?}
      
      CHECK -->|Yes| SLACK[✅ Success Notification]
      CHECK -->|No| EMAIL[⚠️ Quality Alert]
      
      SAVE --> GITHUB[Commit to Repository]
  ```

  ### Example: Real-time Generation Processing

  ```mermaid
  graph LR
      DW[DocuWriter.ai] -->|generation.created| WH[Webhook Trigger]
      WH --> FILTER{Filter Event Type}
      
      FILTER -->|Documentation| DOCS[Fetch Generation]
      FILTER -->|Tests| TESTS[Generate Additional Tests]
      
      DOCS --> GD[Save to Google Drive]
      TESTS --> GH[Commit to GitHub]
      
      GD --> NOTIFY[Slack Notification]
      GH --> NOTIFY
  ```

  We provide complete example workflows in the `/examples/workflows/` directory:

  - **[Automated Testing Workflow](./examples/workflows/automated-testing-workflow.json)**: Generate tests, optimize code, and create UML diagrams
  - **[Generation Created Webhook](./examples/workflows/generation-created-webhook.json)**: Process new generations in real-time

  ## API Reference

  ### Response Format

  All DocuWriter.ai API responses follow this format:

  ```json
  {
    "success": true,
    "data": {
      // Generated content and metadata
    }
  }
  ```

  ### Error Handling

  When an error occurs, the response will include error information. The node supports n8n's built-in error handling and will return execution data even on failures when "Continue on Fail" is enabled.

  ## Troubleshooting

  ### Common Issues

  #### Authentication Failed
  **Solution**: Verify your API token in the credentials configuration and ensure it's valid.

  #### Code Too Large
  **Solution**: Break down large files into smaller components or use the "Faster" mode.

  #### No Credits Remaining
  **Solution**: Check your account status and upgrade your DocuWriter.ai subscription if needed.

  ### Debug Mode

  Enable debug logging in n8n to troubleshoot issues:

  1. Check n8n execution logs for detailed error information
  2. Verify request/response data in the execution history
  3. Test credentials using the built-in test functionality

  ## Support

  ### Documentation
  - [n8n Community Forum](https://community.n8n.io)

  ### Contact
  - **Email**: support@docuwriter.ai
  - **GitHub Issues**: [Report bugs](https://github.com/DocuWriter-ai/n8n-nodes-docuwriter-ai/issues)

  ## Contributing

  We welcome contributions! Please feel free to submit issues and pull requests.

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

  ## License

  This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

  ## Changelog

  ### v1.1.1
  - **API Migration Complete**: All endpoints now use the unified GenerationsController
  - Added support for Swagger API generation
  - Added support for Repository listing
  - Enhanced error handling and validation
  - Improved documentation and examples

  ### v1.1.0
  - **BREAKING CHANGE**: Migrated to unified GenerationsController API endpoints
  - Updated all endpoints to use the standardized `/api/generate-*` paths
  - Added support for code comments generation
  - Updated UML diagram generation to use new API
  - Updated generations listing and retrieval to use new API
  - Updated user info endpoint to use new API
  - Improved parameter handling and validation
  - Better consistency with DocuWriter.ai platform API standards

  ### v1.0.8
  - Fixed "Invalid URL" error by properly constructing full API URLs
  - Improved error handling and URL validation
  - Removed unnecessary requestDefaults configuration

  ### v1.0.7
  - Fixed icons not displaying in n8n interface
  - Updated build process to correctly copy SVG icon files to dist directory
  - Added cross-platform copyfiles dependency for better build compatibility

  ### v1.0.2
  - Updated documentation to reflect actual implemented features
  - Removed unimplemented workflow examples
  - Cleaned up README to accurately describe available functionality

  ### v1.0.1
  - Fixed repository URL to point to correct GitHub organization

  ### v1.0.0
  - Initial release
  - Core documentation generation
  - Test suite creation
  - UML diagram generation
  - Code optimization features
  - Generation management
  - User info retrieval
  - Webhook trigger support
  - Complete n8n integration

  ---

  Built with ❤️ by the [DocuWriter.ai](https://www.docuwriter.ai) team

ai_documentation_summary:
  {"purpose":"This n8n community node integrates with DocuWriter.ai to automate code documentation, test generation, UML diagram creation, and code optimization using AI.","capabilities":["Generate comprehensive code documentation from source code","Create automated test suites with framework auto-detection","Generate UML diagrams (class, sequence, use case, activity, component, state, object)","Provide AI-powered code optimization suggestions","Retrieve previously generated content by ID or list all generations","Check account status and credit balance","Support webhook triggers for real-time event responses"],"authentication":"API key required (DocuWriter.ai API token)","commonUseCases":["Automatically generate documentation on code commits in CI/CD pipelines","Create test suites for new features during development","Generate architectural diagrams and optimization suggestions for code reviews","Maintain project documentation automatically"],"limitations":["Requires n8n version 0.198.0 or later","Requires a separate DocuWriter.ai account and API token","Documentation mode is always set to 'Accurate' and cannot be changed"],"relatedNodes":["GitHub Webhook","GitLab Webhook","Google Drive","Slack","Discord"]}


node_type: n8n-nodes-memara.memara
package_name: n8n-nodes-memara
display_name: Memara
description: Store and retrieve memories from Memara with semantic search
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: memaraio
author_github_url: https://github.com/memara-memory/
npm_package_name: n8n-nodes-memara
npm_version: 1.0.4
community_fetched_at: 2026-04-16T09:43:35.910Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "hidden",
      "default": "memory",
      "description": "n8n integrations work with memories within your assigned space",
      "displayName": "Resource"
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Memory",
          "value": "create",
          "action": "Create a memory",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true, \"id\": $response.body.id, \"memory\": $response.body } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "/api/v1/n8n/memories",
              "body": {
                "tags": "={{$parameter.tags ? $parameter.tags.split(\",\").map((tag) => tag.trim()).filter(Boolean) : []}}",
                "title": "={{$parameter.title}}",
                "content": "={{$parameter.content}}"
              },
              "method": "POST"
            }
          },
          "description": "Store information as a memory"
        },
        {
          "name": "Search Memories",
          "value": "search",
          "action": "Search memories",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ $response.body.memories || [] }}"
                  }
                }
              ]
            },
            "request": {
              "url": "/api/v1/n8n/search",
              "body": {
                "limit": "={{$parameter.limit || 10}}",
                "query": "={{$parameter.query}}"
              },
              "method": "POST"
            }
          },
          "description": "Find relevant memories using semantic search"
        },
        {
          "name": "Update Memory",
          "value": "update",
          "action": "Update a memory",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true, \"id\": $parameter.memoryId, \"memory\": $response.body } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/api/v1/n8n/memories/{{$parameter.memoryId}}",
              "body": {
                "tags": "={{$parameter.tags ? $parameter.tags.split(\",\").map((tag) => tag.trim()).filter(Boolean) : undefined}}",
                "title": "={{$parameter.title}}",
                "content": "={{$parameter.content}}"
              },
              "method": "PUT"
            }
          },
          "description": "Modify an existing memory"
        },
        {
          "name": "Delete Memory",
          "value": "delete",
          "action": "Delete a memory",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true, \"id\": $parameter.memoryId, \"deleted\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/api/v1/n8n/memories/{{$parameter.memoryId}}",
              "method": "DELETE"
            }
          },
          "description": "Remove a memory permanently"
        },
        {
          "name": "List Memories",
          "value": "list",
          "action": "List memories",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ $response.body.memories || [] }}"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "limit": "={{$parameter.limit || 50}}",
                "offset": "={{$parameter.offset || 0}}"
              },
              "url": "/api/v1/n8n/memories",
              "method": "GET"
            }
          },
          "description": "Get memories from your space"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "memory"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Memory",
      "value": "create",
      "action": "Create a memory",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true, \"id\": $response.body.id, \"memory\": $response.body } }}"
              }
            }
          ]
        },
        "request": {
          "url": "/api/v1/n8n/memories",
          "body": {
            "tags": "={{$parameter.tags ? $parameter.tags.split(\",\").map((tag) => tag.trim()).filter(Boolean) : []}}",
            "title": "={{$parameter.title}}",
            "content": "={{$parameter.content}}"
          },
          "method": "POST"
        }
      },
      "description": "Store information as a memory",
      "resource": "memory"
    },
    {
      "name": "Search Memories",
      "value": "search",
      "action": "Search memories",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ $response.body.memories || [] }}"
              }
            }
          ]
        },
        "request": {
          "url": "/api/v1/n8n/search",
          "body": {
            "limit": "={{$parameter.limit || 10}}",
            "query": "={{$parameter.query}}"
          },
          "method": "POST"
        }
      },
      "description": "Find relevant memories using semantic search",
      "resource": "memory"
    },
    {
      "name": "Update Memory",
      "value": "update",
      "action": "Update a memory",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true, \"id\": $parameter.memoryId, \"memory\": $response.body } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/api/v1/n8n/memories/{{$parameter.memoryId}}",
          "body": {
            "tags": "={{$parameter.tags ? $parameter.tags.split(\",\").map((tag) => tag.trim()).filter(Boolean) : undefined}}",
            "title": "={{$parameter.title}}",
            "content": "={{$parameter.content}}"
          },
          "method": "PUT"
        }
      },
      "description": "Modify an existing memory",
      "resource": "memory"
    },
    {
      "name": "Delete Memory",
      "value": "delete",
      "action": "Delete a memory",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true, \"id\": $parameter.memoryId, \"deleted\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/api/v1/n8n/memories/{{$parameter.memoryId}}",
          "method": "DELETE"
        }
      },
      "description": "Remove a memory permanently",
      "resource": "memory"
    },
    {
      "name": "List Memories",
      "value": "list",
      "action": "List memories",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ $response.body.memories || [] }}"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "limit": "={{$parameter.limit || 50}}",
            "offset": "={{$parameter.offset || 0}}"
          },
          "url": "/api/v1/n8n/memories",
          "method": "GET"
        }
      },
      "description": "Get memories from your space",
      "resource": "memory"
    }
  ]

npm_readme:
  # Memara n8n Community Node

  ![Memara Logo](https://raw.githubusercontent.com/hayzem/memara/main/brand/logos/image2vector.svg)

  n8n community package **n8n-nodes-memara** integrates Memara’s semantic memory API. Version **2.x** exposes **five action nodes** (one operation each) so you can pick the right step from the node panel without an operation dropdown. From **2.1.0** onward it also ships **three polling triggers** aligned with common Zapier-style patterns (with the API limitations described below).

  ## Features

  ### Action nodes

  - **Memara Create Memory** — store content with optional title and tags
  - **Memara Search Memories** — semantic search with limit
  - **Memara Update Memory** — update by memory ID
  - **Memara Delete Memory** — delete by memory ID
  - **Memara List Memories** — paginated list (limit / offset)

  ### Polling triggers (2.1+)

  - **Memara Trigger: New Memory** — polls `GET /api/v1/n8n/memories`; first successful poll establishes a baseline (no run), then new items are detected by `created_at` and same-second `id` handling within the configured list window.
  - **Memara Trigger: Memory Updated** — best-effort: compares a fingerprint of list fields per memory **only for memories returned in the current list window**; not a guarantee for the entire space.
  - **Memara Trigger: Search Match** — polls `POST /api/v1/n8n/search`; emits memories whose ids newly appear in the top-N search results. **Similarity scores are not returned** on this API path, so threshold filtering is not supported.

  **Shared credentials** — one **Memara API** credential for all nodes and triggers.

  **AI tools** — action nodes are usable as tools where your n8n version supports it (triggers are not tools).

  ### Polling costs and limits

  Each poll is a real Memara API call and counts toward your plan limits. Triggers only see memories inside the **fetched page** (`limit` ≤ 100 for list, ≤ 50 for search). If more new memories arrive between polls than fit in that window, some may not be observed—design workflows and limits accordingly.

  ## Installation

  ### Option 1: Community Nodes (recommended)

  1. In n8n: **Settings** → **Community Nodes**
  2. Install package: `n8n-nodes-memara`
  3. Restart n8n if prompted

  ### Option 2: npm

  ```bash
  npm install n8n-nodes-memara
  ```

  ### Option 3: Local development

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

  cd ~/.n8n/nodes
  npm link n8n-nodes-memara
  ```

  ## Configuration

  ### 1. API key

  1. Open [Memara](https://app.memara.io) → **Settings** → **API Keys**
  2. Create a key (format `mk_live_...`)

  ### 2. Credential in n8n

  1. Create credential **Memara API**
  2. Paste **API Key**
  3. Optionally override **Base URL** (default `https://api.memara.io`)
  4. Test the connection

  ### 3. Add nodes to a workflow

  1. **Add node** and search for **Memara**
  2. Choose an **action** node (**Memara Create Memory**, **Memara Search Memories**, etc.) or a **trigger** (**Memara Trigger: New Memory**, etc.)
  3. Attach the same **Memara API** credential to each node

  ## Migrating from v1.x

  v1 shipped a single node with internal type `memara` and parameters `resource`, `operation`, and operation-specific fields.

  **v2 removes that node.** Workflows break until you replace each old node with the matching v2 node:

  | v1 `operation` | v2 node | Internal type (`type` in JSON) |
  |----------------|---------|--------------------------------|
  | Create | Memara Create Memory | `memaraCreateMemory` |
  | Search | Memara Search Memories | `memaraSearchMemories` |
  | Update | Memara Update Memory | `memaraUpdateMemory` |
  | Delete | Memara Delete Memory | `memaraDeleteMemory` |
  | List | Memara List Memories | `memaraListMemories` |

  Triggers (2.1+):

  | Trigger | Internal type (`type` in JSON) |
  |---------|----------------------------------|
  | New Memory | `memaraTriggerNewMemory` |
  | Memory Updated | `memaraTriggerMemoryUpdated` |
  | Search Match | `memaraTriggerSearchMatch` |

  Remove `resource` and `operation` from parameters; keep only the fields that node needs (same names as before: `content`, `title`, `tags`, `memoryId`, `query`, `limit`, `offset`).

  **Search / List output:** Each run still produces **one item** whose `json` is the **array of memories** (same shape as v1’s search/list output for typical workflows).

  ## Usage examples (parameters)

  ### Create (Memara Create Memory)

  ```json
  {
    "content": "Customer reported billing issue #12345. Resolved with 10% credit.",
    "title": "Customer issue resolution",
    "tags": "customer-service, billing"
  }
  ```

  ### Search (Memara Search Memories)

  ```json
  {
    "query": "billing problems with customers",
    "limit": 5
  }
  ```

  ### Update (Memara Update Memory)

  ```json
  {
    "memoryId": "mem_...",
    "content": "Updated content",
    "title": "Optional title",
    "tags": "tag1, tag2"
  }
  ```

  ### Delete (Memara Delete Memory)

  ```json
  {
    "memoryId": "mem_..."
  }
  ```

  ### List (Memara List Memories)

  ```json
  {
    "limit": 50,
    "offset": 0
  }
  ```

  ## Common workflow patterns

  1. **Support KB:** Webhook → **Memara Search Memories** → branch on results → **Memara Create Memory** for new resolutions.
  2. **Content assist:** Schedule or external trigger → **Memara Search Memories** → Code / LLM → **Memara Create Memory**.
  3. **React to new memories:** **Memara Trigger: New Memory** → notify Slack / CRM / internal API (each item is one memory payload plus `_memaraTrigger`).

  Example workflow JSON: [`workflows/customer-support-example.json`](workflows/customer-support-example.json). **Polling trigger starter:** [`workflows/new-memory-trigger-example.json`](workflows/new-memory-trigger-example.json).

  ## Parameters reference

  | Node | Required | Optional |
  |------|----------|----------|
  | Create Memory | `content` | `title`, `tags` |
  | Search Memories | `query` | `limit` (default 10) |
  | Update Memory | `memoryId`, `content` | `title`, `tags` |
  | Delete Memory | `memoryId` | — |
  | List Memories | — | `limit` (default 50), `offset` (default 0) |
  | Trigger: New Memory | — | `limit`, `tags`, `source`, `minImportance` |
  | Trigger: Memory Updated | — | `limit`, `tags`, `source`, `minImportance` |
  | Trigger: Search Match | `query` | `limit`, `workflowId`, `filtersJson` |

  ## Troubleshooting

  - **Invalid API key:** Confirm key in Memara dashboard; default API URL is `https://api.memara.io`.
  - **Node not listed:** Reinstall the package, restart n8n, check `npm list n8n-nodes-memara`.

  **Docs:** [memara.io/docs/integrations/n8n](https://memara.io/docs/integrations/n8n) · **Support:** [support@memara.io](mailto:support@memara.io)

  ## Development

  ### Local (no Docker)

  ```bash
  git clone https://github.com/memara-memory/n8n-nodes-memara.git
  cd n8n-nodes-memara
  npm install
  npm run build
  npm run lint
  ```

  ### Docker (recommended parity with CI / publish)

  Uses [`docker-compose.n8n.yml`](docker-compose.n8n.yml) and [`scripts/docker-n8n.sh`](scripts/docker-n8n.sh). From **`packages/memara-n8n-node`**:

  | Goal | Command |
  |------|---------|
  | Start n8n + dev container | `./scripts/docker-n8n.sh dev` or `npm run docker:dev` |
  | Build inside container | `./scripts/docker-n8n.sh build` or `npm run docker:build` |
  | Lint | `./scripts/docker-n8n.sh lint` or `npm run docker:lint` |
  | Lint with autofix | `./scripts/docker-n8n.sh lintfix` or `npm run docker:lintfix` |
  | Prettier | `./scripts/docker-n8n.sh format` or `npm run docker:format` |
  | CI gate (build + lint) | `./scripts/docker-n8n.sh ci` or `npm run docker:ci` |
  | npm pack tarball | `./scripts/docker-n8n.sh pack` or `npm run docker:pack` |
  | Publish to npm | `./scripts/docker-n8n.sh publish` (see below) |

  **n8n community verification scanner** (queries the **public npm** package `n8n-nodes-memara`—useful after you publish a version):

  ```bash
  npm run docker:scan-npm
  # or locally: npm run scan:npm
  ```

  ### Publish to npm via Docker

  Publishing is **manual** (nothing is published from CI in this repo unless you run it). Bump **`package.json` version**, then:

  1. Put your npm access token in **`packages/memara-n8n-node/.env.npm`** (single line, no variable name). The file is gitignored.
  2. From **`packages/memara-n8n-node`**:

  ```bash
  ./scripts/docker-n8n.sh publish
  # or: npm run docker:publish
  # non-interactive:
  ./scripts/docker-n8n.sh publish --yes
  ```

  The script starts **`memara-n8n-dev`** if needed, runs `npm run build` in the container, then publishes using a temporary npm userconfig so your token is not written to the repo’s `package.json` or a persistent `.npmrc`.

  **If publish fails with `403` / two-factor authentication:** npm requires either an interactive publish with OTP, or a **granular access token** that includes **Publish** for `n8n-nodes-memara` and the **“Bypass two-factor authentication”** option (or equivalent automation permission). Classic tokens alone are often blocked when 2FA is enabled on the account.

  ## License

  MIT — see [LICENSE.md](LICENSE.md).

  ---

  Made with care by the [Memara](https://memara.io) team.

ai_documentation_summary:
  {"purpose":"The Memara n8n node integrates Memara's semantic memory system to store, retrieve, and search memories using AI-powered natural language queries within organized memory spaces.","capabilities":["Create memories with content, title, and tags","Search memories using natural language queries","Update existing memories by memory ID","Delete memories by memory ID","List all memories","Create memory spaces for organization","List available memory spaces","Semantic search with configurable result limits","API key authentication"],"authentication":"API key required (format: mk_live_...)","commonUseCases":["Customer support knowledge base with issue resolution tracking","Content creation assistant with contextual search","Lead qualification system with historical comparison","Personal or team knowledge management","Automated documentation generation from interactions"],"limitations":["Requires Memara API key and account access","Search results limited to 1-100 items","Requires n8n version 1.0+","Memory spaces must be created in Memara dashboard first","No built-in error handling or retry logic mentioned"],"relatedNodes":["HTTP Request","Webhook","Code","Email","Slack"]}


node_type: @xano/n8n-nodes-xano.xano
package_name: @xano/n8n-nodes-xano
display_name: Xano
description: Interact with Xano API to manage workspaces, tables, and content.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: xanosean
author_github_url: https://github.com/xano-inc/n8n-nodes-xano.git
npm_package_name: @xano/n8n-nodes-xano
npm_version: 1.0.6
community_fetched_at: 2026-04-16T09:43:35.911Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "table",
      "options": [
        {
          "name": "Table",
          "value": "table"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTableContent",
      "options": [
        {
          "name": "Create Row",
          "value": "createRow",
          "action": "Create a row",
          "description": "Add a new row to a table"
        },
        {
          "name": "Create Row Bulk",
          "value": "bulkCreateContent",
          "action": "Create bulk rows",
          "description": "Bulk create rows in a table"
        },
        {
          "name": "Delete a Row",
          "value": "deleteSingleContent",
          "action": "Delete a row",
          "description": "Delete a single row from a table"
        },
        {
          "name": "Get a Row",
          "value": "getSingleContent",
          "action": "Get a row",
          "description": "Get a single row from a table"
        },
        {
          "name": "Get Many Rows",
          "value": "getTableContent",
          "action": "Get many rows",
          "description": "Get all rows from a table"
        },
        {
          "name": "Search Row",
          "value": "searchRow",
          "action": "Search row",
          "description": "Search for a row in a table"
        },
        {
          "name": "Update Row by ID",
          "value": "updateRow",
          "action": "Update row by ID",
          "description": "Update a new row to a table"
        },
        {
          "name": "Update Rows in Bulk by ID",
          "value": "bulkUpdateContent",
          "action": "Update rows in bulk by ID",
          "description": "Bulk Update rows to a table"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "table"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Row",
      "value": "createRow",
      "action": "Create a row",
      "description": "Add a new row to a table",
      "resource": "table"
    },
    {
      "name": "Create Row Bulk",
      "value": "bulkCreateContent",
      "action": "Create bulk rows",
      "description": "Bulk create rows in a table",
      "resource": "table"
    },
    {
      "name": "Delete a Row",
      "value": "deleteSingleContent",
      "action": "Delete a row",
      "description": "Delete a single row from a table",
      "resource": "table"
    },
    {
      "name": "Get a Row",
      "value": "getSingleContent",
      "action": "Get a row",
      "description": "Get a single row from a table",
      "resource": "table"
    },
    {
      "name": "Get Many Rows",
      "value": "getTableContent",
      "action": "Get many rows",
      "description": "Get all rows from a table",
      "resource": "table"
    },
    {
      "name": "Search Row",
      "value": "searchRow",
      "action": "Search row",
      "description": "Search for a row in a table",
      "resource": "table"
    },
    {
      "name": "Update Row by ID",
      "value": "updateRow",
      "action": "Update row by ID",
      "description": "Update a new row to a table",
      "resource": "table"
    },
    {
      "name": "Update Rows in Bulk by ID",
      "value": "bulkUpdateContent",
      "action": "Update rows in bulk by ID",
      "description": "Bulk Update rows to a table",
      "resource": "table"
    }
  ]

npm_readme:
  # 📘 n8n-nodes-xano — Custom Node Documentation

  This is an n8n community node. It lets you use [Xano](https://www.xano.com/) in your n8n workflows, enabling workflow automation through custom API actions like managing rows, fetching table schemas, and more.

  [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.

  ## 🔧 Operations

  | Action                   | Value (operation)     | Description                              |
  | ------------------------ | --------------------- | ---------------------------------------- |
  | ✅ Create Row            | `createRow`           | Create a new row in a selected table     |
  | ✅ Update Row            | `updateRow`           | Update a row with specific field values  |
  | ✅ Delete Single Content | `deleteSingleContent` | Delete a single row by ID                |
  | ✅ Get a Row             | `getSingleContent`    | Fetch a row by ID                        |
  | ✅ Get Many Rows         | `getTableContent`     | Fetch multiple rows with pagination      |
  | ✅ Create Bulk Rows      | `bulkCreateContent`   | Insert multiple rows                     |
  | ✅ Update Bulk Rows      | `bulkUpdateContent`   | Bulk update multiple records             |
  | ✅ Search Rows           | `searchRow`           | Search using filter queries (JSON input) |

  ## Credentials

  To use this node in your workflows, you’ll need to authenticate your Xano account using the **Metadata API Access Token**.

  ### 🔑 Step 1: Get Your Xano Metadata API Access Token

  1. **Log in to your Xano account**
     Visit: [https://xano.com](https://xano.com)

  2. **Access your instance**
     In the lower-left corner of the dashboard, click **Instances**.

  3. **Open instance settings**
     Click the ⚙️ icon next to your instance name.

  4. **Select Metadata API**
     From the panel that opens, select **Metadata API**.

  5. **Generate an Access Token**
     Click on **➕ Create Token** and configure the following:
     - **Name**: Something descriptive like `n8n integration token`
     - **Expiry**: Set an expiry (e.g. 7 days, or "Never" if preferred)
     - **Scopes**: Select the necessary access:
       - ✅ `Database` (CRUD)

       - ✅ `Content`, `API Groups`, or other required scopes for your use case

     > ⚠️ Make sure to select `Read` and `Update` at a minimum for basic operations.

  6. **Copy the generated access token**
     This token will be shown only once. Store it securely.

  ### 🔌 Step 2: Add Credentials in n8n

  1. Open your n8n instance
  2. Go to **Credentials** and click **"New"**
  3. Search for **Xano API** (your node’s credential type)
  4. In the **Access Token** field, paste the token from Xano

  #### ✅ Successful connection will show:

  ![Connection Success](./assets/success.png)

  #### ❌ If token is invalid or expired:

  ![Connection Failed](./assets/error.png)

  > If the token is invalid, regenerate one from Xano and repeat the above steps.

  ### ✅ Final Step

  Once the connection is verified, you’re ready to start using Xano in your workflows via this custom node!

  ## Compatibility

  Tested on n8n v1.100.0 and above.

  ## Usage

  Note about the **Search Rows** operation. It uses a simplified version of the [external filtering search](https://docs.xano.com/xano-features/metadata-api/search#search) syntax.

  Here's a quick example where I'm searching for the record where id = 2.

  `[{"id|=":"2"}]`

  Simply add the JSON above to the Search field.

  **Pro tip**: Open Dev Tools in your browser then use the Xano UI filter in your table view to see what syntax gets generated by the /content API request, then copy the value from the search field in the payload and use that.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Xano Documentation](https://docs.xano.com/)

  ## Version history

  ### 1.0.1

  - Initial release

  ### 1.0.2

  - Minor updates

  ### 1.0.3

  - Minor updates

  ### 1.0.4

  - Minor updates

  ### 1.0.5

  - Minor updates

ai_documentation_summary:
  {"purpose":"This n8n community node enables workflow automation by interacting with the Xano API to manage workspaces, tables, and content through CRUD operations and search functionality.","capabilities":["Create a new row in a selected table","Update a row with specific field values","Delete a single row by ID","Fetch a row by ID","Fetch multiple rows with pagination","Insert multiple rows in bulk","Update multiple records in bulk","Search rows using filter queries (JSON input)"],"authentication":"API key required (Xano Metadata API Access Token with Database scope)","commonUseCases":["Automating data entry into Xano tables","Syncing data between n8n and Xano databases","Bulk data migration or updates","Searching and filtering Xano content dynamically"],"limitations":["Search Rows operation uses a simplified version of Xano's external filtering search syntax","Requires manual configuration of token scopes (Database, Content, API Groups) in Xano dashboard","Token must be generated with specific scopes and may expire based on configured settings"],"relatedNodes":["n8n community nodes","Xano API nodes"]}


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

updated_at: 2026-04-16 09:43:35
author_name: docuprox
author_github_url: https://github.com/docuprox/n8n-docuprox.git
npm_package_name: n8n-nodes-docuprox
npm_version: 1.1.0
community_fetched_at: 2026-04-16T09:43:35.911Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  AI-powered document data extraction using DocuProx. Use AI Agents with natural language prompts or AI-driven template extraction to pull structured data from documents in real-time or via high-volume batch processing.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "document",
      "options": [
        {
          "name": "Document",
          "value": "document",
          "description": "Process individual document images in real-time. Supports both predefined Template IDs and AI-powered extraction without templates."
        },
        {
          "name": "Job",
          "value": "job",
          "description": "Submit and manage high-volume batch processing for multiple documents within a ZIP file"
        }
      ],
      "required": true,
      "displayName": "Resource"
    },
    {
      "name": "operation",
      "type": "options",
      "default": "process_agent",
      "options": [
        {
          "name": "Process Agent",
          "value": "process_agent",
          "action": "Process with agent",
          "description": "Process documents via the DocuProx API. Extract structured data using manual or AI-generated prompts, no template required."
        },
        {
          "name": "Process",
          "value": "process",
          "action": "Process a document",
          "description": "Extract document data in real-time by providing a Template ID (UUID) from your DocuProx dashboard"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "options",
      "default": "processJob",
      "options": [
        {
          "name": "Submit Job",
          "value": "processJob",
          "action": "Submit a job",
          "description": "Submit a batch job containing multiple documents in a ZIP file to the DocuProx API for background processing"
        },
        {
          "name": "Get Job Status",
          "value": "jobStatus",
          "action": "Get job status",
          "description": "Get the current processing status, progress percentage, and result metadata for a submitted batch job"
        },
        {
          "name": "Get Job Results",
          "value": "jobResults",
          "action": "Get job results",
          "description": "Retrieve the fully extracted structured data (JSON/CSV) for all documents contained in a completed batch job"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "job"
          ]
        }
      }
    }
  ]

operations:
  [
    {
      "name": "Process Agent",
      "value": "process_agent",
      "action": "Process with agent",
      "description": "Process documents via the DocuProx API. Extract structured data using manual or AI-generated prompts, no template required.",
      "resource": "document"
    },
    {
      "name": "Process",
      "value": "process",
      "action": "Process a document",
      "description": "Extract document data in real-time by providing a Template ID (UUID) from your DocuProx dashboard",
      "resource": "document"
    },
    {
      "name": "Submit Job",
      "value": "processJob",
      "action": "Submit a job",
      "description": "Submit a batch job containing multiple documents in a ZIP file to the DocuProx API for background processing",
      "resource": "job"
    },
    {
      "name": "Get Job Status",
      "value": "jobStatus",
      "action": "Get job status",
      "description": "Get the current processing status, progress percentage, and result metadata for a submitted batch job",
      "resource": "job"
    },
    {
      "name": "Get Job Results",
      "value": "jobResults",
      "action": "Get job results",
      "description": "Retrieve the fully extracted structured data (JSON/CSV) for all documents contained in a completed batch job",
      "resource": "job"
    }
  ]

npm_readme:
  # n8n-nodes-docuprox

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

  An **n8n community node** for AI-powered document processing and data extraction via the [DocuProx API](https://docuprox.com). Extract structured data from documents using manual or AI-generated prompts — no template required.

  > Automate document data extraction in your n8n workflows. Supports invoices, passports, ID cards, receipts, contracts, and more.

  ## What is DocuProx?

  [DocuProx](https://docuprox.com) is an AI-powered document extraction platform. This n8n node lets you integrate DocuProx directly into your automation workflows — extract structured fields from any document image in real-time or process thousands of documents via batch jobs.

  ## Features

  - **AI Agent Extraction** — Extract any field using natural language prompts. No dashboard template needed.
  - **Template-Based Extraction** — Use a pre-built Template ID (UUID) from your DocuProx dashboard for consistent, structured extraction.
  - **Batch Processing** — Submit a ZIP of documents for high-volume background processing and retrieve results in JSON or CSV.
  - **Flexible Input** — Supports binary file uploads and Base64 encoded images.
  - **Real-Time Results** — Synchronous processing returns structured data immediately.

  ## Supported Document Types

  Works with any document type, including:

  - Passports & ID Cards
  - Invoices & Receipts
  - Contracts & Agreements
  - Bank Statements
  - Medical Records
  - Custom document types via AI prompts

  ## Installation

  ### Via n8n Community Nodes (Recommended)

  1. Open your n8n instance
  2. Go to **Settings → Community Nodes**
  3. Search for `n8n-nodes-docuprox`
  4. Click **Install**
  5. Restart n8n

  ### Manual Installation

  ```bash
  npm install n8n-nodes-docuprox
  ```

  ## Credentials Setup

  1. Go to **Settings → Credentials** in your n8n instance
  2. Create a new credential of type **DocuProx API**
  3. Enter your [DocuProx API key](https://docuprox.com)
  4. Save the credential

  ## Usage

  ### Document → Process Agent _(AI extraction, no template needed)_

  Use natural language prompts to extract any field from a document without creating a dashboard template.

  1. Select **Resource**: `Document`
  2. Select **Operation**: `Process Agent`
  3. Choose **Selection Method**: `Structured Form`
  4. Set **Document Type** (e.g. `passport`, `invoice`)
  5. Add **Prompts** — define fields to extract:
     - Key: `passport_number` → Instruction: `Extract the passport number`
     - Key: `full_name` → Instruction: `Extract the full name`
  6. Upload your document image

  ### Document → Process _(Template-based extraction)_

  Use a Template ID (UUID) from your DocuProx dashboard for structured extraction.

  1. Select **Resource**: `Document`
  2. Select **Operation**: `Process`
  3. Enter your **Template ID** (UUID)
  4. Upload your document image

  ### Job → Batch Processing

  Submit a ZIP file containing multiple documents for high-volume background processing.

  1. **Submit Job** — Upload ZIP + Template ID → returns a `Job ID`
  2. **Get Job Status** — Poll with `Job ID` until status is `SUCCESS`
  3. **Get Job Results** — Retrieve extracted data in JSON or CSV format

  ## Node Properties

  **Document → Process**
  | Field | Required | Description |
  |---|---|---|
  | Template ID | Yes | UUID from your DocuProx dashboard |
  | Image Source | Yes | Binary file upload or Base64 string |
  | Static Values | No | Additional key-value metadata |

  **Document → Process Agent**
  | Field | Required | Description |
  |---|---|---|
  | Selection Method | Yes | Structured Form or Manual JSON |
  | Document Type | Yes | e.g. `passport`, `invoice`, `receipt` |
  | Custom Instructions | No | Natural language guidance for the AI |
  | Prompts | Yes | Field name + extraction instruction pairs |
  | Static Values | No | Additional key-value metadata |

  **Job → Submit Job**
  | Field | Required | Description |
  |---|---|---|
  | Template ID | Yes | UUID from your DocuProx dashboard |
  | Binary Property Name | Yes | Property containing the ZIP file |
  | Static Values | No | Additional key-value metadata |

  **Job → Get Job Status / Get Job Results**
  | Field | Required | Description |
  |---|---|---|
  | Job ID | Yes | UUID returned from Submit Job |
  | Result Format | No | `json` (default) or `csv` |

  ## Job Status Values

  | Status | Description |
  |---|---|
  | `NEW` | Job created and queued for processing |
  | `UNZIP FILE` | Extracting files from the uploaded ZIP archive |
  | `UNZIP FILE SUCCESS` | ZIP extraction completed successfully |
  | `UNZIP FILE FAILED` | ZIP extraction failed |
  | `PROCESS IMAGE` | Processing document images for data extraction |
  | `PROCESS IMAGE SUCCESS` | Image processing completed successfully |
  | `PROCESS IMAGE FAILED` | Image processing failed |
  | `SUCCESS` | Job completed — results are ready to retrieve |
  | `FAILED` | Job processing failed |

  ## API Reference

  ### Input

  | Operation | Key Inputs |
  |---|---|
  | Process | Template ID (UUID), Image (binary or Base64), Static Values (optional) |
  | Process Agent | Document Type, Custom Instructions, Prompts (key-value), Image |
  | Submit Job | Template ID (UUID), ZIP file (binary), Static Values (optional) |
  | Get Job Status | Job ID (UUID) |
  | Get Job Results | Job ID (UUID), Result Format (JSON or CSV) |

  ### Output

  | Operation | Output Fields |
  |---|---|
  | Process | `success`, `templateId`, `response`, `timestamp` |
  | Process Agent | `success`, `response`, `timestamp` |
  | Submit Job | `success`, `templateId`, `response`, `timestamp` |
  | Get Job Status | `success`, `jobId`, `response`, `timestamp` |
  | Get Job Results | `success`, `jobId`, `resultFormat`, `total_records`, `results` / `results_csv` |

  ### Error Handling

  The node includes built-in error handling. Enable **Continue on Fail** in the node settings to handle errors gracefully within your workflow.

  ## Resources

  - [DocuProx Documentation](https://docuprox.com/docs/)
  - [Getting Started Guide](https://docuprox.com/docs/getting-started/)
  - [n8n Integration Guide](https://docuprox.com/docs/integration/n8n/)
  - [DocuProx Dashboard](https://app.docuprox.com/login)

  ## Development

  ```bash
  npm install       # Install dependencies
  npm run build     # Build TypeScript
  npm run dev       # Watch mode
  ```

  ### Project Structure

  ```
  ├── credentials/
  │   └── DocuProxApi.credentials.ts    # API credentials definition
  ├── nodes/
  │   └── DocuProx/
  │       ├── DocuProx.node.ts          # Main node implementation
  │       └── douprox-logo.svg          # Node icon
  ├── dist/                             # Built files
  ├── package.json
  └── README.md
  ```

  ### Release & npm Publish

  1. Add `NPM_TOKEN` to GitHub repository secrets
  2. Bump `version` in `package.json`
  3. Push a tag in `vX.Y.Z` format (e.g. `v1.1.0`)
  4. GitHub Actions will build and run `npm publish --provenance`

  ## License

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

ai_documentation_summary:
  {"purpose":"Processes documents using the DocuProx API by applying AI-powered document processing templates to extract structured data from uploaded images.","capabilities":["Process documents using predefined DocuProx templates","Accept image input as binary file uploads","Accept image input as Base64 encoded strings","Extract structured data from documents","Return processed document data with success status and API response","Handle API errors with configurable workflow continuation"],"authentication":"API key required (via n8n Credentials system)","commonUseCases":["Extracting text and data from invoices","Processing ID documents for verification","Analyzing receipts or forms","Automating document data entry into databases"],"limitations":["Requires a valid DocuProx API key and template ID","Input must be provided as an image file or Base64 string","Dependent on DocuProx API availability and template support"],"relatedNodes":["n8n-nodes-base.credential","n8n-nodes-base.binaryData","n8n-nodes-base.httpRequest"]}


