# nodes

node_type: n8n-nodes-targetare.targetareRo
package_name: n8n-nodes-targetare
display_name: Targetare.ro
description: Get data from Targetare.ro API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: apps_makeitfuture
author_github_url: https://github.com/avramandrei85/
npm_package_name: n8n-nodes-targetare
npm_version: 1.0.7
community_fetched_at: 2026-01-07T20:08:16.014Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "companies",
      "options": [
        {
          "name": "Company",
          "value": "companies"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getByRegistration",
      "options": [
        {
          "name": "Get By CUI",
          "value": "getByTaxId",
          "action": "Get company by cui",
          "routing": {
            "request": {
              "url": "=/companies/{{$parameter.taxId}}",
              "method": "GET"
            }
          },
          "description": "Get a single company by its CUI"
        },
        {
          "name": "Get By Registration Date",
          "value": "getByRegistration",
          "action": "Get companies by registration date",
          "routing": {
            "request": {
              "url": "/companies/",
              "method": "GET"
            }
          },
          "description": "Get companies registered from a specific date"
        },
        {
          "name": "Get Company Administrators by CUI",
          "value": "getAdministratorsByTaxId",
          "action": "Get company administrators by cui",
          "routing": {
            "request": {
              "url": "=/companies/{{$parameter.taxId}}/administrators",
              "method": "GET"
            }
          },
          "description": "Get company Administrators by its CUI"
        },
        {
          "name": "Get Company Emails by CUI",
          "value": "getEmailsByTaxId",
          "action": "Get company emails by cui",
          "routing": {
            "request": {
              "url": "=/companies/{{$parameter.taxId}}/emails",
              "method": "GET"
            }
          },
          "description": "Get company Emails by its CUI"
        },
        {
          "name": "Get Company Financial by CUI",
          "value": "getFinancialByTaxId",
          "action": "Get company financial by cui",
          "routing": {
            "request": {
              "url": "=/companies/{{$parameter.taxId}}/financial",
              "method": "GET"
            }
          },
          "description": "Get company financial information by its CUI"
        },
        {
          "name": "Get Company Phones by CUI",
          "value": "getPhonesByTaxId",
          "action": "Get company phones by cui",
          "routing": {
            "request": {
              "url": "=/companies/{{$parameter.taxId}}/phones",
              "method": "GET"
            }
          },
          "description": "Get company Phones by its CUI"
        },
        {
          "name": "Get Company Websites by CUI",
          "value": "getWebsitesByTaxId",
          "action": "Get company websites by cui",
          "routing": {
            "request": {
              "url": "=/companies/{{$parameter.taxId}}/websites",
              "method": "GET"
            }
          },
          "description": "Get company Websites by its CUI"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "companies"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get By CUI",
      "value": "getByTaxId",
      "action": "Get company by cui",
      "routing": {
        "request": {
          "url": "=/companies/{{$parameter.taxId}}",
          "method": "GET"
        }
      },
      "description": "Get a single company by its CUI"
    },
    {
      "name": "Get By Registration Date",
      "value": "getByRegistration",
      "action": "Get companies by registration date",
      "routing": {
        "request": {
          "url": "/companies/",
          "method": "GET"
        }
      },
      "description": "Get companies registered from a specific date"
    },
    {
      "name": "Get Company Administrators by CUI",
      "value": "getAdministratorsByTaxId",
      "action": "Get company administrators by cui",
      "routing": {
        "request": {
          "url": "=/companies/{{$parameter.taxId}}/administrators",
          "method": "GET"
        }
      },
      "description": "Get company Administrators by its CUI"
    },
    {
      "name": "Get Company Emails by CUI",
      "value": "getEmailsByTaxId",
      "action": "Get company emails by cui",
      "routing": {
        "request": {
          "url": "=/companies/{{$parameter.taxId}}/emails",
          "method": "GET"
        }
      },
      "description": "Get company Emails by its CUI"
    },
    {
      "name": "Get Company Financial by CUI",
      "value": "getFinancialByTaxId",
      "action": "Get company financial by cui",
      "routing": {
        "request": {
          "url": "=/companies/{{$parameter.taxId}}/financial",
          "method": "GET"
        }
      },
      "description": "Get company financial information by its CUI"
    },
    {
      "name": "Get Company Phones by CUI",
      "value": "getPhonesByTaxId",
      "action": "Get company phones by cui",
      "routing": {
        "request": {
          "url": "=/companies/{{$parameter.taxId}}/phones",
          "method": "GET"
        }
      },
      "description": "Get company Phones by its CUI"
    },
    {
      "name": "Get Company Websites by CUI",
      "value": "getWebsitesByTaxId",
      "action": "Get company websites by cui",
      "routing": {
        "request": {
          "url": "=/companies/{{$parameter.taxId}}/websites",
          "method": "GET"
        }
      },
      "description": "Get company Websites by its CUI"
    }
  ]

npm_readme:
  # n8n-nodes-targetare

  ![n8n.io - Targetare.ro Node](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png)

  A community node for [n8n](https://n8n.io) to integrate with the [Targetare.ro API](https://api.targetare.ro).  

  This node allows you to query company data from Targetare.ro, including registration information, financials, contacts, administrators, and more.

  ---

  ## Features

  ✅ Authenticate with your Targetare.ro API key  
  ✅ Get companies by registration date  
  ✅ Look up company by CUI (tax ID)  
  ✅ Retrieve financial data, phones, emails, administrators, websites for a given CUI

  ---

  ## Installation

  Make sure you have [n8n](https://n8n.io) installed locally or on your server.

  Install this community node in your n8n instance:

  ```bash
  npm install n8n-nodes-targetare

ai_documentation_summary:
  {"purpose":"The Targetare.ro node enables n8n users to retrieve company data from the Targetare.ro API, including registration details, financial information, contacts, administrators, and more by using a CUI (tax ID) or registration date.","capabilities":["Authenticate with Targetare.ro API key","Lookup company by CUI (tax ID)","Retrieve financial data for a company","Get contact information (phones, emails, websites)","Retrieve administrator details","Get company data by registration date"],"authentication":"API key required","commonUseCases":["Obtaining company registration and financial data for due diligence","Verifying business details using tax ID (CUI)","Building business intelligence workflows with Romanian company data"],"limitations":[],"relatedNodes":["n8n-nodes-base","n8n-nodes-webhook"]}


node_type: n8n-nodes-starfish.campingCare
package_name: n8n-nodes-starfish
display_name: Starfish (CampingCare/HotelCare)
description: Interact with the Starfish API for CampingCare and HotelCare
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: developerscampingcare
author_github_url: https://github.com/CampingCare/n8n-node.git
npm_package_name: n8n-nodes-starfish
npm_version: 2.0.2
community_fetched_at: 2026-01-07T20:08:16.017Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Accommodations API",
          "value": "accommodations"
        },
        {
          "name": "Administrations API",
          "value": "administrations"
        },
        {
          "name": "Availability API",
          "value": "availability"
        },
        {
          "name": "Categories API",
          "value": "categories"
        },
        {
          "name": "Contacts API",
          "value": "contacts"
        },
        {
          "name": "Exchange Rates API",
          "value": "exchangeRates"
        },
        {
          "name": "Invoices API",
          "value": "invoices"
        },
        {
          "name": "Kiosks API",
          "value": "kiosks"
        },
        {
          "name": "Ledgers API",
          "value": "ledgers"
        },
        {
          "name": "License Plates API",
          "value": "licensePlates"
        },
        {
          "name": "Logs API",
          "value": "logs"
        },
        {
          "name": "Price Calculation API",
          "value": "priceCalculation"
        },
        {
          "name": "Products API",
          "value": "products"
        },
        {
          "name": "Rates API",
          "value": "rates"
        },
        {
          "name": "Reservations API",
          "value": "reservations"
        },
        {
          "name": "Tags API",
          "value": "tags"
        },
        {
          "name": "Timezones API",
          "value": "timezones"
        },
        {
          "name": "Users API",
          "value": "users"
        },
        {
          "name": "Widgets API",
          "value": "widgets"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAccommodations",
      "options": [
        {
          "name": "Places",
          "value": "places",
          "action": "Places",
          "description": "Manage accommodation places"
        },
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage accommodation meta information"
        },
        {
          "name": "Get Accommodations",
          "value": "getAccommodations",
          "action": "Get accommodations",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
                "status[0]": "={{ $parameter[\"status_0\"] || undefined }}",
                "status[1]": "={{ $parameter[\"status_1\"] || undefined }}",
                "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
                "get_services": "={{ $parameter[\"get_services\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}"
              },
              "url": "/accommodations",
              "method": "GET"
            }
          },
          "description": "You can get your accommodations with the get accommodations method"
        },
        {
          "name": "Get Accommodation",
          "value": "getAccommodation",
          "action": "Get accommodation",
          "routing": {
            "request": {
              "qs": {
                "admin_id": "={{ $parameter[\"admin_id\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}"
              },
              "url": "=/accommodations/{{$parameter[\"accommodation_id\"]}}",
              "method": "GET"
            }
          },
          "description": "With this method you can retreive a single accommodation"
        },
        {
          "name": "Add Accommodation",
          "value": "addAccommodation",
          "action": "Add accommodation",
          "routing": {
            "request": {
              "url": "/accommodations",
              "body": {
                "name": "={{ $parameter[\"name\"] }}"
              },
              "method": "POST"
            }
          },
          "description": "With this method you can add a new accommodation"
        },
        {
          "name": "Update Accommodation",
          "value": "updateAccommodation",
          "action": "Update accommodation",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"update_name\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "description": "={{ $parameter[\"description\"] || undefined }}",
                "vat_procent": "={{ $parameter[\"vat_procent\"] || undefined }}"
              },
              "url": "=/accommodations/{{$parameter[\"accommodation_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "With this method you can update an existing accommodation"
        },
        {
          "name": "Delete Accommodation",
          "value": "deleteAccommodation",
          "action": "Delete accommodation",
          "routing": {
            "request": {
              "url": "=/accommodations/{{$parameter[\"accommodation_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "With this method you can delete a single accommodation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accommodations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAdministrations",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage administration meta information"
        },
        {
          "name": "Age Tables",
          "value": "ageTables",
          "action": "Age tables",
          "description": "Get age tables for an administration"
        },
        {
          "name": "Get Places",
          "value": "getPlaces",
          "action": "Get places",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}"
              },
              "url": "=/administrations/{{$parameter[\"admin_id\"]}}/places",
              "method": "GET"
            }
          },
          "description": "Get places for a specific administration"
        },
        {
          "name": "Get Administrations",
          "value": "getAdministrations",
          "action": "Get administrations",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}",
                "get_age_tables": "={{ $parameter[\"get_age_tables\"] || undefined }}",
                "get_accommodations": "={{ $parameter[\"get_accommodations\"] || undefined }}"
              },
              "url": "/administrations",
              "method": "GET"
            }
          },
          "description": "You can retrieve the administrations of a specific user"
        },
        {
          "name": "Get Administration",
          "value": "getAdministration",
          "action": "Get administration",
          "routing": {
            "request": {
              "qs": {
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}",
                "get_age_tables": "={{ $parameter[\"get_age_tables\"] || undefined }}",
                "get_vat_tables": "={{ $parameter[\"get_vat_tables\"] || undefined }}"
              },
              "url": "=/administrations/{{$parameter[\"admin_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single administration by id"
        },
        {
          "name": "Update Administration",
          "value": "updateAdministration",
          "action": "Update administration",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"update_name\"] || undefined }}"
              },
              "url": "=/administrations/{{$parameter[\"admin_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an administration by id"
        },
        {
          "name": "Add Administration",
          "value": "addAdministration",
          "action": "Add administration",
          "routing": {
            "request": {
              "url": "/administrations",
              "body": {
                "name": "={{ $parameter[\"name\"] }}",
                "type": "={{ $parameter[\"type\"] }}"
              },
              "method": "POST"
            }
          },
          "description": "Add a new administration (full PMS or lite version)"
        },
        {
          "name": "Delete Administration",
          "value": "deleteAdministration",
          "action": "Delete administration",
          "routing": {
            "request": {
              "url": "=/administrations/{{$parameter[\"admin_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an administration by id"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "administrations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStock",
      "options": [
        {
          "name": "Get Stock",
          "value": "getStock",
          "action": "Get stock",
          "routing": {
            "request": {
              "qs": {
                "from": "={{ $parameter[\"from\"] || undefined }}",
                "till": "={{ $parameter[\"till\"] || undefined }}",
                "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
                "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}"
              },
              "url": "/availability/stock",
              "method": "GET"
            }
          },
          "description": "Get availability stock for an accommodation"
        },
        {
          "name": "Get Places",
          "value": "getPlaces",
          "action": "Get places",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "backend": "={{ $parameter[\"backend\"] || undefined }}",
                "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
                "place_id": "={{ $parameter[\"place_id\"] || undefined }}",
                "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
                "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}"
              },
              "url": "/availability/places",
              "method": "GET"
            }
          },
          "description": "Get available places"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "availability"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCategories",
      "options": [
        {
          "name": "Get Categories",
          "value": "getCategories",
          "action": "Get categories",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "status[0]": "={{ $parameter[\"status_0\"] || undefined }}",
                "status[1]": "={{ $parameter[\"status_1\"] || undefined }}",
                "status[2]": "={{ $parameter[\"status_2\"] || undefined }}"
              },
              "url": "/categories",
              "method": "GET"
            }
          },
          "description": "Get a list of categories from the system"
        },
        {
          "name": "Get Category",
          "value": "getCategory",
          "action": "Get category",
          "routing": {
            "request": {
              "url": "=/categories/{{$parameter[\"category_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single category by ID"
        },
        {
          "name": "Add Category",
          "value": "addCategory",
          "action": "Add category",
          "routing": {
            "request": {
              "url": "/categories",
              "body": {
                "name": "={{ $parameter[\"name\"] }}",
                "description": "={{ $parameter[\"description\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add a new category to the system"
        },
        {
          "name": "Update Category",
          "value": "updateCategory",
          "action": "Update category",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"update_name\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "description": "={{ $parameter[\"update_description\"] || undefined }}"
              },
              "url": "=/categories/{{$parameter[\"category_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update the category in the system"
        },
        {
          "name": "Delete Category",
          "value": "deleteCategory",
          "action": "Delete category",
          "routing": {
            "request": {
              "url": "=/categories/{{$parameter[\"category_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a category from the system"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "categories"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getContacts",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage contact meta information"
        },
        {
          "name": "Get Contacts",
          "value": "getContacts",
          "action": "Get contacts",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
                "get_reservations": "={{ $parameter[\"get_reservations\"] || undefined }}",
                "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
                "get_reservation_payment_terms": "={{ $parameter[\"get_reservation_payment_terms\"] || undefined }}"
              },
              "url": "/contacts",
              "method": "GET"
            }
          },
          "description": "Get a list of contacts for this administration"
        },
        {
          "name": "Get Contact",
          "value": "getContact",
          "action": "Get contact",
          "routing": {
            "request": {
              "qs": {
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
                "get_reservations": "={{ $parameter[\"get_reservations\"] || undefined }}",
                "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
                "get_reservation_payment_terms": "={{ $parameter[\"get_reservation_payment_terms\"] || undefined }}"
              },
              "url": "=/contacts/{{$parameter[\"contact_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single contact by id"
        },
        {
          "name": "Add Contact",
          "value": "addContact",
          "action": "Add contact",
          "routing": {
            "request": {
              "url": "/contacts",
              "body": {
                "city": "={{ $parameter[\"city\"] || undefined }}",
                "meta": "={{ $parameter[\"extraFields\"]?.field?.filter(f => f.value !== \"\" && f.value !== undefined)?.map(f => ({ key: f.key, value: f.value })) || [] }}",
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "email": "={{ $parameter[\"email\"] || undefined }}",
                "id_nr": "={{ $parameter[\"id_nr\"] || undefined }}",
                "phone": "={{ $parameter[\"phone\"] || undefined }}",
                "state": "={{ $parameter[\"state\"] || undefined }}",
                "gender": "={{ $parameter[\"gender\"] || undefined }}",
                "address": "={{ $parameter[\"address\"] || undefined }}",
                "company": "={{ $parameter[\"company\"] || undefined }}",
                "country": "={{ $parameter[\"country\"] || undefined }}",
                "id_type": "={{ $parameter[\"id_type\"] || undefined }}",
                "zipcode": "={{ $parameter[\"zipcode\"] || undefined }}",
                "birthday": "={{ $parameter[\"birthday\"] || undefined }}",
                "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
                "first_name": "={{ $parameter[\"first_name\"] || undefined }}",
                "vat_number": "={{ $parameter[\"vat_number\"] || undefined }}",
                "phone_mobile": "={{ $parameter[\"phone_mobile\"] || undefined }}",
                "address_number": "={{ $parameter[\"address_number\"] || undefined }}",
                "country_origin": "={{ $parameter[\"country_origin\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add either a empty contact or add parameters to a contact"
        },
        {
          "name": "Update Contact",
          "value": "updateContact",
          "action": "Update contact",
          "routing": {
            "request": {
              "url": "=/contacts/{{$parameter[\"contact_id\"]}}",
              "body": {
                "city": "={{ $parameter[\"city\"] || undefined }}",
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "phone": "={{ $parameter[\"phone\"] || undefined }}",
                "gender": "={{ $parameter[\"gender\"] || undefined }}",
                "address": "={{ $parameter[\"address\"] || undefined }}",
                "company": "={{ $parameter[\"company\"] || undefined }}",
                "country": "={{ $parameter[\"country\"] || undefined }}",
                "zipcode": "={{ $parameter[\"zipcode\"] || undefined }}",
                "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
                "first_name": "={{ $parameter[\"first_name\"] || undefined }}",
                "address_number": "={{ $parameter[\"address_number\"] || undefined }}"
              },
              "method": "PUT"
            }
          },
          "description": "Update a contact, only provided parameters will be updated"
        },
        {
          "name": "Delete Contact",
          "value": "deleteContact",
          "action": "Delete contact",
          "routing": {
            "request": {
              "url": "=/contacts/{{$parameter[\"contact_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a contact from the administration by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contacts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getExchangeRates",
      "options": [
        {
          "name": "Get Exchange Rates",
          "value": "getExchangeRates",
          "action": "Get exchange rates",
          "routing": {
            "request": {
              "qs": {
                "date": "={{ $parameter[\"date\"] || undefined }}",
                "source_currency": "={{ $parameter[\"source_currency\"] || undefined }}",
                "converted_currency": "={{ $parameter[\"converted_currency\"] || undefined }}"
              },
              "url": "/exchange_rates",
              "method": "GET"
            }
          },
          "description": "Get a list of exchange rates with optional filters"
        },
        {
          "name": "Exchange Value",
          "value": "exchangeValue",
          "action": "Exchange value",
          "routing": {
            "request": {
              "qs": {
                "value": "={{ $parameter[\"value\"] }}",
                "source_currency": "={{ $parameter[\"source_currency\"] }}",
                "converted_currency": "={{ $parameter[\"converted_currency\"] }}"
              },
              "url": "/exchange_rates/exchange_value",
              "method": "GET"
            }
          },
          "description": "Exchange a value from one currency to another"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "exchangeRates"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getInvoices",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage invoice meta information"
        },
        {
          "name": "Get Invoices",
          "value": "getInvoices",
          "action": "Get invoices",
          "routing": {
            "request": {
              "qs": {
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
                "invoice_id": "={{ $parameter[\"invoice_id_filter\"] || undefined }}",
                "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
                "get_payments": "={{ $parameter[\"get_payments\"] || undefined }}",
                "create_date[0]": "={{ $parameter[\"create_date_from\"] || undefined }}",
                "create_date[1]": "={{ $parameter[\"create_date_to\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}",
                "get_reservation": "={{ $parameter[\"get_reservation\"] || undefined }}",
                "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
                "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
                "create_date_operator": "={{ $parameter[\"create_date_operator\"] || undefined }}"
              },
              "url": "/invoices",
              "method": "GET"
            }
          },
          "description": "Get a list of invoices for this administration"
        },
        {
          "name": "Get Invoice",
          "value": "getInvoice",
          "action": "Get invoice",
          "routing": {
            "request": {
              "qs": {
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
                "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
                "get_payments": "={{ $parameter[\"get_payments\"] || undefined }}",
                "get_vat_totals": "={{ $parameter[\"get_vat_totals\"] || undefined }}",
                "get_reservation": "={{ $parameter[\"get_reservation\"] || undefined }}",
                "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
                "get_contact_meta": "={{ $parameter[\"get_contact_meta\"] || undefined }}",
                "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
                "get_reservation_meta": "={{ $parameter[\"get_reservation_meta\"] || undefined }}"
              },
              "url": "=/invoices/{{$parameter[\"invoice_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single invoice by id"
        },
        {
          "name": "Add Invoice",
          "value": "addInvoice",
          "action": "Add invoice",
          "routing": {
            "request": {
              "qs": {
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "contact_id": "={{ $parameter[\"contact_id\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
              },
              "url": "/invoices",
              "method": "POST"
            }
          },
          "description": "Add a new empty concept email to the administration"
        },
        {
          "name": "Update Invoice",
          "value": "updateInvoice",
          "action": "Update invoice",
          "routing": {
            "request": {
              "qs": {
                "contact_id": "={{ $parameter[\"contact_id\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
              },
              "url": "=/invoices/{{$parameter[\"invoice_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a invoice contact"
        },
        {
          "name": "Delete Invoice",
          "value": "deleteInvoice",
          "action": "Delete invoice",
          "routing": {
            "request": {
              "url": "=/invoices/{{$parameter[\"invoice_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Remove a invoice from the administration"
        },
        {
          "name": "Finalize Invoice",
          "value": "finalizeInvoice",
          "action": "Finalize invoice",
          "routing": {
            "request": {
              "qs": {
                "delay": "={{ $parameter[\"delay\"] || undefined }}"
              },
              "url": "=/invoices/{{$parameter[\"invoice_id\"]}}/finalize",
              "method": "POST"
            }
          },
          "description": "Invoices are started in status concept a can be changed"
        },
        {
          "name": "Cancel Delayed Finalized Invoice",
          "value": "cancelDelayedFinalizedInvoice",
          "action": "Cancel delayed finalized invoice",
          "routing": {
            "request": {
              "url": "=/invoices/{{$parameter[\"invoice_id\"]}}/cancel_finalize",
              "method": "POST"
            }
          },
          "description": "Invoices are started in status concept a can be changed"
        },
        {
          "name": "Create Credit",
          "value": "createCredit",
          "action": "Create credit",
          "routing": {
            "request": {
              "url": "=/invoices/{{$parameter[\"invoice_id\"]}}/credit",
              "method": "POST"
            }
          },
          "description": "Create a credit note for an invoice"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoices"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getKiosks",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage kiosk meta information"
        },
        {
          "name": "Get Kiosks",
          "value": "getKiosks",
          "action": "Get kiosks",
          "routing": {
            "request": {
              "url": "/kiosks",
              "method": "GET"
            }
          },
          "description": "Get a list of kiosks for this administration"
        },
        {
          "name": "Get Kiosk",
          "value": "getKiosk",
          "action": "Get kiosk",
          "routing": {
            "request": {
              "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single kiosk by id"
        },
        {
          "name": "Update Kiosk",
          "value": "updateKiosk",
          "action": "Update kiosk",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"name\"] || undefined }}"
              },
              "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a kiosk, only provided parameters will be updated"
        },
        {
          "name": "Add Kiosk",
          "value": "addKiosk",
          "action": "Add kiosk",
          "routing": {
            "request": {
              "url": "/kiosks",
              "body": {
                "name": "={{ $parameter[\"name\"] || undefined }}",
                "brand": "={{ $parameter[\"brand\"] || undefined }}",
                "api_key_id": "={{ $parameter[\"api_key_id\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add either a empty kiosk or add parameters to a kiosk"
        },
        {
          "name": "Delete Kiosk",
          "value": "deleteKiosk",
          "action": "Delete kiosk",
          "routing": {
            "request": {
              "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a kiosk from the administration by ID"
        },
        {
          "name": "Install Kiosk",
          "value": "installKiosk",
          "action": "Install kiosk",
          "routing": {
            "request": {
              "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}/install",
              "method": "POST"
            }
          },
          "description": "Installs a kiosk from the administration by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "kiosks"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLedgers",
      "options": [
        {
          "name": "Get Ledgers",
          "value": "getLedgers",
          "action": "Get ledgers",
          "routing": {
            "request": {
              "url": "/ledgers",
              "method": "GET"
            }
          },
          "description": "Get a list of ledgers for this administration"
        },
        {
          "name": "Get Ledger",
          "value": "getLedger",
          "action": "Get ledger",
          "routing": {
            "request": {
              "url": "=/ledgers/{{$parameter[\"ledger_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single ledger by id"
        },
        {
          "name": "Add Ledger",
          "value": "addLedger",
          "action": "Add ledger",
          "routing": {
            "request": {
              "url": "/ledgers",
              "body": {
                "name": "={{ $parameter[\"name\"] }}",
                "type": "={{ $parameter[\"type\"] }}",
                "number": "={{ $parameter[\"number\"] }}"
              },
              "method": "POST"
            }
          },
          "description": "Add a new ledger to the administration"
        },
        {
          "name": "Update Ledger",
          "value": "updateLedger",
          "action": "Update ledger",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"name\"] || undefined }}",
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "number": "={{ $parameter[\"number\"] || undefined }}"
              },
              "url": "=/ledgers/{{$parameter[\"ledger_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a ledger, only provided parameters will be updated"
        },
        {
          "name": "Delete Ledger",
          "value": "deleteLedger",
          "action": "Delete ledger",
          "routing": {
            "request": {
              "url": "=/ledgers/{{$parameter[\"ledger_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a ledger from the administration by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ledgers"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLicensePlates",
      "options": [
        {
          "name": "Get License Plates",
          "value": "getLicensePlates",
          "action": "Get license plates",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
                "force_dates": "={{ $parameter[\"force_dates\"] || undefined }}",
                "license_plate": "={{ $parameter[\"license_plate\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}",
                "get_reservation": "={{ $parameter[\"get_reservation\"] || undefined }}",
                "end_date_operator": "={{ $parameter[\"end_date_operator\"] || undefined }}",
                "start_date_operator": "={{ $parameter[\"start_date_operator\"] || undefined }}"
              },
              "url": "/license_plates",
              "method": "GET"
            }
          },
          "description": "Get a list of license plates from the system"
        },
        {
          "name": "Get License Plate",
          "value": "getLicensePlate",
          "action": "Get license plate",
          "routing": {
            "request": {
              "url": "=/license_plates/{{$parameter[\"license_plate_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single license plate by ID"
        },
        {
          "name": "Check Valid License Plate",
          "value": "checkValidLicensePlate",
          "action": "Check valid license plate",
          "routing": {
            "request": {
              "qs": {
                "plate": "={{ $parameter[\"plate\"] || undefined }}"
              },
              "url": "/license_plates/check_plate",
              "method": "GET"
            }
          },
          "description": "Validate a license plate"
        },
        {
          "name": "Add License Plate",
          "value": "addLicensePlate",
          "action": "Add license plate",
          "routing": {
            "request": {
              "url": "/license_plates",
              "body": {
                "plate": "={{ $parameter[\"plate\"] }}",
                "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
                "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
                "description": "={{ $parameter[\"description\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add a new license plate"
        },
        {
          "name": "Update License Plate",
          "value": "updateLicensePlate",
          "action": "Update license plate",
          "routing": {
            "request": {
              "qs": {
                "plate": "={{ $parameter[\"plate\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
                "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
                "description": "={{ $parameter[\"description\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
              },
              "url": "=/license_plates/{{$parameter[\"license_plate_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing license plate"
        },
        {
          "name": "Delete License Plate",
          "value": "deleteLicensePlate",
          "action": "Delete license plate",
          "routing": {
            "request": {
              "url": "=/license_plates/{{$parameter[\"license_plate_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a license plate by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "licensePlates"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLogs",
      "options": [
        {
          "name": "Get Logs",
          "value": "getLogs",
          "action": "Get logs",
          "routing": {
            "request": {
              "url": "/api/logs",
              "method": "GET"
            }
          },
          "description": "Get a list of log entries"
        },
        {
          "name": "Add Log",
          "value": "addLog",
          "action": "Add log",
          "routing": {
            "request": {
              "url": "/logs",
              "body": {
                "type": "={{ $parameter[\"type\"] }}",
                "type_id": "={{ $parameter[\"type_id\"] }}",
                "severity": "={{ $parameter[\"severity\"] }}",
                "description": "={{ $parameter[\"description\"] }}"
              },
              "method": "POST"
            }
          },
          "description": "Add a new log entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "logs"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "calculatePrice",
      "options": [
        {
          "name": "Price Calculation",
          "value": "calculatePrice",
          "action": "Calculate price",
          "routing": {
            "request": {
              "qs": {
                "code": "={{ $parameter[\"code\"] || undefined }}",
                "arrival": "={{ $parameter[\"arrival\"] || undefined }}",
                "card_id": "={{ $parameter[\"card_id\"] || undefined }}",
                "persons": "={{ $parameter[\"persons\"] || undefined }}",
                "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
                "place_id": "={{ $parameter[\"place_id\"] || undefined }}",
                "timezone": "={{ $parameter[\"timezone\"] || undefined }}",
                "departure": "={{ $parameter[\"departure\"] || undefined }}",
                "age_tables": "={{ $parameter[\"age_tables\"] || undefined }}",
                "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
                "get_deposit": "={{ $parameter[\"get_deposit\"] || undefined }}",
                "get_options": "={{ $parameter[\"get_options\"] || undefined }}",
                "timeslot_id": "={{ $parameter[\"timeslot_id\"] || undefined }}",
                "birth_tables": "={{ $parameter[\"birth_tables\"] || undefined }}",
                "history_date": "={{ $parameter[\"history_date\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}",
                "get_taxes_price": "={{ $parameter[\"get_taxes_price\"] || undefined }}",
                "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}",
                "get_guests_price": "={{ $parameter[\"get_guests_price\"] || undefined }}",
                "search_alternative": "={{ $parameter[\"search_alternative\"] || undefined }}",
                "get_discounts_price": "={{ $parameter[\"get_discounts_price\"] || undefined }}",
                "get_available_places": "={{ $parameter[\"get_available_places\"] || undefined }}",
                "get_required_options_price": "={{ $parameter[\"get_required_options_price\"] || undefined }}"
              },
              "url": "/price_calculation",
              "method": "GET"
            }
          },
          "description": "With the price calculation API you can calculate a price"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "priceCalculation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getProducts",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage product meta information"
        },
        {
          "name": "Get Products",
          "value": "getProducts",
          "action": "Get products",
          "routing": {
            "request": {
              "qs": {
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "deal_id": "={{ $parameter[\"deal_id\"] || undefined }}",
                "category": "={{ $parameter[\"category\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_tags": "={{ $parameter[\"get_tags\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}"
              },
              "url": "/products",
              "method": "GET"
            }
          },
          "description": "Get a list of products for this administration"
        },
        {
          "name": "Get Product",
          "value": "getProduct",
          "action": "Get product",
          "routing": {
            "request": {
              "qs": {
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_tags": "={{ $parameter[\"get_tags\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}"
              },
              "url": "=/products/{{$parameter[\"product_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single product by id"
        },
        {
          "name": "Update Product",
          "value": "updateProduct",
          "action": "Update product",
          "routing": {
            "request": {
              "qs": {
                "meta": "={{ $parameter[\"metaFields\"]?.field?.filter(f => f.value !== \"\" && f.value !== undefined)?.map(f => ({ key: f.key, value: f.value })) || [] }}",
                "name": "={{ $parameter[\"name\"] || undefined }}",
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "category": "={{ $parameter[\"category\"] || undefined }}",
                "percentage": "={{ $parameter[\"percentage\"] || undefined }}",
                "price_incl": "={{ $parameter[\"price_incl\"] || undefined }}",
                "description": "={{ $parameter[\"description\"] || undefined }}",
                "vat_procent": "={{ $parameter[\"vat_procent\"] || undefined }}"
              },
              "url": "=/products/{{$parameter[\"product_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a product, only provided parameters will be updated"
        },
        {
          "name": "Add Product",
          "value": "addProduct",
          "action": "Add product",
          "routing": {
            "request": {
              "url": "/products",
              "body": {
                "meta": "={{ $parameter[\"metaFields\"]?.field?.filter(f => f.value !== \"\" && f.value !== undefined)?.map(f => ({ key: f.key, value: f.value })) || [] }}",
                "name": "={{ $parameter[\"name\"] || undefined }}",
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "category": "={{ $parameter[\"category\"] || undefined }}",
                "percentage": "={{ $parameter[\"percentage\"] || undefined }}",
                "price_incl": "={{ $parameter[\"price_incl\"] || undefined }}",
                "description": "={{ $parameter[\"description\"] || undefined }}",
                "vat_procent": "={{ $parameter[\"vat_procent\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add either a empty product or add parameters to a product"
        },
        {
          "name": "Delete Product",
          "value": "deleteProduct",
          "action": "Delete product",
          "routing": {
            "request": {
              "url": "=/products/{{$parameter[\"product_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a product from the administration by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "products"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getRates",
      "options": [
        {
          "name": "Prices",
          "value": "prices",
          "action": "Prices",
          "description": "HTTP methods for prices of a rate"
        },
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "HTTP methods for meta of a rate"
        },
        {
          "name": "Get Rates",
          "value": "getRates",
          "action": "Get rates",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "parent_id": "={{ $parameter[\"parent_id\"] || undefined }}"
              },
              "url": "/rates",
              "method": "GET"
            }
          },
          "description": "Get a list of rates"
        },
        {
          "name": "Get Rate",
          "value": "getRate",
          "action": "Get rate",
          "routing": {
            "request": {
              "url": "=/rates/{{$parameter[\"rate_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single rate by ID"
        },
        {
          "name": "Update Rate",
          "value": "updateRate",
          "action": "Update rate",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"name\"] || undefined }}",
                "closed": "={{ $parameter[\"closed\"] !== undefined && $parameter[\"closed\"] !== \"\" ? $parameter[\"closed\"] : undefined }}",
                "rules[0]": "={{ $parameter[\"rules\"]?.table ? ( Array.isArray($parameter[\"rules\"].table) ? JSON.stringify({ type: $parameter[\"rules\"].table[0].type, amount: String($parameter[\"rules\"].table[0].amount) }) : JSON.stringify({ type: $parameter[\"rules\"].table.type, amount: String($parameter[\"rules\"].table.amount) }) ) : undefined }}",
                "parent_id": "={{ $parameter[\"parent_id\"] || undefined }}",
                "maximum_stay": "={{ $parameter[\"maximum_stay\"] || undefined }}",
                "minimum_stay": "={{ $parameter[\"minimum_stay\"] || undefined }}"
              },
              "url": "=/rates/{{$parameter[\"rate_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing rate"
        },
        {
          "name": "Add Rate",
          "value": "addRate",
          "action": "Add rate",
          "routing": {
            "request": {
              "url": "/rates",
              "body": "={{ Object.assign({}, ( $parameter.name ? { name: $parameter.name } : {} ), ( $parameter.status ? { status: $parameter.status } : {} ), ( $parameter.parent_id ? { parent_id: $parameter.parent_id } : {} ), ( $parameter.closed !== undefined && $parameter.closed !== \"\" ? { closed: $parameter.closed } : {} ), ( $parameter.minimum_stay ? { minimum_stay: $parameter.minimum_stay } : {} ), ( $parameter.maximum_stay ? { maximum_stay: $parameter.maximum_stay } : {} ), ($parameter.rules?.table ? { rules: (Array.isArray($parameter.rules.table) ? $parameter.rules.table.map(r => ({ type: r.type, amount: String(r.amount) })) : [{ type: $parameter.rules.table.type, amount: String($parameter.rules.table.amount) }]) } : {}) ) }}",
              "method": "POST"
            }
          },
          "description": "Create a new rate"
        },
        {
          "name": "Delete Rate",
          "value": "deleteRate",
          "action": "Delete rate",
          "routing": {
            "request": {
              "url": "=/rates/{{$parameter[\"rate_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a rate by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "rates"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getReservations",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage reservation meta information"
        },
        {
          "name": "Get Reservations",
          "value": "getReservations",
          "action": "Get reservations",
          "routing": {
            "request": {
              "qs": {
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "arrival": "={{ $parameter[\"arrival\"] || undefined }}",
                "admin_id": "={{ $parameter[\"admin_id\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
                "group_id": "={{ $parameter[\"group_id\"] || undefined }}",
                "meta_key": "={{ $parameter[\"meta_key\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "place_id": "={{ $parameter[\"place_id\"] || undefined }}",
                "departure": "={{ $parameter[\"departure\"] || undefined }}",
                "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
                "contact_id": "={{ $parameter[\"contact_id\"] || undefined }}",
                "meta_value": "={{ $parameter[\"meta_value\"] || undefined }}",
                "create_date": "={{ $parameter[\"create_date\"] || undefined }}",
                "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
                "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
                "last_modified": "={{ $parameter[\"last_modified\"] || undefined }}",
                "meta_operator": "={{ $parameter[\"meta_operator\"] || undefined }}",
                "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}",
                "arrival_operator": "={{ $parameter[\"arrival_operator\"] || undefined }}",
                "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
                "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
                "departure_operator": "={{ $parameter[\"departure_operator\"] || undefined }}",
                "get_invoice_payment": "={{ $parameter[\"get_invoice_payment\"] || undefined }}",
                "create_date_operator": "={{ $parameter[\"create_date_operator\"] || undefined }}",
                "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
                "last_modified_operator": "={{ $parameter[\"last_modified_operator\"] || undefined }}"
              },
              "url": "/reservations",
              "method": "GET"
            }
          },
          "description": "You have a lot of possibilities to get information about multiple reservations"
        },
        {
          "name": "Get Reservation",
          "value": "getReservation",
          "action": "Get reservation",
          "routing": {
            "request": {
              "qs": {
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
                "get_booker": "={{ $parameter[\"get_booker\"] || undefined }}",
                "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
                "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
                "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
                "get_co_travelers": "={{ $parameter[\"get_co_travelers\"] || undefined }}",
                "get_invoice_meta": "={{ $parameter[\"get_invoice_meta\"] || undefined }}",
                "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
                "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
                "get_invoice_rowsfilter": "={{ $parameter[\"get_invoice_rowsfilter\"] || undefined }}"
              },
              "url": "=/reservations/{{$parameter[\"reservation_id\"]}}",
              "method": "GET"
            }
          },
          "description": "You also can get the individual reservation, it is possible to get extra data on the reservation when needed"
        },
        {
          "name": "Create Reservation",
          "value": "createReservation",
          "action": "Create reservation",
          "description": "Create a reservation using different methods"
        },
        {
          "name": "Delete Reservation",
          "value": "deleteReservation",
          "action": "Delete reservation",
          "routing": {
            "request": {
              "url": "=/reservations/{{$parameter[\"reservation_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a reservation by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reservations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTags",
      "options": [
        {
          "name": "Get Tags",
          "value": "getTags",
          "action": "Get tags",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}"
              },
              "url": "/tags",
              "method": "GET"
            }
          },
          "description": "Get a list of tags"
        },
        {
          "name": "Get Tag",
          "value": "getTag",
          "action": "Get tag",
          "routing": {
            "request": {
              "url": "={{ $parameter[\"resource\"] + \"/\" + $parameter[\"tagId\"] }}",
              "method": "GET"
            }
          },
          "description": "Get a single tag by ID"
        },
        {
          "name": "Add Tag",
          "value": "addTag",
          "action": "Add tag",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"name\"] }}"
              },
              "url": "/tags",
              "method": "POST"
            }
          },
          "description": "Add a new tag"
        },
        {
          "name": "Delete Tag",
          "value": "deleteTag",
          "action": "Delete tag",
          "routing": {
            "request": {
              "url": "={{ $parameter[\"resource\"] + \"/\" + $parameter[\"tagId\"] }}",
              "method": "DELETE"
            }
          },
          "description": "Delete a tag by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tags"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTimezones",
      "options": [
        {
          "name": "Get Timezones",
          "value": "getTimezones",
          "action": "Get timezones",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "country_code": "={{ $parameter[\"country_code\"] || undefined }}"
              },
              "url": "/timezones",
              "method": "GET"
            }
          },
          "description": "Get a list of timezones with optional filters"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "timezones"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getUsers",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage user meta information"
        },
        {
          "name": "Get Users",
          "value": "getUsers",
          "action": "Get users",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "get_rights": "={{ $parameter[\"get_rights\"] || undefined }}",
                "get_administrations": "={{ $parameter[\"get_administrations\"] || undefined }}"
              },
              "url": "/users",
              "method": "GET"
            }
          },
          "description": "Get a list of users for this administration"
        },
        {
          "name": "Get User",
          "value": "getUser",
          "action": "Get user",
          "routing": {
            "request": {
              "qs": {
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_rights": "={{ $parameter[\"get_rights\"] || undefined }}",
                "get_administrations": "={{ $parameter[\"get_administrations\"] || undefined }}"
              },
              "url": "=/users/{{$parameter[\"user_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single user by id"
        },
        {
          "name": "Update User",
          "value": "updateUser",
          "action": "Update user",
          "routing": {
            "request": {
              "qs": {
                "email": "={{ $parameter[\"email\"] || undefined }}",
                "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
                "first_name": "={{ $parameter[\"first_name\"] || undefined }}"
              },
              "url": "=/users/{{$parameter[\"user_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a user, only provided parameters will be updated"
        },
        {
          "name": "Add User",
          "value": "addUser",
          "action": "Add user",
          "routing": {
            "request": {
              "url": "/users",
              "body": {
                "email": "={{ $parameter[\"email\"] || undefined }}",
                "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
                "first_name": "={{ $parameter[\"first_name\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add either a empty user or add parameters to a user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "users"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getWidgets",
      "options": [
        {
          "name": "Get Widgets",
          "value": "getWidgets",
          "action": "Get widgets",
          "routing": {
            "request": {
              "qs": {
                "area": "={{ $parameter[\"area\"] || undefined }}",
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}"
              },
              "url": "/widgets",
              "method": "GET"
            }
          },
          "description": "Get a list of widgets for this administration"
        },
        {
          "name": "Get Widget",
          "value": "getWidget",
          "action": "Get widget",
          "routing": {
            "request": {
              "url": "=/widgets/{{$parameter[\"widget_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single widget by id"
        },
        {
          "name": "Add Widget",
          "value": "addWidget",
          "action": "Add widget",
          "routing": {
            "request": {
              "url": "/widgets",
              "body": {
                "url": "={{ $parameter[\"url\"] || undefined }}",
                "area": "={{ $parameter[\"area\"] || undefined }}",
                "data": "={{ $parameter[\"data\"] || undefined }}",
                "app_id": "={{ $parameter[\"app_id\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add either a empty widget or add parameters to a widget"
        },
        {
          "name": "Delete Widget",
          "value": "deleteWidget",
          "action": "Delete widget",
          "routing": {
            "request": {
              "url": "=/widgets/{{$parameter[\"widget_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a widget by id"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "widgets"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Places",
      "value": "places",
      "action": "Places",
      "description": "Manage accommodation places"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage accommodation meta information"
    },
    {
      "name": "Get Accommodations",
      "value": "getAccommodations",
      "action": "Get accommodations",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
            "status[0]": "={{ $parameter[\"status_0\"] || undefined }}",
            "status[1]": "={{ $parameter[\"status_1\"] || undefined }}",
            "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
            "get_services": "={{ $parameter[\"get_services\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}"
          },
          "url": "/accommodations",
          "method": "GET"
        }
      },
      "description": "You can get your accommodations with the get accommodations method"
    },
    {
      "name": "Get Accommodation",
      "value": "getAccommodation",
      "action": "Get accommodation",
      "routing": {
        "request": {
          "qs": {
            "admin_id": "={{ $parameter[\"admin_id\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}"
          },
          "url": "=/accommodations/{{$parameter[\"accommodation_id\"]}}",
          "method": "GET"
        }
      },
      "description": "With this method you can retreive a single accommodation"
    },
    {
      "name": "Add Accommodation",
      "value": "addAccommodation",
      "action": "Add accommodation",
      "routing": {
        "request": {
          "url": "/accommodations",
          "body": {
            "name": "={{ $parameter[\"name\"] }}"
          },
          "method": "POST"
        }
      },
      "description": "With this method you can add a new accommodation"
    },
    {
      "name": "Update Accommodation",
      "value": "updateAccommodation",
      "action": "Update accommodation",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"update_name\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "description": "={{ $parameter[\"description\"] || undefined }}",
            "vat_procent": "={{ $parameter[\"vat_procent\"] || undefined }}"
          },
          "url": "=/accommodations/{{$parameter[\"accommodation_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "With this method you can update an existing accommodation"
    },
    {
      "name": "Delete Accommodation",
      "value": "deleteAccommodation",
      "action": "Delete accommodation",
      "routing": {
        "request": {
          "url": "=/accommodations/{{$parameter[\"accommodation_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "With this method you can delete a single accommodation"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage administration meta information"
    },
    {
      "name": "Age Tables",
      "value": "ageTables",
      "action": "Age tables",
      "description": "Get age tables for an administration"
    },
    {
      "name": "Get Places",
      "value": "getPlaces",
      "action": "Get places",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}"
          },
          "url": "=/administrations/{{$parameter[\"admin_id\"]}}/places",
          "method": "GET"
        }
      },
      "description": "Get places for a specific administration"
    },
    {
      "name": "Get Administrations",
      "value": "getAdministrations",
      "action": "Get administrations",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}",
            "get_age_tables": "={{ $parameter[\"get_age_tables\"] || undefined }}",
            "get_accommodations": "={{ $parameter[\"get_accommodations\"] || undefined }}"
          },
          "url": "/administrations",
          "method": "GET"
        }
      },
      "description": "You can retrieve the administrations of a specific user"
    },
    {
      "name": "Get Administration",
      "value": "getAdministration",
      "action": "Get administration",
      "routing": {
        "request": {
          "qs": {
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}",
            "get_age_tables": "={{ $parameter[\"get_age_tables\"] || undefined }}",
            "get_vat_tables": "={{ $parameter[\"get_vat_tables\"] || undefined }}"
          },
          "url": "=/administrations/{{$parameter[\"admin_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single administration by id"
    },
    {
      "name": "Update Administration",
      "value": "updateAdministration",
      "action": "Update administration",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"update_name\"] || undefined }}"
          },
          "url": "=/administrations/{{$parameter[\"admin_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an administration by id"
    },
    {
      "name": "Add Administration",
      "value": "addAdministration",
      "action": "Add administration",
      "routing": {
        "request": {
          "url": "/administrations",
          "body": {
            "name": "={{ $parameter[\"name\"] }}",
            "type": "={{ $parameter[\"type\"] }}"
          },
          "method": "POST"
        }
      },
      "description": "Add a new administration (full PMS or lite version)"
    },
    {
      "name": "Delete Administration",
      "value": "deleteAdministration",
      "action": "Delete administration",
      "routing": {
        "request": {
          "url": "=/administrations/{{$parameter[\"admin_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an administration by id"
    },
    {
      "name": "Get Stock",
      "value": "getStock",
      "action": "Get stock",
      "routing": {
        "request": {
          "qs": {
            "from": "={{ $parameter[\"from\"] || undefined }}",
            "till": "={{ $parameter[\"till\"] || undefined }}",
            "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
            "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}"
          },
          "url": "/availability/stock",
          "method": "GET"
        }
      },
      "description": "Get availability stock for an accommodation"
    },
    {
      "name": "Get Places",
      "value": "getPlaces",
      "action": "Get places",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "backend": "={{ $parameter[\"backend\"] || undefined }}",
            "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
            "place_id": "={{ $parameter[\"place_id\"] || undefined }}",
            "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
            "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}"
          },
          "url": "/availability/places",
          "method": "GET"
        }
      },
      "description": "Get available places"
    },
    {
      "name": "Get Categories",
      "value": "getCategories",
      "action": "Get categories",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "status[0]": "={{ $parameter[\"status_0\"] || undefined }}",
            "status[1]": "={{ $parameter[\"status_1\"] || undefined }}",
            "status[2]": "={{ $parameter[\"status_2\"] || undefined }}"
          },
          "url": "/categories",
          "method": "GET"
        }
      },
      "description": "Get a list of categories from the system"
    },
    {
      "name": "Get Category",
      "value": "getCategory",
      "action": "Get category",
      "routing": {
        "request": {
          "url": "=/categories/{{$parameter[\"category_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single category by ID"
    },
    {
      "name": "Add Category",
      "value": "addCategory",
      "action": "Add category",
      "routing": {
        "request": {
          "url": "/categories",
          "body": {
            "name": "={{ $parameter[\"name\"] }}",
            "description": "={{ $parameter[\"description\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add a new category to the system"
    },
    {
      "name": "Update Category",
      "value": "updateCategory",
      "action": "Update category",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"update_name\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "description": "={{ $parameter[\"update_description\"] || undefined }}"
          },
          "url": "=/categories/{{$parameter[\"category_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update the category in the system"
    },
    {
      "name": "Delete Category",
      "value": "deleteCategory",
      "action": "Delete category",
      "routing": {
        "request": {
          "url": "=/categories/{{$parameter[\"category_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a category from the system"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage contact meta information"
    },
    {
      "name": "Get Contacts",
      "value": "getContacts",
      "action": "Get contacts",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
            "get_reservations": "={{ $parameter[\"get_reservations\"] || undefined }}",
            "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
            "get_reservation_payment_terms": "={{ $parameter[\"get_reservation_payment_terms\"] || undefined }}"
          },
          "url": "/contacts",
          "method": "GET"
        }
      },
      "description": "Get a list of contacts for this administration"
    },
    {
      "name": "Get Contact",
      "value": "getContact",
      "action": "Get contact",
      "routing": {
        "request": {
          "qs": {
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
            "get_reservations": "={{ $parameter[\"get_reservations\"] || undefined }}",
            "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
            "get_reservation_payment_terms": "={{ $parameter[\"get_reservation_payment_terms\"] || undefined }}"
          },
          "url": "=/contacts/{{$parameter[\"contact_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single contact by id"
    },
    {
      "name": "Add Contact",
      "value": "addContact",
      "action": "Add contact",
      "routing": {
        "request": {
          "url": "/contacts",
          "body": {
            "city": "={{ $parameter[\"city\"] || undefined }}",
            "meta": "={{ $parameter[\"extraFields\"]?.field?.filter(f => f.value !== \"\" && f.value !== undefined)?.map(f => ({ key: f.key, value: f.value })) || [] }}",
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "email": "={{ $parameter[\"email\"] || undefined }}",
            "id_nr": "={{ $parameter[\"id_nr\"] || undefined }}",
            "phone": "={{ $parameter[\"phone\"] || undefined }}",
            "state": "={{ $parameter[\"state\"] || undefined }}",
            "gender": "={{ $parameter[\"gender\"] || undefined }}",
            "address": "={{ $parameter[\"address\"] || undefined }}",
            "company": "={{ $parameter[\"company\"] || undefined }}",
            "country": "={{ $parameter[\"country\"] || undefined }}",
            "id_type": "={{ $parameter[\"id_type\"] || undefined }}",
            "zipcode": "={{ $parameter[\"zipcode\"] || undefined }}",
            "birthday": "={{ $parameter[\"birthday\"] || undefined }}",
            "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
            "first_name": "={{ $parameter[\"first_name\"] || undefined }}",
            "vat_number": "={{ $parameter[\"vat_number\"] || undefined }}",
            "phone_mobile": "={{ $parameter[\"phone_mobile\"] || undefined }}",
            "address_number": "={{ $parameter[\"address_number\"] || undefined }}",
            "country_origin": "={{ $parameter[\"country_origin\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add either a empty contact or add parameters to a contact"
    },
    {
      "name": "Update Contact",
      "value": "updateContact",
      "action": "Update contact",
      "routing": {
        "request": {
          "url": "=/contacts/{{$parameter[\"contact_id\"]}}",
          "body": {
            "city": "={{ $parameter[\"city\"] || undefined }}",
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "phone": "={{ $parameter[\"phone\"] || undefined }}",
            "gender": "={{ $parameter[\"gender\"] || undefined }}",
            "address": "={{ $parameter[\"address\"] || undefined }}",
            "company": "={{ $parameter[\"company\"] || undefined }}",
            "country": "={{ $parameter[\"country\"] || undefined }}",
            "zipcode": "={{ $parameter[\"zipcode\"] || undefined }}",
            "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
            "first_name": "={{ $parameter[\"first_name\"] || undefined }}",
            "address_number": "={{ $parameter[\"address_number\"] || undefined }}"
          },
          "method": "PUT"
        }
      },
      "description": "Update a contact, only provided parameters will be updated"
    },
    {
      "name": "Delete Contact",
      "value": "deleteContact",
      "action": "Delete contact",
      "routing": {
        "request": {
          "url": "=/contacts/{{$parameter[\"contact_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a contact from the administration by ID"
    },
    {
      "name": "Get Exchange Rates",
      "value": "getExchangeRates",
      "action": "Get exchange rates",
      "routing": {
        "request": {
          "qs": {
            "date": "={{ $parameter[\"date\"] || undefined }}",
            "source_currency": "={{ $parameter[\"source_currency\"] || undefined }}",
            "converted_currency": "={{ $parameter[\"converted_currency\"] || undefined }}"
          },
          "url": "/exchange_rates",
          "method": "GET"
        }
      },
      "description": "Get a list of exchange rates with optional filters"
    },
    {
      "name": "Exchange Value",
      "value": "exchangeValue",
      "action": "Exchange value",
      "routing": {
        "request": {
          "qs": {
            "value": "={{ $parameter[\"value\"] }}",
            "source_currency": "={{ $parameter[\"source_currency\"] }}",
            "converted_currency": "={{ $parameter[\"converted_currency\"] }}"
          },
          "url": "/exchange_rates/exchange_value",
          "method": "GET"
        }
      },
      "description": "Exchange a value from one currency to another"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage invoice meta information"
    },
    {
      "name": "Get Invoices",
      "value": "getInvoices",
      "action": "Get invoices",
      "routing": {
        "request": {
          "qs": {
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
            "invoice_id": "={{ $parameter[\"invoice_id_filter\"] || undefined }}",
            "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
            "get_payments": "={{ $parameter[\"get_payments\"] || undefined }}",
            "create_date[0]": "={{ $parameter[\"create_date_from\"] || undefined }}",
            "create_date[1]": "={{ $parameter[\"create_date_to\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}",
            "get_reservation": "={{ $parameter[\"get_reservation\"] || undefined }}",
            "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
            "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
            "create_date_operator": "={{ $parameter[\"create_date_operator\"] || undefined }}"
          },
          "url": "/invoices",
          "method": "GET"
        }
      },
      "description": "Get a list of invoices for this administration"
    },
    {
      "name": "Get Invoice",
      "value": "getInvoice",
      "action": "Get invoice",
      "routing": {
        "request": {
          "qs": {
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
            "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
            "get_payments": "={{ $parameter[\"get_payments\"] || undefined }}",
            "get_vat_totals": "={{ $parameter[\"get_vat_totals\"] || undefined }}",
            "get_reservation": "={{ $parameter[\"get_reservation\"] || undefined }}",
            "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
            "get_contact_meta": "={{ $parameter[\"get_contact_meta\"] || undefined }}",
            "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
            "get_reservation_meta": "={{ $parameter[\"get_reservation_meta\"] || undefined }}"
          },
          "url": "=/invoices/{{$parameter[\"invoice_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single invoice by id"
    },
    {
      "name": "Add Invoice",
      "value": "addInvoice",
      "action": "Add invoice",
      "routing": {
        "request": {
          "qs": {
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "contact_id": "={{ $parameter[\"contact_id\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
          },
          "url": "/invoices",
          "method": "POST"
        }
      },
      "description": "Add a new empty concept email to the administration"
    },
    {
      "name": "Update Invoice",
      "value": "updateInvoice",
      "action": "Update invoice",
      "routing": {
        "request": {
          "qs": {
            "contact_id": "={{ $parameter[\"contact_id\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
          },
          "url": "=/invoices/{{$parameter[\"invoice_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a invoice contact"
    },
    {
      "name": "Delete Invoice",
      "value": "deleteInvoice",
      "action": "Delete invoice",
      "routing": {
        "request": {
          "url": "=/invoices/{{$parameter[\"invoice_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Remove a invoice from the administration"
    },
    {
      "name": "Finalize Invoice",
      "value": "finalizeInvoice",
      "action": "Finalize invoice",
      "routing": {
        "request": {
          "qs": {
            "delay": "={{ $parameter[\"delay\"] || undefined }}"
          },
          "url": "=/invoices/{{$parameter[\"invoice_id\"]}}/finalize",
          "method": "POST"
        }
      },
      "description": "Invoices are started in status concept a can be changed"
    },
    {
      "name": "Cancel Delayed Finalized Invoice",
      "value": "cancelDelayedFinalizedInvoice",
      "action": "Cancel delayed finalized invoice",
      "routing": {
        "request": {
          "url": "=/invoices/{{$parameter[\"invoice_id\"]}}/cancel_finalize",
          "method": "POST"
        }
      },
      "description": "Invoices are started in status concept a can be changed"
    },
    {
      "name": "Create Credit",
      "value": "createCredit",
      "action": "Create credit",
      "routing": {
        "request": {
          "url": "=/invoices/{{$parameter[\"invoice_id\"]}}/credit",
          "method": "POST"
        }
      },
      "description": "Create a credit note for an invoice"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage kiosk meta information"
    },
    {
      "name": "Get Kiosks",
      "value": "getKiosks",
      "action": "Get kiosks",
      "routing": {
        "request": {
          "url": "/kiosks",
          "method": "GET"
        }
      },
      "description": "Get a list of kiosks for this administration"
    },
    {
      "name": "Get Kiosk",
      "value": "getKiosk",
      "action": "Get kiosk",
      "routing": {
        "request": {
          "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single kiosk by id"
    },
    {
      "name": "Update Kiosk",
      "value": "updateKiosk",
      "action": "Update kiosk",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"name\"] || undefined }}"
          },
          "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a kiosk, only provided parameters will be updated"
    },
    {
      "name": "Add Kiosk",
      "value": "addKiosk",
      "action": "Add kiosk",
      "routing": {
        "request": {
          "url": "/kiosks",
          "body": {
            "name": "={{ $parameter[\"name\"] || undefined }}",
            "brand": "={{ $parameter[\"brand\"] || undefined }}",
            "api_key_id": "={{ $parameter[\"api_key_id\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add either a empty kiosk or add parameters to a kiosk"
    },
    {
      "name": "Delete Kiosk",
      "value": "deleteKiosk",
      "action": "Delete kiosk",
      "routing": {
        "request": {
          "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a kiosk from the administration by ID"
    },
    {
      "name": "Install Kiosk",
      "value": "installKiosk",
      "action": "Install kiosk",
      "routing": {
        "request": {
          "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}/install",
          "method": "POST"
        }
      },
      "description": "Installs a kiosk from the administration by ID"
    },
    {
      "name": "Get Ledgers",
      "value": "getLedgers",
      "action": "Get ledgers",
      "routing": {
        "request": {
          "url": "/ledgers",
          "method": "GET"
        }
      },
      "description": "Get a list of ledgers for this administration"
    },
    {
      "name": "Get Ledger",
      "value": "getLedger",
      "action": "Get ledger",
      "routing": {
        "request": {
          "url": "=/ledgers/{{$parameter[\"ledger_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single ledger by id"
    },
    {
      "name": "Add Ledger",
      "value": "addLedger",
      "action": "Add ledger",
      "routing": {
        "request": {
          "url": "/ledgers",
          "body": {
            "name": "={{ $parameter[\"name\"] }}",
            "type": "={{ $parameter[\"type\"] }}",
            "number": "={{ $parameter[\"number\"] }}"
          },
          "method": "POST"
        }
      },
      "description": "Add a new ledger to the administration"
    },
    {
      "name": "Update Ledger",
      "value": "updateLedger",
      "action": "Update ledger",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"name\"] || undefined }}",
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "number": "={{ $parameter[\"number\"] || undefined }}"
          },
          "url": "=/ledgers/{{$parameter[\"ledger_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a ledger, only provided parameters will be updated"
    },
    {
      "name": "Delete Ledger",
      "value": "deleteLedger",
      "action": "Delete ledger",
      "routing": {
        "request": {
          "url": "=/ledgers/{{$parameter[\"ledger_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a ledger from the administration by ID"
    },
    {
      "name": "Get License Plates",
      "value": "getLicensePlates",
      "action": "Get license plates",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
            "force_dates": "={{ $parameter[\"force_dates\"] || undefined }}",
            "license_plate": "={{ $parameter[\"license_plate\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}",
            "get_reservation": "={{ $parameter[\"get_reservation\"] || undefined }}",
            "end_date_operator": "={{ $parameter[\"end_date_operator\"] || undefined }}",
            "start_date_operator": "={{ $parameter[\"start_date_operator\"] || undefined }}"
          },
          "url": "/license_plates",
          "method": "GET"
        }
      },
      "description": "Get a list of license plates from the system"
    },
    {
      "name": "Get License Plate",
      "value": "getLicensePlate",
      "action": "Get license plate",
      "routing": {
        "request": {
          "url": "=/license_plates/{{$parameter[\"license_plate_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single license plate by ID"
    },
    {
      "name": "Check Valid License Plate",
      "value": "checkValidLicensePlate",
      "action": "Check valid license plate",
      "routing": {
        "request": {
          "qs": {
            "plate": "={{ $parameter[\"plate\"] || undefined }}"
          },
          "url": "/license_plates/check_plate",
          "method": "GET"
        }
      },
      "description": "Validate a license plate"
    },
    {
      "name": "Add License Plate",
      "value": "addLicensePlate",
      "action": "Add license plate",
      "routing": {
        "request": {
          "url": "/license_plates",
          "body": {
            "plate": "={{ $parameter[\"plate\"] }}",
            "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
            "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
            "description": "={{ $parameter[\"description\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add a new license plate"
    },
    {
      "name": "Update License Plate",
      "value": "updateLicensePlate",
      "action": "Update license plate",
      "routing": {
        "request": {
          "qs": {
            "plate": "={{ $parameter[\"plate\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
            "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
            "description": "={{ $parameter[\"description\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
          },
          "url": "=/license_plates/{{$parameter[\"license_plate_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing license plate"
    },
    {
      "name": "Delete License Plate",
      "value": "deleteLicensePlate",
      "action": "Delete license plate",
      "routing": {
        "request": {
          "url": "=/license_plates/{{$parameter[\"license_plate_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a license plate by ID"
    },
    {
      "name": "Get Logs",
      "value": "getLogs",
      "action": "Get logs",
      "routing": {
        "request": {
          "url": "/api/logs",
          "method": "GET"
        }
      },
      "description": "Get a list of log entries"
    },
    {
      "name": "Add Log",
      "value": "addLog",
      "action": "Add log",
      "routing": {
        "request": {
          "url": "/logs",
          "body": {
            "type": "={{ $parameter[\"type\"] }}",
            "type_id": "={{ $parameter[\"type_id\"] }}",
            "severity": "={{ $parameter[\"severity\"] }}",
            "description": "={{ $parameter[\"description\"] }}"
          },
          "method": "POST"
        }
      },
      "description": "Add a new log entry"
    },
    {
      "name": "Price Calculation",
      "value": "calculatePrice",
      "action": "Calculate price",
      "routing": {
        "request": {
          "qs": {
            "code": "={{ $parameter[\"code\"] || undefined }}",
            "arrival": "={{ $parameter[\"arrival\"] || undefined }}",
            "card_id": "={{ $parameter[\"card_id\"] || undefined }}",
            "persons": "={{ $parameter[\"persons\"] || undefined }}",
            "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
            "place_id": "={{ $parameter[\"place_id\"] || undefined }}",
            "timezone": "={{ $parameter[\"timezone\"] || undefined }}",
            "departure": "={{ $parameter[\"departure\"] || undefined }}",
            "age_tables": "={{ $parameter[\"age_tables\"] || undefined }}",
            "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
            "get_deposit": "={{ $parameter[\"get_deposit\"] || undefined }}",
            "get_options": "={{ $parameter[\"get_options\"] || undefined }}",
            "timeslot_id": "={{ $parameter[\"timeslot_id\"] || undefined }}",
            "birth_tables": "={{ $parameter[\"birth_tables\"] || undefined }}",
            "history_date": "={{ $parameter[\"history_date\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}",
            "get_taxes_price": "={{ $parameter[\"get_taxes_price\"] || undefined }}",
            "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}",
            "get_guests_price": "={{ $parameter[\"get_guests_price\"] || undefined }}",
            "search_alternative": "={{ $parameter[\"search_alternative\"] || undefined }}",
            "get_discounts_price": "={{ $parameter[\"get_discounts_price\"] || undefined }}",
            "get_available_places": "={{ $parameter[\"get_available_places\"] || undefined }}",
            "get_required_options_price": "={{ $parameter[\"get_required_options_price\"] || undefined }}"
          },
          "url": "/price_calculation",
          "method": "GET"
        }
      },
      "description": "With the price calculation API you can calculate a price"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage product meta information"
    },
    {
      "name": "Get Products",
      "value": "getProducts",
      "action": "Get products",
      "routing": {
        "request": {
          "qs": {
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "deal_id": "={{ $parameter[\"deal_id\"] || undefined }}",
            "category": "={{ $parameter[\"category\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_tags": "={{ $parameter[\"get_tags\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}"
          },
          "url": "/products",
          "method": "GET"
        }
      },
      "description": "Get a list of products for this administration"
    },
    {
      "name": "Get Product",
      "value": "getProduct",
      "action": "Get product",
      "routing": {
        "request": {
          "qs": {
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_tags": "={{ $parameter[\"get_tags\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}"
          },
          "url": "=/products/{{$parameter[\"product_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single product by id"
    },
    {
      "name": "Update Product",
      "value": "updateProduct",
      "action": "Update product",
      "routing": {
        "request": {
          "qs": {
            "meta": "={{ $parameter[\"metaFields\"]?.field?.filter(f => f.value !== \"\" && f.value !== undefined)?.map(f => ({ key: f.key, value: f.value })) || [] }}",
            "name": "={{ $parameter[\"name\"] || undefined }}",
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "category": "={{ $parameter[\"category\"] || undefined }}",
            "percentage": "={{ $parameter[\"percentage\"] || undefined }}",
            "price_incl": "={{ $parameter[\"price_incl\"] || undefined }}",
            "description": "={{ $parameter[\"description\"] || undefined }}",
            "vat_procent": "={{ $parameter[\"vat_procent\"] || undefined }}"
          },
          "url": "=/products/{{$parameter[\"product_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a product, only provided parameters will be updated"
    },
    {
      "name": "Add Product",
      "value": "addProduct",
      "action": "Add product",
      "routing": {
        "request": {
          "url": "/products",
          "body": {
            "meta": "={{ $parameter[\"metaFields\"]?.field?.filter(f => f.value !== \"\" && f.value !== undefined)?.map(f => ({ key: f.key, value: f.value })) || [] }}",
            "name": "={{ $parameter[\"name\"] || undefined }}",
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "category": "={{ $parameter[\"category\"] || undefined }}",
            "percentage": "={{ $parameter[\"percentage\"] || undefined }}",
            "price_incl": "={{ $parameter[\"price_incl\"] || undefined }}",
            "description": "={{ $parameter[\"description\"] || undefined }}",
            "vat_procent": "={{ $parameter[\"vat_procent\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add either a empty product or add parameters to a product"
    },
    {
      "name": "Delete Product",
      "value": "deleteProduct",
      "action": "Delete product",
      "routing": {
        "request": {
          "url": "=/products/{{$parameter[\"product_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a product from the administration by ID"
    },
    {
      "name": "Prices",
      "value": "prices",
      "action": "Prices",
      "description": "HTTP methods for prices of a rate"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "HTTP methods for meta of a rate"
    },
    {
      "name": "Get Rates",
      "value": "getRates",
      "action": "Get rates",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "parent_id": "={{ $parameter[\"parent_id\"] || undefined }}"
          },
          "url": "/rates",
          "method": "GET"
        }
      },
      "description": "Get a list of rates"
    },
    {
      "name": "Get Rate",
      "value": "getRate",
      "action": "Get rate",
      "routing": {
        "request": {
          "url": "=/rates/{{$parameter[\"rate_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single rate by ID"
    },
    {
      "name": "Update Rate",
      "value": "updateRate",
      "action": "Update rate",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"name\"] || undefined }}",
            "closed": "={{ $parameter[\"closed\"] !== undefined && $parameter[\"closed\"] !== \"\" ? $parameter[\"closed\"] : undefined }}",
            "rules[0]": "={{ $parameter[\"rules\"]?.table ? ( Array.isArray($parameter[\"rules\"].table) ? JSON.stringify({ type: $parameter[\"rules\"].table[0].type, amount: String($parameter[\"rules\"].table[0].amount) }) : JSON.stringify({ type: $parameter[\"rules\"].table.type, amount: String($parameter[\"rules\"].table.amount) }) ) : undefined }}",
            "parent_id": "={{ $parameter[\"parent_id\"] || undefined }}",
            "maximum_stay": "={{ $parameter[\"maximum_stay\"] || undefined }}",
            "minimum_stay": "={{ $parameter[\"minimum_stay\"] || undefined }}"
          },
          "url": "=/rates/{{$parameter[\"rate_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing rate"
    },
    {
      "name": "Add Rate",
      "value": "addRate",
      "action": "Add rate",
      "routing": {
        "request": {
          "url": "/rates",
          "body": "={{ Object.assign({}, ( $parameter.name ? { name: $parameter.name } : {} ), ( $parameter.status ? { status: $parameter.status } : {} ), ( $parameter.parent_id ? { parent_id: $parameter.parent_id } : {} ), ( $parameter.closed !== undefined && $parameter.closed !== \"\" ? { closed: $parameter.closed } : {} ), ( $parameter.minimum_stay ? { minimum_stay: $parameter.minimum_stay } : {} ), ( $parameter.maximum_stay ? { maximum_stay: $parameter.maximum_stay } : {} ), ($parameter.rules?.table ? { rules: (Array.isArray($parameter.rules.table) ? $parameter.rules.table.map(r => ({ type: r.type, amount: String(r.amount) })) : [{ type: $parameter.rules.table.type, amount: String($parameter.rules.table.amount) }]) } : {}) ) }}",
          "method": "POST"
        }
      },
      "description": "Create a new rate"
    },
    {
      "name": "Delete Rate",
      "value": "deleteRate",
      "action": "Delete rate",
      "routing": {
        "request": {
          "url": "=/rates/{{$parameter[\"rate_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a rate by ID"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage reservation meta information"
    },
    {
      "name": "Get Reservations",
      "value": "getReservations",
      "action": "Get reservations",
      "routing": {
        "request": {
          "qs": {
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "arrival": "={{ $parameter[\"arrival\"] || undefined }}",
            "admin_id": "={{ $parameter[\"admin_id\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
            "group_id": "={{ $parameter[\"group_id\"] || undefined }}",
            "meta_key": "={{ $parameter[\"meta_key\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "place_id": "={{ $parameter[\"place_id\"] || undefined }}",
            "departure": "={{ $parameter[\"departure\"] || undefined }}",
            "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
            "contact_id": "={{ $parameter[\"contact_id\"] || undefined }}",
            "meta_value": "={{ $parameter[\"meta_value\"] || undefined }}",
            "create_date": "={{ $parameter[\"create_date\"] || undefined }}",
            "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
            "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
            "last_modified": "={{ $parameter[\"last_modified\"] || undefined }}",
            "meta_operator": "={{ $parameter[\"meta_operator\"] || undefined }}",
            "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}",
            "arrival_operator": "={{ $parameter[\"arrival_operator\"] || undefined }}",
            "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
            "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
            "departure_operator": "={{ $parameter[\"departure_operator\"] || undefined }}",
            "get_invoice_payment": "={{ $parameter[\"get_invoice_payment\"] || undefined }}",
            "create_date_operator": "={{ $parameter[\"create_date_operator\"] || undefined }}",
            "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
            "last_modified_operator": "={{ $parameter[\"last_modified_operator\"] || undefined }}"
          },
          "url": "/reservations",
          "method": "GET"
        }
      },
      "description": "You have a lot of possibilities to get information about multiple reservations"
    },
    {
      "name": "Get Reservation",
      "value": "getReservation",
      "action": "Get reservation",
      "routing": {
        "request": {
          "qs": {
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
            "get_booker": "={{ $parameter[\"get_booker\"] || undefined }}",
            "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
            "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
            "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
            "get_co_travelers": "={{ $parameter[\"get_co_travelers\"] || undefined }}",
            "get_invoice_meta": "={{ $parameter[\"get_invoice_meta\"] || undefined }}",
            "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
            "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
            "get_invoice_rowsfilter": "={{ $parameter[\"get_invoice_rowsfilter\"] || undefined }}"
          },
          "url": "=/reservations/{{$parameter[\"reservation_id\"]}}",
          "method": "GET"
        }
      },
      "description": "You also can get the individual reservation, it is possible to get extra data on the reservation when needed"
    },
    {
      "name": "Create Reservation",
      "value": "createReservation",
      "action": "Create reservation",
      "description": "Create a reservation using different methods"
    },
    {
      "name": "Delete Reservation",
      "value": "deleteReservation",
      "action": "Delete reservation",
      "routing": {
        "request": {
          "url": "=/reservations/{{$parameter[\"reservation_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a reservation by ID"
    },
    {
      "name": "Get Tags",
      "value": "getTags",
      "action": "Get tags",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}"
          },
          "url": "/tags",
          "method": "GET"
        }
      },
      "description": "Get a list of tags"
    },
    {
      "name": "Get Tag",
      "value": "getTag",
      "action": "Get tag",
      "routing": {
        "request": {
          "url": "={{ $parameter[\"resource\"] + \"/\" + $parameter[\"tagId\"] }}",
          "method": "GET"
        }
      },
      "description": "Get a single tag by ID"
    },
    {
      "name": "Add Tag",
      "value": "addTag",
      "action": "Add tag",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"name\"] }}"
          },
          "url": "/tags",
          "method": "POST"
        }
      },
      "description": "Add a new tag"
    },
    {
      "name": "Delete Tag",
      "value": "deleteTag",
      "action": "Delete tag",
      "routing": {
        "request": {
          "url": "={{ $parameter[\"resource\"] + \"/\" + $parameter[\"tagId\"] }}",
          "method": "DELETE"
        }
      },
      "description": "Delete a tag by ID"
    },
    {
      "name": "Get Timezones",
      "value": "getTimezones",
      "action": "Get timezones",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "country_code": "={{ $parameter[\"country_code\"] || undefined }}"
          },
          "url": "/timezones",
          "method": "GET"
        }
      },
      "description": "Get a list of timezones with optional filters"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage user meta information"
    },
    {
      "name": "Get Users",
      "value": "getUsers",
      "action": "Get users",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "get_rights": "={{ $parameter[\"get_rights\"] || undefined }}",
            "get_administrations": "={{ $parameter[\"get_administrations\"] || undefined }}"
          },
          "url": "/users",
          "method": "GET"
        }
      },
      "description": "Get a list of users for this administration"
    },
    {
      "name": "Get User",
      "value": "getUser",
      "action": "Get user",
      "routing": {
        "request": {
          "qs": {
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_rights": "={{ $parameter[\"get_rights\"] || undefined }}",
            "get_administrations": "={{ $parameter[\"get_administrations\"] || undefined }}"
          },
          "url": "=/users/{{$parameter[\"user_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single user by id"
    },
    {
      "name": "Update User",
      "value": "updateUser",
      "action": "Update user",
      "routing": {
        "request": {
          "qs": {
            "email": "={{ $parameter[\"email\"] || undefined }}",
            "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
            "first_name": "={{ $parameter[\"first_name\"] || undefined }}"
          },
          "url": "=/users/{{$parameter[\"user_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a user, only provided parameters will be updated"
    },
    {
      "name": "Add User",
      "value": "addUser",
      "action": "Add user",
      "routing": {
        "request": {
          "url": "/users",
          "body": {
            "email": "={{ $parameter[\"email\"] || undefined }}",
            "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
            "first_name": "={{ $parameter[\"first_name\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add either a empty user or add parameters to a user"
    },
    {
      "name": "Get Widgets",
      "value": "getWidgets",
      "action": "Get widgets",
      "routing": {
        "request": {
          "qs": {
            "area": "={{ $parameter[\"area\"] || undefined }}",
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}"
          },
          "url": "/widgets",
          "method": "GET"
        }
      },
      "description": "Get a list of widgets for this administration"
    },
    {
      "name": "Get Widget",
      "value": "getWidget",
      "action": "Get widget",
      "routing": {
        "request": {
          "url": "=/widgets/{{$parameter[\"widget_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single widget by id"
    },
    {
      "name": "Add Widget",
      "value": "addWidget",
      "action": "Add widget",
      "routing": {
        "request": {
          "url": "/widgets",
          "body": {
            "url": "={{ $parameter[\"url\"] || undefined }}",
            "area": "={{ $parameter[\"area\"] || undefined }}",
            "data": "={{ $parameter[\"data\"] || undefined }}",
            "app_id": "={{ $parameter[\"app_id\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add either a empty widget or add parameters to a widget"
    },
    {
      "name": "Delete Widget",
      "value": "deleteWidget",
      "action": "Delete widget",
      "routing": {
        "request": {
          "url": "=/widgets/{{$parameter[\"widget_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a widget by id"
    }
  ]

npm_readme:
  # n8n-nodes-starfish

  This is an n8n community node. It lets you use the Starfish API (CampingCare/HotelCare) in your n8n workflows.

  Starfish is a comprehensive booking and reservation management platform for camping and hotel accommodations, providing APIs for managing contacts, reservations, accommodations, invoices, rates, 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)
  - [Compatibility](#compatibility)
  - [Usage](#usage)
  - [Development](#development)
  - [Resources](#resources)
  - [Troubleshooting](#troubleshooting)
  - [Version history](#version-history)

  ## Installation

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

  ## Operations

  This package provides two nodes:

  ### Starfish (CampingCare/HotelCare) Node

  Regular node for making API calls:

  #### Accommodations API

  - **Get Accommodations** - List accommodations with filtering options
  - **Get Accommodation** - Retrieve a specific accommodation by ID
  - **Add Accommodation** - Create a new accommodation
  - **Update Accommodation** - Modify existing accommodation details
  - **Delete Accommodation** - Remove an accommodation
  - **Places** - Get places, get a single place, and update cleaning status (unknown, clean, wait_for_review, dirty)
  - **Meta Operations** - Manage accommodation metadata (get, update, delete)

  #### Administrations API

  - **Get Administrations** - List all administrations
  - **Get Administration** - Get details of a specific administration
  - **Add Administration** - Create a new administration (full PMS or lite version)
  - **Update Administration** - Modify administration details
  - **Delete Administration** - Remove an administration
  - **Get Places** - List places for a specific administration (filter, search, sort)
  - **Age Tables** - Retrieve and manage age table configurations
  - **Meta Operations** - Manage administration metadata

  #### Availability API

  - **Get Stock** - Check accommodation availability for specific date ranges
  - **Get Places** - Get available places/spots

  #### Categories API

  - **Get Categories** - List all categories
  - **Get Category** - Get a specific category by ID
  - **Add Category** - Create a new category
  - **Update Category** - Modify existing category
  - **Delete Category** - Remove a category

  #### Contacts API

  - **Get Contacts** - List contacts with filtering and pagination
  - **Get Contact** - Retrieve a specific contact by ID
  - **Add Contact** - Create a new contact with metadata support
  - **Update Contact** - Modify existing contact information
  - **Delete Contact** - Remove a contact
  - **Meta Operations** - Manage contact metadata

  #### Exchange Rates API

  - **Get Exchange Rates** - Get currency exchange rates for specific dates
  - **Exchange Value** - Convert amounts between currencies

  #### Invoices API

  - **Get Invoices** - List invoices with filters
  - **Get Invoice** - Get a specific invoice by ID
  - **Add Invoice** - Create a new invoice
  - **Update Invoice** - Modify existing invoice
  - **Delete Invoice** - Remove an invoice
  - **Finalize Invoice** - Finalize an invoice for payment
  - **Cancel Delayed Finalized Invoice** - Cancel a delayed finalization
  - **Create Credit** - Create a credit note for an invoice
  - **Add Rows** - Add line items to an invoice
  - **Meta Operations** - Manage invoice metadata

  #### Kiosks API

  - **Get Kiosks** - List all kiosks
  - **Get Kiosk** - Get a specific kiosk by ID
  - **Add Kiosk** - Create a new kiosk
  - **Update Kiosk** - Modify kiosk details
  - **Delete Kiosk** - Remove a kiosk
  - **Install Kiosk** - Install a kiosk
  - **Meta Operations** - Manage kiosk metadata

  #### Ledgers API

  - **Get Ledgers** - List all ledgers
  - **Get Ledger** - Get a specific ledger by ID
  - **Add Ledger** - Create a new ledger
  - **Update Ledger** - Modify ledger details
  - **Delete Ledger** - Remove a ledger

  #### License Plates API

  - **Get License Plates** - List license plates with filtering
  - **Get License Plate** - Get a specific license plate by ID
  - **Check Valid License Plate** - Validate a license plate
  - **Add License Plate** - Create a new license plate entry
  - **Update License Plate** - Modify existing license plate
  - **Delete License Plate** - Remove a license plate

  #### Logs API

  - **Get Logs** - Retrieve log entries
  - **Add Log** - Create a new log entry for tracking activities related to reservations, contacts, invoices, or accommodations

  #### Price Calculation API

  - **Calculate Price** - Get pricing information before creating a reservation with support for age tables, birthdates, discount codes, and channels

  #### Products API

  - **Get Products** - List all products with filtering options
  - **Get Product** - Get a specific product by ID
  - **Add Product** - Create a new product with multiple meta fields support
  - **Update Product** - Modify existing product details including meta fields
  - **Delete Product** - Remove a product
  - **Meta Operations** - Manage product metadata (get, update, delete)

  #### Rates API

  - **Get Rates** - List all rates
  - **Get Rate** - Get a specific rate by ID
  - **Add Rate** - Create a new rate
  - **Update Rate** - Modify existing rate
  - **Delete Rate** - Remove a rate
  - **Get Prices** - Retrieve prices for a specific rate and date range
  - **Update Prices** - Modify rate prices for specific dates
  - **Meta Operations** - Manage rate metadata

  #### Reservations API

  - **Get Reservations** - List all reservations with filtering
  - **Get Reservation** - Get a specific reservation by ID
  - **Create Reservation** - Create a new reservation (with price calculation or forced data)
  - **Delete Reservation** - Remove a reservation
  - **Meta Operations** - Manage reservation metadata

  #### Tags API

  - **Get Tags** - List all tags
  - **Get Tag** - Get a specific tag by ID
  - **Add Tag** - Create a new tag
  - **Delete Tag** - Remove a tag

  #### Timezones API

  - **Get Timezones** - List all available timezones

  #### Users API

  - **Get Users** - List all users
  - **Get User** - Get a specific user by ID
  - **Add User** - Create a new user
  - **Update User** - Modify user details
  - **Meta Operations** - Manage user metadata

  #### Widgets API

  - **Get Widgets** - List all widgets
  - **Get Widget** - Get a specific widget by ID
  - **Add Widget** - Create a new widget
  - **Update Widget** - Modify widget details
  - **Delete Widget** - Remove a widget

  ### Starfish (CampingCare/HotelCare) Trigger Node

  Webhook trigger node for real-time events:

  - Automatically creates and manages webhooks in Starfish
  - Supports multiple event types (reservations, contacts, invoices, etc.)
  - Receives real-time updates when data changes in Starfish
  - Includes signature validation for security

  ## Credentials

  ### Setting up API Credentials

  1. In n8n, go to **Credentials** > **New**
  2. Search for "Starfish (CampingCare/HotelCare) API"
  3. Enter your API credentials:
     - **API Key**: Your Starfish API key
     - **Webhook Secret** (optional): Value used to validate incoming webhooks; Starfish will echo it in the `X-Webhook-Secret` header and requests without it will be rejected.

  ### Obtaining Your API Key

  1. Log in to your Starfish dashboard (CampingCare or HotelCare)
  2. Navigate to Settings > API Keys
  3. Generate or copy your API key
  4. Paste it into the n8n credentials field

  The API key is used for authentication with all Starfish API endpoints. When provided, the webhook secret secures incoming webhooks.

  ## Compatibility

  - **Minimum n8n version:** 1.0.0
  - **Node.js version:** >= 20.15
  - **Tested with:** n8n 1.0.0+

  This node uses the Starfish API v21. Ensure your API key has access to the required endpoints.

  ## Usage

  ### Getting Started

  If you're new to n8n, check out the [Try it out](https://docs.n8n.io/try-it-out/) documentation to get started.

  ### Example 1: Create a Contact

  1. Add the "Starfish (CampingCare/HotelCare)" node
  2. Select **Resource**: Contacts API
  3. Select **Operation**: Add Contact
  4. Fill in required fields:
     - Email (required)
     - First Name
     - Last Name
     - Phone, Address, etc. (optional)

  The API allows creating contacts with minimal information and adding data as needed.

  ### Example 2: Create a Reservation

  1. Add the "Starfish (CampingCare/HotelCare)" node
  2. Select **Resource**: Reservations API
  3. Select **Operation**: Create Reservation
  4. Choose creation method:
     - **Using Price Calculation**: First calculate price, then create reservation
     - **Force with Own Data**: Provide all required data directly

  For the price calculation method:

  1. First use Price Calculation API to get `calculation_id` and `hash`
  2. Then create the reservation using these values

  ### Example 3: Listen for Webhook Events

  1. Add the "Starfish (CampingCare/HotelCare) Trigger" node
  2. Select events to listen for (e.g., "reservation_create", "contact_update")
  3. Activate the workflow
  4. The webhook will be automatically registered with Starfish
  5. When events occur, the workflow will be triggered

  ### Important Notes

  - **Date Format**: Always use YYYY-MM-DD format for dates.
  - **Required Fields**: Some operations have required fields (marked with \*)
  - **Meta Fields**: Many resources support custom metadata via meta operations
  - **Pagination**: Use `count` and `limit` parameters for large datasets
  - **Boolean Parameters**: Use string values "0" or "1" for boolean query parameters (examples: `get_meta`, `get_media`, `count`)
  - **Field Mapping**: When updating resources, only provided parameters will be updated
  - **Cleaning Status**: Accommodation places cleaning uses the `/cleaning` path and statuses `unknown|clean|wait_for_review|dirty`

  ## Development

  - Install dependencies: `pnpm install`
  - Build: `pnpm run build` (cleans `dist`, runs TypeScript, then `gulp build:icons`)
  - Dev watch: `pnpm run dev`
  - Lint: `pnpm run lint` (use `pnpm run lintfix` to auto-fix)
  - Format: `pnpm run format`

  ### Deploy to local n8n container (Windows)

  - Run `win_docker_deploy.bat` from the repo root to build and copy the node into a Dockerized n8n instance. Ensure Docker Desktop is running and your container name matches what the script expects.

  ### Webhook trigger validation

  - The trigger node validates webhook signatures; configure events in the node, activate the workflow, and ensure the public URL is reachable by Starfish.

  ### Resource coverage quick view

  | Resource | Key operations |
  | --- | --- |
  | Accommodations | get, get by id, add/update/delete, meta, places, cleaning status |
  | Administrations | get, get by id, add/update/delete, meta, age tables, places |
  | Reservations | get, get by id, create, delete, meta |
  | Contacts | get, get by id, add/update/delete, meta |
  | Rates | get, get by id, add/update/delete, prices get/update, meta |
  | Invoices | get, get by id, add/update/delete, finalize/cancel, credit, rows, meta |
  | Products | get, get by id, add/update/delete, meta |
  | Others | Kiosks, Ledgers, License Plates, Exchange Rates, Logs, Categories, Tags, Users, Widgets, Timezones |

  ## Resources

  - [Starfish API Documentation](https://support.starfish.care/faq/n8n/)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [GitHub Repository](https://github.com/CampingCare/n8n-node)
  - [CampingCare Website](https://www.camping.care)
  - [HotelCare Website](https://www.hotel.care)

  ## Version History

  ### Version 2.0.2 (Current)

  - Added accommodations places coverage (get places, get place, update cleaning status via `/cleaning`)
  - Fixed cleaning status endpoint path for accommodation places
  - Existing coverage retained: Invoices, Rates (pricing and metadata), Kiosks, Ledgers, License Plates, Exchange Rates, Logs, Categories, Tags, Users, and meta operations across major resources
  - Enhanced webhook trigger with signature validation and improved error handling

  ### Version 1.0.6

  - Broader API coverage across accommodations, reservations, contacts, and meta operations
  - Enhanced README documentation

  ### Version 1.0.0

  - Initial release
  - Support for Contacts, Reservations, and Accommodations
  - Webhook trigger support
  - Price calculation features
  - Administrations and Timezones support

  ---

  ## Troubleshooting

  ### Common Issues

  **"Invalid API Key" error**

  - Verify your API key in the Starfish dashboard
  - Check that the key hasn't expired
  - Update the key in n8n credentials if necessary

  **Webhook not receiving events**

  - Ensure the workflow is activated
  - Verify the webhook exists in your Starfish dashboard (Settings > Webhooks)
  - Check that n8n is accessible from the internet (for webhooks to work)
  - Review your firewall and network settings

  **Date format errors**

  - Ensure all dates use YYYY-MM-DD format
  - Check your system timezone settings

  **Meta operations not working**

  - Verify the resource supports meta operations
  - Check that the meta key is valid for the resource type
  - Some meta operations may require specific permissions
  - Ensure your API key has the necessary scopes

  **Rate limiting issues**

  - Implement delays between API calls if needed
  - Check the API documentation for rate limits
  - Consider batching operations where possible

  **Connection timeouts**

  - Check your internet connection
  - Verify the Starfish API endpoint is accessible
  - Try again after a few moments

  ## Contributing

  Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch: `git checkout -b feature/my-feature`
  3. Commit your changes: `git commit -am 'Add new feature'`
  4. Push to the branch: `git push origin feature/my-feature`
  5. Submit a pull request

  ## License

  [MIT](LICENSE.md)

  ## Support

  For support:

  - Check the [API Documentation](https://support.starfish.care/faq/n8n/)
  - Open an issue on [GitHub](https://github.com/CampingCare/n8n-node/issues)
  - Contact Starfish support for API-related questions

  ## Credits

  Created by the CampingCare development team.

  Built with the [n8n nodes starter](https://github.com/n8n-io/n8n-nodes-starter).

ai_documentation_summary:
  {"purpose":"The Starfish (CampingCare/HotelCare) node enables integration with the Starfish API to manage camping and hotel accommodations, including reservations, contacts, invoices, rates, and more, within n8n workflows.","capabilities":["List and retrieve accommodations, administrations, categories, contacts, invoices, kiosks, license plates, logs, products, rates, reservations, and products","Create, update, and delete accommodations, administrations, categories, contacts, invoices, kiosks, license plates, products, rates, and reservations","Manage metadata for various entities via meta operations","Check availability and calculate prices for reservations with support for age tables, birthdates, discount codes, and channels","Retrieve exchange rates and manage invoice line items and credits","Track activities via logs and manage cleaning status for places"],"authentication":"API key required (not explicitly detailed in README, but standard for Starfish API)","commonUseCases":["Automate reservation creation and updates","Sync contact and customer data between systems","Generate and manage invoices with automated finalization and credit notes","Monitor accommodation availability and pricing","Manage product and rate configurations for dynamic pricing"],"limitations":["Tags API section is truncated in the README, so full functionality is not documented","No details on rate limits, error handling, or response formatting provided"],"relatedNodes":["n8n-nodes-base","n8n-nodes-http","n8n-nodes-database"]}


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

updated_at: 2026-01-07 20:08:16
author_name: joff
author_github_url: https://github.com/joffcom/
npm_package_name: n8n-nodes-hookdeck
npm_version: 1.0.1
community_fetched_at: 2026-01-07T20:08:16.019Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "attempts",
      "options": [
        {
          "name": "Attempts",
          "value": "attempts"
        },
        {
          "name": "Events",
          "value": "events"
        },
        {
          "name": "Issues",
          "value": "issues"
        },
        {
          "name": "Requests",
          "value": "requests"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an attempt",
          "routing": {
            "request": {
              "url": "={{\"/attempts/\" + $parameter.attemptId }}",
              "method": "GET"
            }
          },
          "description": "Get an attempt"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attempts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an event",
          "routing": {
            "request": {
              "url": "={{\"/events/\" + $parameter.eventId }}",
              "method": "GET"
            }
          },
          "description": "Get an event"
        },
        {
          "name": "Mute",
          "value": "mute",
          "action": "Mute an event",
          "routing": {
            "request": {
              "url": "={{\"/events/\" + $parameter.eventId + \"/mute\" }}",
              "method": "PUT"
            }
          },
          "description": "Mute an event"
        },
        {
          "name": "Retry",
          "value": "retry",
          "action": "Retry an event",
          "routing": {
            "request": {
              "url": "={{\"/events/\" + $parameter.eventId + \"/retry\" }}",
              "method": "POST"
            }
          },
          "description": "Retry an event"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "events"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Dismiss",
          "value": "dismiss",
          "action": "Dismiss an issue",
          "routing": {
            "request": {
              "url": "={{\"/issues/\" + $parameter.issueId }}",
              "method": "DELETE"
            }
          },
          "description": "Dismiss an issue"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an issue",
          "routing": {
            "request": {
              "url": "={{\"/issues/\" + $parameter.issueId }}",
              "method": "GET"
            }
          },
          "description": "Get an issue"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an issue",
          "routing": {
            "request": {
              "url": "={{\"/issues/\" + $parameter.issueId }}",
              "method": "PUT"
            }
          },
          "description": "Update an issue"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "issues"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a request",
          "routing": {
            "request": {
              "url": "={{\"/requests/\" + $parameter.requestId }}",
              "method": "GET"
            }
          },
          "description": "Get a request"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "requests"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get an attempt",
      "routing": {
        "request": {
          "url": "={{\"/attempts/\" + $parameter.attemptId }}",
          "method": "GET"
        }
      },
      "description": "Get an attempt"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an event",
      "routing": {
        "request": {
          "url": "={{\"/events/\" + $parameter.eventId }}",
          "method": "GET"
        }
      },
      "description": "Get an event"
    },
    {
      "name": "Mute",
      "value": "mute",
      "action": "Mute an event",
      "routing": {
        "request": {
          "url": "={{\"/events/\" + $parameter.eventId + \"/mute\" }}",
          "method": "PUT"
        }
      },
      "description": "Mute an event"
    },
    {
      "name": "Retry",
      "value": "retry",
      "action": "Retry an event",
      "routing": {
        "request": {
          "url": "={{\"/events/\" + $parameter.eventId + \"/retry\" }}",
          "method": "POST"
        }
      },
      "description": "Retry an event"
    },
    {
      "name": "Dismiss",
      "value": "dismiss",
      "action": "Dismiss an issue",
      "routing": {
        "request": {
          "url": "={{\"/issues/\" + $parameter.issueId }}",
          "method": "DELETE"
        }
      },
      "description": "Dismiss an issue"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an issue",
      "routing": {
        "request": {
          "url": "={{\"/issues/\" + $parameter.issueId }}",
          "method": "GET"
        }
      },
      "description": "Get an issue"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an issue",
      "routing": {
        "request": {
          "url": "={{\"/issues/\" + $parameter.issueId }}",
          "method": "PUT"
        }
      },
      "description": "Update an issue"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a request",
      "routing": {
        "request": {
          "url": "={{\"/requests/\" + $parameter.requestId }}",
          "method": "GET"
        }
      },
      "description": "Get a request"
    }
  ]

npm_readme:
  # n8n-nodes-hookdeck

  This is an n8n community node. It lets you use the hookdeck api 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)  
  [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

  - Attempts
  	- Get
  - Events
  	- Get
  	- Mute
  	- Retry
  - Issues
  	- Dismiss
  	- Get
  	- Update
  - Requests
  	- Get

  ## Resources

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

  ## Version history

  0.1.0 - Initial Release

ai_documentation_summary:
  {"purpose":"The Hookdeck node allows users to interact with the Hookdeck API within n8n workflows, enabling actions such as retrieving events, managing issues, and handling requests.","capabilities":["Get events","Mute events","Retry events","Get issues","Dismiss issues","Update issues","Get requests"],"authentication":"Not specified in README","commonUseCases":["Monitor and retrieve webhook events from Hookdeck","Manage and resolve issues in a workflow","Track and retry failed events automatically"],"limitations":[],"relatedNodes":[]}


node_type: @predictleads/n8n-nodes-predictleads.predictLeads
package_name: @predictleads/n8n-nodes-predictleads
display_name: PredictLeads
description: Get company insights from PredictLeads' official node
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: deankostomaj_predictleads
author_github_url: https://github.com/PredictLeads/n8n-nodes-predict-leads.git
npm_package_name: @predictleads/n8n-nodes-predictleads
npm_version: 1.0.0
community_fetched_at: 2026-01-07T20:08:16.019Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "companies",
      "options": [
        {
          "name": "Company",
          "value": "companies"
        },
        {
          "name": "Connection",
          "value": "connections"
        },
        {
          "name": "Financing Event",
          "value": "financingEvents"
        },
        {
          "name": "Job Opening",
          "value": "jobOpenings"
        },
        {
          "name": "News Event",
          "value": "newsEvents"
        },
        {
          "name": "Technology",
          "value": "technologies"
        },
        {
          "name": "Technology Detection",
          "value": "technologyDetections"
        },
        {
          "name": "Website Evolution",
          "value": "websiteEvolution"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Company",
          "value": "retrieveCompany",
          "action": "Retrieve Company",
          "routing": {
            "request": {
              "url": "=/companies/{{$parameter.domain}}",
              "method": "GET"
            }
          },
          "description": "Returns Company"
        },
        {
          "name": "Retrieve Companies",
          "value": "retrieveCompanies",
          "action": "Retrieve Companies",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "sizes": "={{ $parameter.sizes }}",
                "location": "={{ $parameter.location }}"
              },
              "url": "=/discover/companies",
              "method": "GET",
              "arrayFormat": "brackets"
            }
          },
          "description": "Returns a list of companies filtered by their location and size, ordered by last updated date"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "companies"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Company Job Openings",
          "value": "retrieveCompanyJobOpenings",
          "action": "Retrieve Company Job Openings",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "categories": "={{ $parameter.categories.join(\",\") }}",
                "not_closed": "={{ $parameter.notClosed }}",
                "active_only": "={{ $parameter.activeOnly }}",
                "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
                "with_location_only": "={{ $parameter.withLocationOnly }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}",
                "with_description_only": "={{ $parameter.withDescriptionOnly }}"
              },
              "url": "=/companies/{{$parameter.domain}}/job_openings",
              "method": "GET"
            }
          },
          "description": "Returns a list of company's Job Openings"
        },
        {
          "name": "Retrieve Single Job Opening",
          "value": "retrieveSingleJobOpening",
          "action": "Retrieve Single Job Opening",
          "routing": {
            "request": {
              "url": "=/job_openings/{{$parameter.id}}",
              "method": "GET"
            }
          },
          "description": "Returns a single Job Opening"
        },
        {
          "name": "Retrieve a List of Job Openings",
          "value": "retrieveListOfJobOpenings",
          "action": "Retrieve a List of Job Openings",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "location": "={{ $parameter.location }}",
                "onet_codes": "={{ $parameter.onetCodes }}"
              },
              "url": "=/discover/job_openings",
              "method": "GET"
            }
          },
          "description": "Returns a list of Job Openings filtered by a given profession (e.g. \"Sales Engineers\" or \"Marketing Managers\") using O*NET occupation codes and/or location of the company"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "jobOpenings"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Technologies Used by Specific Company",
          "value": "retrieveTechnologiesUsedByCompany",
          "action": "Retrieve Technologies used by specific Company",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
              },
              "url": "=/companies/{{$parameter.domain}}/technology_detections",
              "method": "GET"
            }
          },
          "description": "Returns Technologies used by a specific Company as a list of Technology Detections"
        },
        {
          "name": "Retrieve Companies Using Specific Technology ID or Fuzzy Name",
          "value": "retrieveCompaniesUsingSpecificTechnology",
          "action": "Retrieve Companies using specific Technology ID or Fuzzy Name",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
              },
              "url": "=/discover/technologies/{{$parameter.idOrFuzzyName}}/technology_detections",
              "method": "GET"
            }
          },
          "description": "Returns Companies using a specific Technology as a list of Technology Detections, ordered by the first_seen_at, descending"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "technologyDetections"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve All Tracked Technologies",
          "value": "retrieveAllTrackedTechnologies",
          "action": "Retrieve All Tracked Technologies",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "order_by": "={{ $parameter.orderBy }}",
                "fuzzy_name": "={{ $parameter.fuzzyName }}"
              },
              "url": "=/technologies",
              "method": "GET"
            }
          },
          "description": "Returns a list of all tracked Technologies"
        },
        {
          "name": "Retrieve a Single Technology by ID or Fuzzy Name",
          "value": "retrieveSingleTechnologyByIdOrFuzzyName",
          "action": "Retrieve a Single Technology by ID or Fuzzy Name",
          "routing": {
            "request": {
              "url": "=/technologies/{{$parameter.idOrFuzzyName}}",
              "method": "GET"
            }
          },
          "description": "Returns a single Technology"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "technologies"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Company News Events",
          "value": "retrieveCompanyNewsEvents",
          "action": "Retrieve Company News Events",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "categories": "={{ $parameter.categories.join(\",\") }}",
                "found_at_from": "={{ $parameter.foundAtFrom }}",
                "found_at_until": "={{ $parameter.foundAtUntil }}"
              },
              "url": "=/companies/{{$parameter.domain}}/news_events",
              "method": "GET"
            }
          },
          "description": "Returns a list of company's News Events"
        },
        {
          "name": "Retrieve Single News Event",
          "value": "retrieveSingleNewsEvent",
          "action": "Retrieve Single News Event",
          "routing": {
            "request": {
              "url": "=/news_events/{{$parameter.id}}",
              "method": "GET"
            }
          },
          "description": "Returns specific News Event"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "newsEvents"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Company Financing Events",
          "value": "retrieveCompanyFinancingEvents",
          "action": "Retrieve Company Financing Events",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
              },
              "url": "=/companies/{{$parameter.domain}}/financing_events",
              "method": "GET"
            }
          },
          "description": "Returns a list of company's Financing Events"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "financingEvents"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Company Connections",
          "value": "retrieveCompanyConnections",
          "action": "Retrieve Company Connections",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "categories": "={{ $parameter.categories.join(\",\") }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
              },
              "url": "=/companies/{{$parameter.domain}}/connections",
              "method": "GET"
            }
          },
          "description": "Returns a list of company's Connections"
        },
        {
          "name": "Retrieve Portfolio Companies",
          "value": "retrievePortfolioCompanies",
          "action": "Retrieve Portfolio Companies",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
              },
              "url": "=/discover/portfolio_companies/connections",
              "method": "GET"
            }
          },
          "description": "Returns the Portfolio Companies found on the portfolio pages of thousands of VCs, accelerators, and incubators, as a list of Connections categorized as investor, ordered by the first_seen_at, descending"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "connections"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Company Website Evolution",
          "value": "retrieveCompanyWebsiteEvolution",
          "action": "Retrieve Company Website Evolution",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
              },
              "url": "=/companies/{{$parameter.domain}}/website_evolution",
              "method": "GET"
            }
          },
          "description": "Returns a list of company's Website Evolution"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "websiteEvolution"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Retrieve Company",
      "value": "retrieveCompany",
      "action": "Retrieve Company",
      "routing": {
        "request": {
          "url": "=/companies/{{$parameter.domain}}",
          "method": "GET"
        }
      },
      "description": "Returns Company"
    },
    {
      "name": "Retrieve Companies",
      "value": "retrieveCompanies",
      "action": "Retrieve Companies",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "sizes": "={{ $parameter.sizes }}",
            "location": "={{ $parameter.location }}"
          },
          "url": "=/discover/companies",
          "method": "GET",
          "arrayFormat": "brackets"
        }
      },
      "description": "Returns a list of companies filtered by their location and size, ordered by last updated date"
    },
    {
      "name": "Retrieve Company Job Openings",
      "value": "retrieveCompanyJobOpenings",
      "action": "Retrieve Company Job Openings",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "categories": "={{ $parameter.categories.join(\",\") }}",
            "not_closed": "={{ $parameter.notClosed }}",
            "active_only": "={{ $parameter.activeOnly }}",
            "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
            "with_location_only": "={{ $parameter.withLocationOnly }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}",
            "with_description_only": "={{ $parameter.withDescriptionOnly }}"
          },
          "url": "=/companies/{{$parameter.domain}}/job_openings",
          "method": "GET"
        }
      },
      "description": "Returns a list of company's Job Openings"
    },
    {
      "name": "Retrieve Single Job Opening",
      "value": "retrieveSingleJobOpening",
      "action": "Retrieve Single Job Opening",
      "routing": {
        "request": {
          "url": "=/job_openings/{{$parameter.id}}",
          "method": "GET"
        }
      },
      "description": "Returns a single Job Opening"
    },
    {
      "name": "Retrieve a List of Job Openings",
      "value": "retrieveListOfJobOpenings",
      "action": "Retrieve a List of Job Openings",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "location": "={{ $parameter.location }}",
            "onet_codes": "={{ $parameter.onetCodes }}"
          },
          "url": "=/discover/job_openings",
          "method": "GET"
        }
      },
      "description": "Returns a list of Job Openings filtered by a given profession (e.g. \"Sales Engineers\" or \"Marketing Managers\") using O*NET occupation codes and/or location of the company"
    },
    {
      "name": "Retrieve Technologies Used by Specific Company",
      "value": "retrieveTechnologiesUsedByCompany",
      "action": "Retrieve Technologies used by specific Company",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
          },
          "url": "=/companies/{{$parameter.domain}}/technology_detections",
          "method": "GET"
        }
      },
      "description": "Returns Technologies used by a specific Company as a list of Technology Detections"
    },
    {
      "name": "Retrieve Companies Using Specific Technology ID or Fuzzy Name",
      "value": "retrieveCompaniesUsingSpecificTechnology",
      "action": "Retrieve Companies using specific Technology ID or Fuzzy Name",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
          },
          "url": "=/discover/technologies/{{$parameter.idOrFuzzyName}}/technology_detections",
          "method": "GET"
        }
      },
      "description": "Returns Companies using a specific Technology as a list of Technology Detections, ordered by the first_seen_at, descending"
    },
    {
      "name": "Retrieve All Tracked Technologies",
      "value": "retrieveAllTrackedTechnologies",
      "action": "Retrieve All Tracked Technologies",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "order_by": "={{ $parameter.orderBy }}",
            "fuzzy_name": "={{ $parameter.fuzzyName }}"
          },
          "url": "=/technologies",
          "method": "GET"
        }
      },
      "description": "Returns a list of all tracked Technologies"
    },
    {
      "name": "Retrieve a Single Technology by ID or Fuzzy Name",
      "value": "retrieveSingleTechnologyByIdOrFuzzyName",
      "action": "Retrieve a Single Technology by ID or Fuzzy Name",
      "routing": {
        "request": {
          "url": "=/technologies/{{$parameter.idOrFuzzyName}}",
          "method": "GET"
        }
      },
      "description": "Returns a single Technology"
    },
    {
      "name": "Retrieve Company News Events",
      "value": "retrieveCompanyNewsEvents",
      "action": "Retrieve Company News Events",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "categories": "={{ $parameter.categories.join(\",\") }}",
            "found_at_from": "={{ $parameter.foundAtFrom }}",
            "found_at_until": "={{ $parameter.foundAtUntil }}"
          },
          "url": "=/companies/{{$parameter.domain}}/news_events",
          "method": "GET"
        }
      },
      "description": "Returns a list of company's News Events"
    },
    {
      "name": "Retrieve Single News Event",
      "value": "retrieveSingleNewsEvent",
      "action": "Retrieve Single News Event",
      "routing": {
        "request": {
          "url": "=/news_events/{{$parameter.id}}",
          "method": "GET"
        }
      },
      "description": "Returns specific News Event"
    },
    {
      "name": "Retrieve Company Financing Events",
      "value": "retrieveCompanyFinancingEvents",
      "action": "Retrieve Company Financing Events",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
          },
          "url": "=/companies/{{$parameter.domain}}/financing_events",
          "method": "GET"
        }
      },
      "description": "Returns a list of company's Financing Events"
    },
    {
      "name": "Retrieve Company Connections",
      "value": "retrieveCompanyConnections",
      "action": "Retrieve Company Connections",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "categories": "={{ $parameter.categories.join(\",\") }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
          },
          "url": "=/companies/{{$parameter.domain}}/connections",
          "method": "GET"
        }
      },
      "description": "Returns a list of company's Connections"
    },
    {
      "name": "Retrieve Portfolio Companies",
      "value": "retrievePortfolioCompanies",
      "action": "Retrieve Portfolio Companies",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
          },
          "url": "=/discover/portfolio_companies/connections",
          "method": "GET"
        }
      },
      "description": "Returns the Portfolio Companies found on the portfolio pages of thousands of VCs, accelerators, and incubators, as a list of Connections categorized as investor, ordered by the first_seen_at, descending"
    },
    {
      "name": "Retrieve Company Website Evolution",
      "value": "retrieveCompanyWebsiteEvolution",
      "action": "Retrieve Company Website Evolution",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
          },
          "url": "=/companies/{{$parameter.domain}}/website_evolution",
          "method": "GET"
        }
      },
      "description": "Returns a list of company's Website Evolution"
    }
  ]

npm_readme:
  ![Banner image](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png)

  # n8n-nodes-predict-leads

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

  [PredictLeads](https://predictleads.com/) company intelligence data powers a wide range of business applications, from AI-powered automation to market research and investment analysis.

  ## Installation

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

  ## Operations

  This node supports the following operations:
  - retrieve company's data
  - retrieve companies' data based on their size and location
  - retrieve company's job openings
  - retrieve a single job opening
  - retrieve a list of job openings based on O*NET codes and location
  - retrieve technologies used by a specific company
  - retrieve companies using a specific technology
  - retrieve all tracked technologies
  - retrieve a single technology
  - retrieve company's news events
  - retrieve a single news event
  - retrieve company's financing events
  - retrieve company's connections
  - retrieve portfolio companies
  - retrieve company's website evolution

  ## Credentials

  You must have a PredictLeads API key and token to use this node. You can register for a free account to get your API key and token here:

  https://predictleads.com/sign_in

  Once registered, you can find your API key and token here:

  https://predictleads.com/dashboard

  Then you'll need to create credentials in n8n for PredictLeads.

  ![Add Credentials](images/add-credentials.png)

  ## Compatibility

  - Minimum n8n version: 1.84.0
  - Verified working with: 1.119.1
  - Known issues: None

  ## Usage

  Add PredictLeads node to a workflow.

  ![Add PredictLeads to Workflow](images/workflow.png)

  Configure a basic query and hit "Test step" to get the data.

  ![Test a company search through PredictLeads](images/test-company-search.png)

  ## API Resources / Search Engines

  This node currently only supports the most popular PredictLeads endpoints. If there's an endpoints missing that you would like to use, please let us know at support@predictleads.com

  In the meantime, you can also use the [generic HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to get the data from other endpoints.

  ## Related Resources

  PredictLeads's complete API documentation is available here:

  https://docs.predictleads.com/

  ## License

  [MIT](https://github.com/serpapi/n8n-nodes-serpapi/blob/master/LICENSE.md)

ai_documentation_summary:
  {"purpose":"The PredictLeads node retrieves company intelligence data from PredictLeads, enabling workflows to access insights such as company profiles, job openings, technologies, news events, financing, and more.","capabilities":["retrieve company's data","retrieve companies' data based on size and location","retrieve company's job openings","retrieve a single job opening","retrieve job openings by O*NET codes and location","retrieve technologies used by a company","retrieve companies using a specific technology","retrieve all tracked technologies","retrieve a single technology","retrieve company's news events"],"authentication":"API key and token required. Obtain them from https://predictleads.com/dashboard after registering at https://predictleads.com/sign_in.","commonUseCases":["Market research and competitive analysis","AI-powered lead generation and business intelligence","Investment analysis using company financial and operational data","Job market intelligence and talent sourcing","Technology stack analysis for business decisions"],"limitations":["Only supports popular PredictLeads endpoints; less common endpoints are not available","Missing endpoints can be accessed via generic HTTP Request node if needed"],"relatedNodes":["HTTP Request (generic)","Company Intelligence nodes"]}


node_type: @starhunter/n8n-nodes-graphql.starhunter
package_name: @starhunter/n8n-nodes-graphql
display_name: Starhunter
description: Interact with Starhunter
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: andreas-ullrich-elunic
author_github_url: https://github.com/starhunter-gmbh/n8n-nodes-graphql.git
npm_package_name: @starhunter/n8n-nodes-graphql
npm_version: 0.2.1
community_fetched_at: 2026-01-07T20:08:16.023Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "person",
      "options": [
        {
          "name": "Candidate",
          "value": "candidate"
        },
        {
          "name": "Email",
          "value": "email"
        },
        {
          "name": "Employee",
          "value": "employee"
        },
        {
          "name": "Person",
          "value": "person"
        },
        {
          "name": "Project",
          "value": "project"
        },
        {
          "name": "Project Candidate",
          "value": "projectCandidate"
        },
        {
          "name": "Task",
          "value": "task"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBirthdays",
      "options": [
        {
          "name": "Get Birthdays",
          "value": "getBirthdays",
          "action": "Get persons with birthdays on a date",
          "description": "Get all persons with birthdays on a specific date"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get a person by ID",
          "description": "Retrieve a single person by their ID"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search persons",
          "description": "Search for persons by name"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "person"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search candidates",
          "description": "Search for candidates by ID, name, or birth date"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "candidate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Get Current User",
          "value": "getCurrent",
          "action": "Get current authenticated user",
          "description": "Get the employee record for the authenticated user"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search employees",
          "description": "Search for employees by ID or name"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "employee"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "log",
      "options": [
        {
          "name": "Log Email",
          "value": "log",
          "action": "Log an email activity",
          "description": "Log an email activity in Starhunter"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "add",
      "options": [
        {
          "name": "Add to Project",
          "value": "add",
          "action": "Add candidate to project",
          "description": "Add a candidate to a project with optional status"
        },
        {
          "name": "Get By Status Change Date",
          "value": "getByStatusChangeDate",
          "action": "Get candidates by status change date",
          "description": "Get project candidates whose status changed X days ago"
        },
        {
          "name": "Update Status",
          "value": "updateStatus",
          "action": "Update presentation status",
          "description": "Update the status of a presentation with optional comment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "projectCandidate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task",
          "description": "Create a new task in Starhunter"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search projects",
          "description": "Search for projects by status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Birthdays",
      "value": "getBirthdays",
      "action": "Get persons with birthdays on a date",
      "description": "Get all persons with birthdays on a specific date"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get a person by ID",
      "description": "Retrieve a single person by their ID"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search persons",
      "description": "Search for persons by name"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search candidates",
      "description": "Search for candidates by ID, name, or birth date"
    },
    {
      "name": "Get Current User",
      "value": "getCurrent",
      "action": "Get current authenticated user",
      "description": "Get the employee record for the authenticated user"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search employees",
      "description": "Search for employees by ID or name"
    },
    {
      "name": "Log Email",
      "value": "log",
      "action": "Log an email activity",
      "description": "Log an email activity in Starhunter"
    },
    {
      "name": "Add to Project",
      "value": "add",
      "action": "Add candidate to project",
      "description": "Add a candidate to a project with optional status"
    },
    {
      "name": "Get By Status Change Date",
      "value": "getByStatusChangeDate",
      "action": "Get candidates by status change date",
      "description": "Get project candidates whose status changed X days ago"
    },
    {
      "name": "Update Status",
      "value": "updateStatus",
      "action": "Update presentation status",
      "description": "Update the status of a presentation with optional comment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "description": "Create a new task in Starhunter"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search projects",
      "description": "Search for projects by status"
    }
  ]

npm_readme:
  # @starhunter/n8n-nodes-graphql

  This is an n8n community node that integrates with [Starhunter](https://starhunter.com) in your n8n workflows.

  Starhunter is a customer relationship management (CRM) system designed for recruiting and talent management. This node allows you to automate interactions with persons, candidates, employees, emails, project candidates, and tasks in Starhunter.

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

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

  ## Installation

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

  ## Operations

  ### Person

  - **Get Birthdays**: Retrieve persons whose birthday falls on a specific date (today or a custom date in MM-DD format)
  - **Get by ID**: Retrieve a single person by their ID
  - **Search**: Search for persons by name (partial match supported)

  ### Candidate

  - **Search**: Search for candidates by ID, name, or birth date

  ### Employee

  - **Get Current**: Get the employee record for the currently authenticated user
  - **Search**: Search for employees by ID or name

  ### Email

  - **Log**: Log an email activity in Starhunter (records sender, recipient, subject, and body)

  ### Project Candidate

  - **Get by Status Change Date**: Retrieve project candidates whose status changed a specified number of days ago

  ### Task

  - **Create**: Create a new task with optional deadline, assignee, and target entity

  ## Credentials

  To use this node, you need to authenticate with your Starhunter instance using an API access token.

  ### Prerequisites

  1. Access to a Starhunter instance
  2. A valid API access token from your Starhunter account settings

  ### Setting up credentials in n8n

  1. In n8n, go to **Credentials** and click **Add Credential**
  2. Search for **Starhunter API**
  3. Enter the following:
     - **Base URL**: The base URL of your Starhunter instance (e.g., `https://your-company.starhunter.software`).
     - **Access Token**: Your Starhunter API access token
  4. Click **Save** to test the connection

  For API documentation, refer to your instance's built-in docs at `https://<your-instance>.starhunter.software/Api/docs`.

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **n8n Nodes API version**: 1
  - **AI Tool compatible**: Yes (can be used as a tool in n8n AI workflows)

  Tested with n8n version 1.x.

  ## Usage

  ### Example: Birthday notifications

  Create a workflow that runs daily to fetch persons with birthdays today and send notification emails or Slack messages to your team.

  1. Add a **Schedule Trigger** node set to run daily
  2. Add the **Starhunter** node with:
     - Resource: Person
     - Operation: Get Birthdays
     - Use Today: enabled
  3. Connect to an **Email** or **Slack** node to send notifications

  ### Example: Log emails to CRM

  Automatically log emails sent through your workflow back to Starhunter for tracking purposes.

  1. After sending an email in your workflow, add the **Starhunter** node
  2. Configure with:
     - Resource: Email
     - Operation: Log
     - Map the from, to, subject, and body fields from your email node

  ### Example: Track candidate status changes

  Monitor candidates who changed status a specific number of days ago for follow-up actions.

  1. Add a **Schedule Trigger** node
  2. Add the **Starhunter** node with:
     - Resource: Project Candidate
     - Operation: Get by Status Change Date
     - Status: Your target status (e.g., "Ident")
     - Days Ago: Number of days to look back

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Starhunter](https://starhunter.software)

  ## Version history

  ### 0.1.1

  - Initial public release
  - Added publishConfig for npm public access

  ### 0.1.0

  - Initial release with support for:
    - Person operations (Get Birthdays, Get by ID, Search)
    - Candidate operations (Search)
    - Employee operations (Get Current, Search)
    - Email operations (Log)
    - Project Candidate operations (Get by Status Change Date)
    - Task operations (Create)

ai_documentation_summary:
  {"purpose":"The Starhunter node enables automation of CRM interactions within Starhunter, a recruiting and talent management platform, by allowing workflows to retrieve, search, and update data on persons, candidates, employees, emails, project candidates, and tasks.","capabilities":["Retrieve persons by birthday (today or custom date)","Get a person by ID","Search persons by name","Search candidates by ID, name, or birth date","Get current employee record (authenticated user)","Search employees by ID or name","Log email activities (sender, recipient, subject, body)","Retrieve project candidates whose status changed a specified number of days ago","Create new tasks with optional deadline, assignee, and target entity"],"authentication":"API access token required; configure via credentials with base URL and access token","commonUseCases":["Send birthday notifications to HR or hiring teams","Log outgoing emails into Starhunter for activity tracking","Monitor candidate status changes for follow-up actions","Automate employee data retrieval for reporting or onboarding"],"limitations":[],"relatedNodes":["Schedule Trigger","Email","Slack","AI Tool"]}


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

updated_at: 2026-01-07 20:08:16
author_name: sysmonitor
author_github_url: https://github.com/CaspioInnovations/n8n-node-caspioofficial.git
npm_package_name: n8n-nodes-caspioofficial
npm_version: 1.0.4
community_fetched_at: 2026-01-07T20:08:16.023Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "record",
      "options": [
        {
          "name": "Attachment",
          "value": "attachment"
        },
        {
          "name": "Data Import/Export Task",
          "value": "task"
        },
        {
          "name": "Directory",
          "value": "directory"
        },
        {
          "name": "File",
          "value": "file"
        },
        {
          "name": "Record",
          "value": "record"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create record",
          "description": "Create a new record in a table"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete records",
          "description": "Delete a record from a table"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many records",
          "description": "Returns records from a table or a view"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update records",
          "description": "Update a record in a table"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "record"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listFiles",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete file",
          "description": "Delete a file from Files area"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download file",
          "description": "Download a file from Files area"
        },
        {
          "name": "Get File Properties",
          "value": "listFiles",
          "action": "Get file properties",
          "description": "Returns file properties from Fiels area"
        },
        {
          "name": "Get Folder Properties",
          "value": "listFolders",
          "action": "Get folder properties",
          "description": "Returns folder properties from Files area"
        },
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload file",
          "description": "Upload a file to Files area"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete attachments",
          "description": "Delete files from an attachment field"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download attachments",
          "description": "Download files from an attachment field"
        },
        {
          "name": "Get Properties",
          "value": "list",
          "action": "Get attachment properties",
          "description": "Returns file properties stored in an attachment field"
        },
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload attachment",
          "description": "Upload a file to an attachment field"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attachment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many data import export tasks",
          "description": "Returns the list of data import/export tasks"
        },
        {
          "name": "Run",
          "value": "run",
          "action": "Run data import export task",
          "description": "Run a chosen data import export task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getUsers",
      "options": [
        {
          "name": "Activate User",
          "value": "activateUser",
          "action": "Activate user",
          "description": "Activate a user in a directory"
        },
        {
          "name": "Create User",
          "value": "createUser",
          "action": "Create user",
          "description": "Create a new user in a directory"
        },
        {
          "name": "Delete User",
          "value": "deleteUsers",
          "action": "Delete users",
          "description": "Delete users from a directory"
        },
        {
          "name": "Get Many Directories",
          "value": "list",
          "action": "Get many directories",
          "description": "Returns the list of directories"
        },
        {
          "name": "Get Many Users",
          "value": "getUsers",
          "action": "Get many users",
          "description": "Returns the list of users in a directory"
        },
        {
          "name": "Update User",
          "value": "updateUsers",
          "action": "Update users",
          "description": "Update a user in a directory"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "directory"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create record",
      "description": "Create a new record in a table"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete records",
      "description": "Delete a record from a table"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many records",
      "description": "Returns records from a table or a view"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update records",
      "description": "Update a record in a table"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete file",
      "description": "Delete a file from Files area"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download file",
      "description": "Download a file from Files area"
    },
    {
      "name": "Get File Properties",
      "value": "listFiles",
      "action": "Get file properties",
      "description": "Returns file properties from Fiels area"
    },
    {
      "name": "Get Folder Properties",
      "value": "listFolders",
      "action": "Get folder properties",
      "description": "Returns folder properties from Files area"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload file",
      "description": "Upload a file to Files area"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete attachments",
      "description": "Delete files from an attachment field"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download attachments",
      "description": "Download files from an attachment field"
    },
    {
      "name": "Get Properties",
      "value": "list",
      "action": "Get attachment properties",
      "description": "Returns file properties stored in an attachment field"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload attachment",
      "description": "Upload a file to an attachment field"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many data import export tasks",
      "description": "Returns the list of data import/export tasks"
    },
    {
      "name": "Run",
      "value": "run",
      "action": "Run data import export task",
      "description": "Run a chosen data import export task"
    },
    {
      "name": "Activate User",
      "value": "activateUser",
      "action": "Activate user",
      "description": "Activate a user in a directory"
    },
    {
      "name": "Create User",
      "value": "createUser",
      "action": "Create user",
      "description": "Create a new user in a directory"
    },
    {
      "name": "Delete User",
      "value": "deleteUsers",
      "action": "Delete users",
      "description": "Delete users from a directory"
    },
    {
      "name": "Get Many Directories",
      "value": "list",
      "action": "Get many directories",
      "description": "Returns the list of directories"
    },
    {
      "name": "Get Many Users",
      "value": "getUsers",
      "action": "Get many users",
      "description": "Returns the list of users in a directory"
    },
    {
      "name": "Update User",
      "value": "updateUsers",
      "action": "Update users",
      "description": "Update a user in a directory"
    }
  ]

npm_readme:
  # n8n-nodes-caspioofficial

  This is an n8n community node for integrating with [Caspio](https://www.caspio.com/). Caspio is a low-code platform that helps you create custom business applications fast, combining database management, application building, and workflow automation in a single platform.

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

  ## Installation

  ### Community Nodes (n8n Cloud)

  For verified community nodes on n8n Cloud:

  1. Open your n8n workflow editor
  2. Select the **+** button or press **Tab** to open the nodes panel
  3. Search for "Caspio" and select it
  4. Select **Install** to add the node

  ### Self-Hosted

  For self-hosted n8n instances:

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter the npm package name: `n8n-nodes-caspioofficial`
  4. Agree to the risks of installing community nodes
  5. Select **Install**

  Note: Only the instance owner can install community nodes. Admin accounts can uninstall nodes if needed.

  ## Documentation

  This node provides comprehensive integration with Caspio's REST API:

  - **[Credentials Setup](https://howto.caspio.com/integrate-your-apps/integration-with-n8n/n8n-integration-credentials)** - Configure OAuth2 authentication with your Caspio account
  - **[Action Node Operations](https://howto.caspio.com/integrate-your-apps/integration-with-n8n/n8n-integration-actions)** - Work with tables, views, directories, files, attachments, and tasks
  - **[Trigger Node Setup](https://howto.caspio.com/integrate-your-apps/integration-with-n8n/n8n-integration-triggers)** - Set up webhooks for real-time event notifications

  ## Compatibility

  This node uses Caspio REST API v3.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Caspio REST API documentation](https://howto.caspio.com/web-services-api/rest-api/)
  - [Caspio homepage](https://www.caspio.com/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"The Caspio n8n node enables integration with Caspio's REST API v3, allowing users to interact with Caspio applications by performing actions on tables, views, directories, files, attachments, and tasks, as well as triggering workflows based on real-time events.","capabilities":["Authenticate via OAuth2","Read and write data from Caspio tables and views","Manage directories, files, and attachments","Handle tasks and workflows","Set up triggers for real-time event notifications via webhooks"],"authentication":"OAuth2 authentication required","commonUseCases":["Syncing data between n8n and Caspio databases","Automating form submissions or task updates in Caspio","Triggering workflows when new records are added in Caspio","Managing file uploads and attachments in Caspio applications"],"limitations":[],"relatedNodes":["n8n trigger nodes","n8n action nodes","n8n OAuth2 authentication nodes"]}


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

updated_at: 2026-01-07 20:08:16
author_name: docuprox
author_github_url: https://github.com/docuprox/n8n-docuprox.git
npm_package_name: n8n-nodes-docuprox
npm_version: 1.0.6
community_fetched_at: 2026-01-07T20:08:16.024Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "document",
      "options": [
        {
          "name": "Document",
          "value": "document",
          "description": "Work with documents using DocuProx"
        }
      ],
      "required": true,
      "displayName": "Resource"
    },
    {
      "name": "operation",
      "type": "options",
      "default": "process",
      "options": [
        {
          "name": "Process",
          "value": "process",
          "action": "Process a document",
          "description": "Process a document with a template"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      }
    }
  ]

operations:
  [
    {
      "name": "Process",
      "value": "process",
      "action": "Process a document",
      "description": "Process a document with a template"
    }
  ]

npm_readme:
  # n8n-nodes-docuprox

  An n8n custom node for integrating with the DocuProx API to process documents using AI-powered document processing templates.

  ## Description

  This n8n node allows you to process documents by providing a template ID and an image (either as a binary file upload or base64 encoded string). The node communicates with the DocuProx API to extract structured data from documents based on predefined templates.

  ## Installation

  1. Clone or download this repository
  2. Navigate to the project directory
  3. Install dependencies:
     ```bash
     npm install
     ```
  4. Build the project:
     ```bash
     npm run build
     ```
  5. Copy the `dist` folder to your n8n custom nodes directory
  6. Restart n8n

  ## Usage

  1. Add the "DocuProx" node to your n8n workflow
  2. Configure your DocuProx API credentials (see Configuration section)
  3. Set the Template ID for the document processing template you want to use
  4. Choose your image source:
     - **Upload Image File**: Provide the binary property name containing the image file
     - **Base64 String**: Directly input the base64 encoded image data
  5. Execute the workflow

  The node will return the processed document data from the DocuProx API.

  ## Configuration

  ### Credentials Setup

  Before using the node, you need to set up your DocuProx API credentials:

  1. Go to your n8n instance
  2. Navigate to Settings > Credentials
  3. Create a new credential of type "DocuProx API"
  4. Enter your DocuProx API key
  5. Save the credential

  ### Node Properties

  - **Template ID** (required): The ID of the template to use for document processing
  - **Image Source** (required):
    - Upload Image File: Upload an image file from binary data
    - Base64 String: Provide image as Base64 encoded string
  - **Binary Property Name** (required when using Upload): Name of the binary property containing the image file
  - **Base64 Image** (required when using Base64): The base64 encoded image data

  ## API Reference

  ### Input
  - Template ID: String
  - Image: Binary file or Base64 string

  ### Output
  - Success status
  - Template ID used
  - API response data
  - Timestamp

  ### Error Handling
  The node includes comprehensive error handling and will return error details if the API call fails. You can configure the node to continue on failure or stop the workflow.

  ## Development

  ### Prerequisites
  - Node.js
  - npm
  - n8n instance

  ### Scripts
  - `npm run build`: Build the TypeScript code and copy assets
  - `npm run dev`: Watch mode for development
  - `npm run format`: Format code with Prettier
  - `npm run lint`: Lint code with ESLint

  ### 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
  ├── tsconfig.json
  └── README.md
  ```

  ## License

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

ai_documentation_summary:
  {"purpose":"The DocuProx node integrates with the DocuProx API to process documents using AI-powered templates, extracting structured data from images by specifying a template ID and providing either a binary image file or a base64-encoded image string.","capabilities":["Process documents using predefined AI-powered templates","Support for uploading image files via binary data","Support for base64-encoded image input","Return structured data extracted from documents","Comprehensive error handling with workflow control options"],"authentication":"API key required via a 'DocuProx API' credential in n8n Settings > Credentials","commonUseCases":["Extracting structured data from scanned invoices or forms","Automating data entry from document images using predefined templates","Integrating document processing into automated workflows for finance or HR operations"],"limitations":[],"relatedNodes":["Image processing nodes","Data extraction nodes","AI-powered automation nodes"]}


node_type: @servicem8/n8n-nodes-servicem8.serviceM8
package_name: @servicem8/n8n-nodes-servicem8
display_name: ServiceM8
description: Automate job, staff & client workflows in your trade service business.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: servicem8-devops
author_github_url: https://github.com/servicem8/n8n-nodes-servicem8.git
npm_package_name: @servicem8/n8n-nodes-servicem8
npm_version: 0.1.4
community_fetched_at: 2026-01-07T20:08:16.025Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "client",
      "options": [
        {
          "name": "Client",
          "value": "client"
        },
        {
          "name": "Email",
          "value": "email"
        },
        {
          "name": "Inbox",
          "value": "inbox"
        },
        {
          "name": "Job",
          "value": "job"
        },
        {
          "name": "Search",
          "value": "search"
        },
        {
          "name": "SMS",
          "value": "sms"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get customer details"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get multiple clients"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "client"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Add Note To Job",
          "value": "addNoteToJob",
          "action": "Add job note"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create new job"
        },
        {
          "name": "Create From Template",
          "value": "createFromTemplate",
          "action": "Create job from template"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete job"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get job details"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get multiple jobs"
        },
        {
          "name": "Send Job To Queue",
          "value": "sendJobToQueue",
          "action": "Queue job"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update job details"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "job"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendEmail",
      "options": [
        {
          "name": "Send Email",
          "value": "sendEmail",
          "action": "Send email"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendSMS",
      "options": [
        {
          "name": "Send SMS",
          "value": "sendSMS",
          "action": "Send text message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sms"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createInboxMessage",
      "options": [
        {
          "name": "Create Inbox Message",
          "value": "createInboxMessage",
          "action": "Create inbox message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inbox"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "globalSearch",
      "options": [
        {
          "name": "Global Search",
          "value": "globalSearch",
          "action": "Search everything"
        },
        {
          "name": "Search",
          "value": "objectSearch",
          "action": "Search specific type"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get customer details"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get multiple clients"
    },
    {
      "name": "Add Note To Job",
      "value": "addNoteToJob",
      "action": "Add job note"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create new job"
    },
    {
      "name": "Create From Template",
      "value": "createFromTemplate",
      "action": "Create job from template"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete job"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get job details"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get multiple jobs"
    },
    {
      "name": "Send Job To Queue",
      "value": "sendJobToQueue",
      "action": "Queue job"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update job details"
    },
    {
      "name": "Send Email",
      "value": "sendEmail",
      "action": "Send email"
    },
    {
      "name": "Send SMS",
      "value": "sendSMS",
      "action": "Send text message"
    },
    {
      "name": "Create Inbox Message",
      "value": "createInboxMessage",
      "action": "Create inbox message"
    },
    {
      "name": "Global Search",
      "value": "globalSearch",
      "action": "Search everything"
    },
    {
      "name": "Search",
      "value": "objectSearch",
      "action": "Search specific type"
    }
  ]

npm_readme:
  # n8n-nodes-servicem8

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

  ServiceM8 is a job management software designed for small service businesses, helping them streamline scheduling, quoting, invoicing, and communication. It enables field staff to access job details, capture information, and process payments on-site via a mobile app.

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

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

  ## Installation

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

  ## Operations

  ### Client (Customer)
  - **Get** - Get customer details
  - **Get Many** - Get multiple clients

  ### Job
  - **Create** - Create new job
  - **Create From Template** - Create job from template
  - **Get** - Get job details
  - **Get Many** - Get multiple jobs
  - **Update** - Update job details
  - **Delete** - Delete job
  - **Add Note To Job** - Add job note
  - **Send Job To Queue** - Queue job

  ### Email
  - **Send Email** - Send email

  ### Inbox
  - **Create Inbox Message** - Create inbox message

  ### SMS
  - **Send SMS** - Send text message

  ### Search
  - **Global Search** - Search everything
  - **Search** - Search specific type

  ### Webhook Trigger
  Available webhook events:
  - Badge Added to Job
  - Badge Removed From Job
  - Customer Accepted the Quote
  - Customer Details Updated
  - Customer Review Submitted
  - Form Response Submitted
  - Full Payment Received for Invoice
  - Invoice Sent to Customer
  - Job Added to Queue
  - Job Details Modified
  - Job Marked as Completed
  - Job Status Changed
  - New Customer Added
  - New Job Created in the System
  - New Message Received in Inbox
  - Note Added to Job
  - Photo Attached to Job
  - Proposal Sent to Customer
  - Proposal Viewed by Customer
  - Quote Sent to Customer

  ## Credentials

  This node supports two authentication methods:

  ### API Key Authentication 
  1. Log in to your ServiceM8 account
  2. Navigate to **Settings** > **API Keys**
  3. Click **Generate API Key**
  4. Copy your API key and account email
  5. In n8n, create new ServiceM8 credentials with your email and API key

  ## Compatibility

  Tested with n8n v1.110.0 and later.

  ## Usage

  ### Create Job from Web Form
  This example shows how to create a new job when a web form is submitted:

  1. Set up a Webhook trigger to receive form submissions
  2. Use the Company node to create or find the customer
  3. Use the Job node to create a new job for that customer

  ### Daily Schedule Email
  This example shows how to email tomorrow's schedule to staff:

  1. Set up a Schedule trigger to run daily
  2. Use the Activity node to list tomorrow's activities
  3. Use an Email node to send the schedule

  For detailed usage examples and field mapping information, refer to the ServiceM8 API documentation.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes)
  * [ServiceM8 API Documentation](https://developer.servicem8.com/docs)
  * [ServiceM8 Developer Forum](https://developer.servicem8.com/discuss)
  * [GitHub Issues](https://github.com/servicem8/n8n-nodes-servicem8/issues)

  ## Version history

  ### 0.1.4
  - Added Inbox resource with create message action

  ### 0.1.0
  Initial release of the ServiceM8 node with support for:
  - Jobs management
  - Customer (Company) management
  - Webhook triggers

ai_documentation_summary:
  {"purpose":"The ServiceM8 node enables automation of job, staff, and client workflows in trade service businesses by integrating with ServiceM8's job management platform for tasks like creating jobs, managing customers, sending emails and SMS, and triggering actions via webhooks.","capabilities":["Get customer details","Get multiple customers","Create a new job","Create a job from a template","Get job details","Get multiple jobs","Update job details","Delete a job","Add a note to a job","Send a job to a queue"],"authentication":"API Key Authentication: Generate an API key from ServiceM8 Settings > API Keys, then provide the API key and account email in n8n credentials.","commonUseCases":["Automatically create jobs from web form submissions","Send daily staff schedules via email","Notify customers when a quote is accepted or invoice is sent","Update job status or add notes based on real-time events","Send SMS or email reminders for upcoming jobs"],"limitations":[],"relatedNodes":["Webhook Trigger","Company (Customer) Node","Email Node","SMS Node","Search Node"]}


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

updated_at: 2026-01-07 20:08:16
author_name: goranstjepanovic
author_github_url: https://github.com/flarelight-io/n8n-nodes-flarelight.git
npm_package_name: @flarelight/n8n-nodes-flarelight
npm_version: 1.0.2
community_fetched_at: 2026-01-07T20:08:16.025Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "import",
      "options": [
        {
          "name": "Automation",
          "value": "automation"
        },
        {
          "name": "Import",
          "value": "import"
        },
        {
          "name": "Preparation",
          "value": "preparation"
        },
        {
          "name": "Report",
          "value": "report"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Execute Automation",
          "value": "execute",
          "action": "Execute automation",
          "routing": {
            "request": {
              "url": "=/Automation/{{$parameter[\"automationId\"]}}/Execute",
              "method": "POST"
            }
          },
          "description": "Execute an automation by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "automation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many imports",
          "routing": {
            "request": {
              "url": "/Import/All",
              "method": "GET"
            }
          },
          "description": "Get many available imports"
        },
        {
          "name": "Get Import Data",
          "value": "getData",
          "action": "Get import data",
          "routing": {
            "request": {
              "url": "=/Import/{{$parameter[\"importId\"]}}/Data?start={{ $parameter.start }}&count={{ $parameter.count }}",
              "method": "GET"
            }
          },
          "description": "Get data from a specific import"
        },
        {
          "name": "Create Import",
          "value": "create",
          "action": "Create import",
          "routing": {
            "request": {
              "url": "/Import/Data",
              "body": "={{ JSON.parse($parameter.importRequest) }}",
              "method": "POST"
            }
          },
          "description": "Create a new data import"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "import"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many preparations",
          "routing": {
            "request": {
              "url": "/Preparation/All",
              "method": "GET"
            }
          },
          "description": "Get many available data preparations"
        },
        {
          "name": "Get Preparation Data",
          "value": "getData",
          "action": "Get preparation data",
          "routing": {
            "request": {
              "url": "=/Preparation/{{$parameter[\"preparationId\"]}}/Data?start={{ $parameter.start }}&count={{ $parameter.count }}",
              "method": "GET"
            }
          },
          "description": "Get data from a specific preparation"
        },
        {
          "name": "Execute Preparation",
          "value": "execute",
          "action": "Execute preparation",
          "routing": {
            "request": {
              "url": "=/Preparation/{{$parameter[\"preparationId\"]}}/Execute",
              "method": "POST"
            }
          },
          "description": "Execute a data preparation by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "preparation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many reports",
          "routing": {
            "request": {
              "url": "/Report/All",
              "method": "GET"
            }
          },
          "description": "Get many available reports"
        },
        {
          "name": "Get Report",
          "value": "get",
          "action": "Get report",
          "routing": {
            "request": {
              "url": "=/Report/{{$parameter[\"reportId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a specific report by ID"
        },
        {
          "name": "Generate Report",
          "value": "generate",
          "action": "Generate report",
          "routing": {
            "request": {
              "url": "=/Report/{{$parameter[\"reportId\"]}}/Generate",
              "method": "POST"
            }
          },
          "description": "Generate a report by ID"
        },
        {
          "name": "Get Chart Data",
          "value": "getChartData",
          "action": "Get chart data",
          "routing": {
            "request": {
              "url": "/Report/ChartData",
              "body": "={{ JSON.parse($parameter.chartDataRequest) }}",
              "method": "POST"
            }
          },
          "description": "Get chart data for reports"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "report"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Execute Automation",
      "value": "execute",
      "action": "Execute automation",
      "routing": {
        "request": {
          "url": "=/Automation/{{$parameter[\"automationId\"]}}/Execute",
          "method": "POST"
        }
      },
      "description": "Execute an automation by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many imports",
      "routing": {
        "request": {
          "url": "/Import/All",
          "method": "GET"
        }
      },
      "description": "Get many available imports"
    },
    {
      "name": "Get Import Data",
      "value": "getData",
      "action": "Get import data",
      "routing": {
        "request": {
          "url": "=/Import/{{$parameter[\"importId\"]}}/Data?start={{ $parameter.start }}&count={{ $parameter.count }}",
          "method": "GET"
        }
      },
      "description": "Get data from a specific import"
    },
    {
      "name": "Create Import",
      "value": "create",
      "action": "Create import",
      "routing": {
        "request": {
          "url": "/Import/Data",
          "body": "={{ JSON.parse($parameter.importRequest) }}",
          "method": "POST"
        }
      },
      "description": "Create a new data import"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many preparations",
      "routing": {
        "request": {
          "url": "/Preparation/All",
          "method": "GET"
        }
      },
      "description": "Get many available data preparations"
    },
    {
      "name": "Get Preparation Data",
      "value": "getData",
      "action": "Get preparation data",
      "routing": {
        "request": {
          "url": "=/Preparation/{{$parameter[\"preparationId\"]}}/Data?start={{ $parameter.start }}&count={{ $parameter.count }}",
          "method": "GET"
        }
      },
      "description": "Get data from a specific preparation"
    },
    {
      "name": "Execute Preparation",
      "value": "execute",
      "action": "Execute preparation",
      "routing": {
        "request": {
          "url": "=/Preparation/{{$parameter[\"preparationId\"]}}/Execute",
          "method": "POST"
        }
      },
      "description": "Execute a data preparation by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many reports",
      "routing": {
        "request": {
          "url": "/Report/All",
          "method": "GET"
        }
      },
      "description": "Get many available reports"
    },
    {
      "name": "Get Report",
      "value": "get",
      "action": "Get report",
      "routing": {
        "request": {
          "url": "=/Report/{{$parameter[\"reportId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a specific report by ID"
    },
    {
      "name": "Generate Report",
      "value": "generate",
      "action": "Generate report",
      "routing": {
        "request": {
          "url": "=/Report/{{$parameter[\"reportId\"]}}/Generate",
          "method": "POST"
        }
      },
      "description": "Generate a report by ID"
    },
    {
      "name": "Get Chart Data",
      "value": "getChartData",
      "action": "Get chart data",
      "routing": {
        "request": {
          "url": "/Report/ChartData",
          "body": "={{ JSON.parse($parameter.chartDataRequest) }}",
          "method": "POST"
        }
      },
      "description": "Get chart data for reports"
    }
  ]

npm_readme:
  # n8n-nodes-flarelight

  This is an n8n community node that lets you use [Flarelight](https://www.flarelight.io) APIs in your n8n workflows.

  Flarelight is a modern no-code Business Intelligence (BI) platform designed for micro-businesses, professionals, and small teams that enables users to import, prepare, analyze, automate, and report on data in a streamlined, easy-to-use workflow. The platform combines simplicity, automation, and AI-assisted insights, giving smaller organizations access to capabilities traditionally reserved for enterprise BI tools.

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

  1. Go to **Settings > Community Nodes**.
  2. Select **Install**.
  3. Enter `n8n-nodes-flarelight` in **Enter npm package name**.
  4. Agree to the [risks](https://docs.n8n.io/integrations/community-nodes/risks/) of using community nodes: select **I understand 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. n8n displays the node in search results in the **Nodes** panel.

  ## Operations

  The node mirrors the primary resource groups exposed by the Flarelight API so you can:

  - Run automations to orchestrate Flarelight workflows.
  - Manage imports, including creating new imports and retrieving their data.
  - Handle preparation pipelines to transform datasets before downstream use.
  - Generate and retrieve reports, including chart data extraction.

  For the full list of endpoints and payloads, refer to the [Flarelight API specification](https://integration.eu1.flarelight.cloud/swagger/index.html).

  ## Credentials

  Create a Flarelight credential in n8n using the values supplied by your Flarelight workspace:

  - `Subscription ID` (sent as `X-Subscription-Id`)
  - `Integration Key` (sent as `X-Api-Key`)
  - Optional custom API base URL (defaults to `https://integration.eu1.flarelight.cloud`)

  Store credentials in n8n and reference them from every Flarelight node instance.

  ## Compatibility

  Tested against n8n version **1.120.4**.

  ## Usage

  1. Install the community node and configure the Flarelight credential once per n8n instance.
  2. Add the **Flarelight** node to a workflow and pick a resource (`Automation`, `Import`, `Preparation`, or `Report`).
  3. Choose an operation, supply required IDs or payloads, and optionally enable pagination or JSON body inputs where available.
  4. Chain the Flarelight node with other n8n nodes to automate end-to-end BI and reporting workflows.

  Review `n8nNodeDocPortal.md` in this repository for deeper, operation-by-operation guidance.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Flarelight website](https://www.flarelight.io)
  - [Flarelight API documentation](https://docs.flarelight.cloud/docs/integration-api/)

  ## Version history

  | Version | Date       | Notes                    |
  |---------|------------|--------------------------|
  | 1.0.3   | 2025-11-27 | POST Requests fix |
  | 1.0.2   | 2025-11-25 | Fixed gulp file copy which corrupted the icon  |
  | 1.0.1   | 2025-11-25 | Clean up template files  |
  | 1.0.0   | 2025-11-25 | Initial community release |

ai_documentation_summary:
  {"purpose":"The Flarelight node enables n8n users to interact with the Flarelight API, allowing automation of data import, preparation, reporting, and workflow orchestration for small businesses and professionals using a no-code BI platform.","capabilities":["Manage data imports (create and retrieve import data)","Handle preparation pipelines to transform datasets","Generate and retrieve reports including chart data","Orchestrate Flarelight workflows via automations"],"authentication":"API key authentication using X-Api-Key and X-Subscription-Id headers; optional custom API base URL","commonUseCases":["Automating data ingestion and transformation for BI reporting","Creating scheduled reports with chart data extraction","Setting up automated workflows between data sources and dashboards","Integrating Flarelight with other tools in an end-to-end n8n workflow"],"limitations":[],"relatedNodes":["n8n core nodes for data transformation","n8n trigger nodes for scheduling","n8n database or HTTP request nodes for data flow"]}


node_type: n8n-nodes-fluentc.fluentCTranslate
package_name: n8n-nodes-fluentc
display_name: FluentC Translate
description: Translate text or HTML using FluentC AI
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: fluentc
author_github_url: https://github.com/FluentC/
npm_package_name: n8n-nodes-fluentc
npm_version: 1.2.7
community_fetched_at: 2026-01-07T20:08:16.026Z
ai_summary_generated_at: 2026-01-08 10:45:32
npm_readme:
  # FluentC N8N Plugin

  This N8N community plugin provides integration with the FluentC AI Translation API, enabling you to translate text and HTML content and detect languages within your N8N workflows.

  ## Features

  - **Translation**: Support for both real-time and batch translation modes
  - **Language Detection**: Detect the language of input content
  - **Language Retrieval**: Fetch lists of supported and source languages
  - **Dynamic Language Selection**: Dropdown menus populated with your API key's enabled languages
  - **Format Support**: Handle both text and HTML content
  - **Automatic Polling**: Batch jobs are automatically polled until completion
  - **Comprehensive Output**: Returns all metadata including token counts, detected languages, and model information
  - **Error Handling**: Graceful error handling with continue-on-fail support
  - **Language Management**: Direct link to manage enabled languages on your account

  ## Installation

  The installation method depends on your n8n setup. Choose the appropriate method below:

  ### Method 1: n8n GUI Installation (Recommended for self-hosted n8n)

  This is the easiest method for self-hosted n8n instances:

  1. **Open n8n Settings**: In your n8n instance, go to **Settings** > **Community Nodes**
  2. **Install Node**: Click **Install** 
  3. **Enter Package Name**: Enter `n8n-nodes-fluentc` in the "Enter npm package name" field
  4. **Accept Risk**: Check "I understand the risks of installing unverified code from a public source"
  5. **Install**: Click **Install**
  6. **Restart**: The nodes will be available immediately after installation

  ### Method 2: Verified Community Nodes (for n8n Cloud and recent versions)

  If this package gets verified by n8n (future goal):

  1. **Open Nodes Panel**: Go to the Canvas and open the nodes panel (click '+' or press Tab)
  2. **Search**: Search for "FluentC" 
  3. **Install from Community**: Look for the "More from the community" section
  4. **Install**: Click on the FluentC node and select **Install**

  ### Method 3: Manual Installation (for Docker/advanced setups)

  For Docker containers, queue mode, or when GUI installation isn't available:

  #### For Docker Containers:

  1. **Access Docker Shell**: 
     ```bash
     docker exec -it [your-n8n-container-name] sh
     ```

  2. **Create nodes directory** (if it doesn't exist):
     ```bash
     mkdir -p ~/.n8n/nodes
     cd ~/.n8n/nodes
     ```

  3. **Install the package**:
     ```bash
     npm install n8n-nodes-fluentc
     ```

  4. **Restart n8n container**

  #### For npm-based installations:

  1. **Navigate to n8n nodes directory**:
     ```bash
     cd ~/.n8n/nodes
     ```
     (Create the directory if it doesn't exist: `mkdir -p ~/.n8n/nodes`)

  2. **Install the package**:
     ```bash
     npm install n8n-nodes-fluentc
     ```

  3. **Restart n8n**

  ### Method 4: Custom Docker Build

  For permanent installation in a custom Docker image:

  ```dockerfile
  FROM n8nio/n8n:latest
  RUN cd ~/.n8n/ && mkdir -p nodes && cd nodes && npm install n8n-nodes-fluentc
  ```

  ## Verification

  After installation, verify the nodes are available:

  1. Create a new workflow
  2. Click the '+' button to add a node
  3. Search for "FluentC" in the node search
  4. You should see:
     - **FluentC Translate** (with package icon)
     - **FluentC Check Language** (with package icon)
     - **FluentC Languages** (with package icon)

  ## Setup

  ### 1. Create FluentC API Credentials

  1. In N8N, go to **Credentials** > **New**
  2. Search for "FluentC API" and select it
  3. Enter your FluentC API key (obtained from the FluentC sales website)
  4. Test and save the credential

  ### 2. Using the Nodes

  #### FluentC Translate Node

  This node handles text and HTML translation with support for both real-time and batch modes.

  **Parameters:**
  - **Mode**: Choose between "Real-time" (synchronous) or "Batch" (asynchronous)
  - **Input**: Text or HTML content to translate (max 100,000 bytes)
  - **Input Format**: Select "Text" or "HTML"
  - **Target Language**: Dropdown populated with your enabled target languages
  - **Source Language**: Dropdown with your enabled source languages (optional, includes "Auto-detect")
  - **Max Polling Attempts**: (Batch mode only) Maximum polling attempts for batch jobs (default: 30)

  **Language Management:**
  The language dropdowns are dynamically populated based on your API key's enabled languages. If you need additional languages, you'll see a link to visit www.fluentc.io to manage your language access.

  **Output:**
  The node returns all available data including:
  - `translation`: The translated content
  - `token_count`: Number of tokens used
  - `source_language_detected`: Detected source language
  - `model_used`: AI model used for translation
  - `metadata`: Additional metadata
  - `mode`: Translation mode used
  - `input_format`: Input format processed
  - `target_language`: Target language

  #### FluentC Check Language Node

  This node detects the language of input content.

  **Parameters:**
  - **Input**: Text or HTML content to analyze
  - **Input Format**: Select "Text" or "HTML"

  **Output:**
  - `detected_language`: Two-letter language code of detected language
  - `confidence`: Confidence score (0-1) for the detection
  - `input_format`: Input format processed
  - `input_length`: Length of analyzed content

  #### FluentC Languages Node

  This node fetches the lists of supported and source languages from your FluentC account.

  **Parameters:**
  This node has no parameters. It only requires a configured FluentC API credential.

  **Output:**
  - `supported_languages`: An array of objects, each with `code` and `name` of a language available for translation as a target.
  - `source_languages`: An array of objects, each with `code` and `name` of a language available as a source for translation.

  ## Usage Examples

  ### Basic Translation Workflow

  1. Add a **FluentC Translate** node to your workflow
  2. Configure it with:
     - Mode: "Real-time"
     - Input: "Hello, how are you today?"
     - Input Format: "Text"
     - Target Language: Select "Spanish (es)" from dropdown
  3. The output will include the Spanish translation and metadata

  ### Batch Translation for Large Content

  1. Use **FluentC Translate** node with:
     - Mode: "Batch"
     - Input: Your large HTML or text content
     - Target Language: Your desired language code
  2. The node will automatically poll until the translation is complete

  ### Language Detection Before Translation

  1. Add a **FluentC Check Language** node first
  2. Connect it to a **FluentC Translate** node
  3. Use the detected language as the source language parameter

  ### Retrieving Language Lists

  1. Add a **FluentC Languages** node to your workflow.
  2. Execute the node.
  3. The output will contain two arrays: `supported_languages` and `source_languages`, which you can then use in other parts of your workflow.

  ## Troubleshooting

  ### Nodes Not Appearing

  If nodes don't appear after installation:

  1. **Check Installation Method**: Ensure you used the correct method for your setup
  2. **Restart n8n**: Always restart n8n after manual installation
  3. **Check Directory**: For manual installs, verify the package is in `~/.n8n/nodes/`
  4. **Check Permissions**: Ensure n8n has read permissions for the nodes directory
  5. **Check Logs**: Look at n8n logs for any error messages during startup

  ### Permission Issues

  For Docker installations, you might need to ensure proper permissions:

  ```bash
  # Inside the container
  chown -R node:node ~/.n8n/nodes
  ```

  ### Queue Mode

  If you're running n8n in queue mode, you **must** use manual installation (Method 3).

  ## Error Handling

  The plugin includes comprehensive error handling:

  - **Content Size Validation**: Prevents requests exceeding 100,000 bytes
  - **Batch Timeout Protection**: Limits polling attempts to prevent infinite loops  
  - **API Error Handling**: Gracefully handles API errors and rate limits
  - **Continue on Fail**: Option to continue workflow execution even if translation fails

  ## API Rate Limits

  The plugin respects FluentC API rate limits and uses the recommended polling intervals returned by the batch API to avoid overwhelming the service.

  ## Development & Publishing

  This package follows n8n community node standards:

  - ✅ Package name starts with `n8n-nodes-`
  - ✅ Includes `n8n-community-node-package` keyword
  - ✅ No runtime dependencies (only devDependencies)
  - ✅ Proper n8n configuration in package.json
  - ✅ Built TypeScript with proper exports

  ## Support

  For issues related to this N8N plugin, please check:

  1. **FluentC API Documentation**: https://fluentc.ai/docs
  2. **N8N Community**: https://community.n8n.io
  3. **Plugin Repository**: https://github.com/FluentC/n8n-nodes-fluentc
  4. **n8n Community Nodes Documentation**: https://docs.n8n.io/integrations/community-nodes/

  ## License

  MIT License - see LICENSE file for details.

  ---

  **Note**: You need a valid FluentC API key to use this plugin. API keys are obtained through the FluentC sales website.

ai_documentation_summary:
  {"purpose":"The FluentC Translate node enables translation of text or HTML content using FluentC AI, supporting both real-time and batch modes with language detection, dynamic language selection, and comprehensive metadata output.","capabilities":["Translate text and HTML content","Detect source language automatically","Support for real-time and batch translation modes","Dynamic language dropdowns based on enabled languages","Retrieve supported and source languages via dedicated node","Automatic polling for batch jobs with configurable max attempts","Return detailed metadata including token counts, model used, and confidence scores"],"authentication":"API key required via a dedicated FluentC API credential in n8n's Credentials section","commonUseCases":["Translating website content or user-generated text in multilingual workflows","Automating content localization for e-commerce or marketing campaigns","Detecting input language before translation for better accuracy","Managing language access and enabling new languages through the FluentC dashboard"],"limitations":["Input content is limited to 100,000 bytes","Language options are restricted to those enabled in the user's FluentC account","No support for custom models or advanced translation settings beyond those provided by FluentC"],"relatedNodes":["FluentC Check Language","FluentC Languages"]}


node_type: n8n-nodes-gleanclient.gleanClient
package_name: n8n-nodes-gleanclient
display_name: Glean
description: Retrieve results from the Glean index for the given query and filters
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: djuang1
author_github_url: https://github.com/djuang1/
npm_package_name: n8n-nodes-gleanclient
npm_version: 0.2.0
community_fetched_at: 2026-01-07T20:08:16.026Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "searchGlean",
      "options": [
        {
          "name": "Search Glean",
          "value": "searchGlean"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "post",
      "options": [
        {
          "name": "Search Glean",
          "value": "post",
          "action": "Search",
          "routing": {
            "request": {
              "url": "/rest/api/v1/search",
              "body": {
                "query": "={{$parameter[\"query\"]}}",
                "pageSize": 10,
                "trackingToken": "1"
              },
              "method": "POST"
            }
          },
          "description": "Retrieve results from the index for the given query"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "searchGlean"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Search Glean",
      "value": "post",
      "action": "Search",
      "routing": {
        "request": {
          "url": "/rest/api/v1/search",
          "body": {
            "query": "={{$parameter[\"query\"]}}",
            "pageSize": 10,
            "trackingToken": "1"
          },
          "method": "POST"
        }
      },
      "description": "Retrieve results from the index for the given query"
    }
  ]

npm_readme:
  # n8n-nodes-gleanclient

  This is an n8n community node. It lets you use the [Glean Client API](https://developers.glean.com/api/client-api/search/search) in your n8n workflows.

  The Glean Work AI platform lets you embed enterprise search, chat, and agent capabilities into your applications while honoring source‑system permissions by default.

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

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

  ## Installation

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

  ## Operations

  This node allows you to run the search endpoint against your Glean instance.

  ## Credentials

  A Glean account and an API token with the Search scope is required. 

  ## Compatibility

  Tested locally against n8n 1.105.4

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Glean Developers - Client API Reference - Search](https://developers.glean.com/api/client-api/search/search)

  ## Version history

  * August 8, 2025 - 0.1.2 - First.
  * August 8, 2025 - 0.1.3 - Fixed AI Agent tool usage.
  * August 9, 2025 - 0.1.4 - Updated names and added credential test.
  * August 9, 2025 - 0.1.5 - Fixed query body to pass the correct value.

ai_documentation_summary:
  {"purpose":"The Glean node retrieves search results from a Glean instance using a query and filters, enabling enterprise search capabilities within n8n workflows while respecting source-system permissions.","capabilities":["Execute search queries against the Glean index","Apply filters to refine search results","Supports AI-powered search and agent capabilities via the Glean Client API"],"authentication":"API token with the Search scope is required","commonUseCases":["Enterprise search integration in workflow automation","Chat and agent-based query processing","Retrieving structured data from internal knowledge sources"],"limitations":[],"relatedNodes":["n8n-nodes-gleanclient.gleanClient"]}


node_type: @alipeople/n8n-nodes-sendon.sendon
package_name: @alipeople/n8n-nodes-sendon
display_name: Sendon
description: Send SMS using Sendon API
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: alipeople
author_github_url: https://github.com/alipeople/n8n-nodes-sendon.git
npm_package_name: @alipeople/n8n-nodes-sendon
npm_version: 0.1.7
community_fetched_at: 2026-01-07T20:08:16.027Z
ai_summary_generated_at: 2026-01-08 10:45:32
npm_readme:
  # n8n-nodes-sendon

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

  Sendon is a messaging platform that allows you to send SMS, LMS, and MMS messages programmatically via API.

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

  [Installation](#installation)
  [Operations](#operations)
  [Credentials](#credentials)
  [Compatibility](#compatibility)
  [Usage](#usage)
  [Resources](#resources)
  [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 Sendon node supports the following operations:

  - Send SMS, LMS, and MMS messages
    - Automatic message type detection (SMS/LMS) based on content length
    - Optional title auto-generation for LMS/MMS
    - Support for development and production environments
    - Mark message as advertisement

  ## Credentials

  To use this node, you need a Sendon account and API credentials.

  1. Sign up at [Sendon](https://sendon.io/) as a business user. **Note: Only users with a registered business in South Korea are eligible to use Sendon.** After registration, obtain your Sendon ID and API Key.
  2. Charge your credits or points to send messages.
  3. Generate your API Key in your settings.
  4. In n8n, go to **Settings** → **Credentials**.
  5. Add new credentials for "Sendon" and enter:
     - **Sendon ID**: Your Sendon account ID
     - **API Key**: Your Sendon API key

  Authentication uses HTTP Basic Auth with your Sendon ID and API Key.

  ## Compatibility

  - Requires n8n version: 1.0.0 or higher (please adjust if you have a different minimum)
  - Node.js ≥ 20.15
  - No known incompatibilities at this time.

  ## Usage

  ### Parameters

  - **Sender Number** (`from`): The phone number sending the message
  - **Recipient Number** (`to`): The phone number receiving the message
  - **Message** (`message`): The content of your SMS/LMS/MMS
  - **Title** (`title`, optional): Custom title for LMS/MMS (auto-generated from first 20 characters if omitted)
  - **Is Ad** (`isAd`, optional): Mark as advertisement (default: false)
  - **Type** (`type`, optional): `Auto` (default), `SMS`, `LMS`, `MMS`

  ### Message Type Auto-Detection

  - If `Type` is set to `Auto` or left blank:
    - **SMS**: ≤ 90 bytes
    - **LMS**: > 90 bytes
    - **MMS**: Only if selected manually

  ### Example

  **Basic SMS:**

  ```json
  {
    "from": "01012345678",
    "to": "01087654321",
    "message": "Hello from n8n!",
    "isAd": false,
    "type": "auto"
  }
  ```

  **Long Message (LMS):**

  ```json
  {
    "from": "01012345678",
    "to": "01087654321",
    "message": "This is a longer message that will automatically be sent as LMS because it exceeds the SMS character limit...",
    "title": "Custom Title",
    "isAd": false,
    "type": "auto"
  }
  ```

  For more usage help, see the [Try it out](https://docs.n8n.io/try-it-out/) documentation.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Sendon API documentation](https://api.sendon.io/swagger)

  ## Version history

  - v1.0.0: Initial release. Supports sending SMS, LMS, and MMS with auto-detection and credential management.

ai_documentation_summary:
  {"purpose":"The Sendon node enables users to send SMS, LMS, and MMS messages through the Sendon API within n8n workflows, with automatic message type detection based on content length.","capabilities":["Send SMS, LMS, and MMS messages","Automatic message type detection (SMS/LMS based on content length)","Optional title auto-generation for LMS/MMS (from first 20 characters if not provided)","Mark messages as advertisements","Support for both development and production environments","Manual selection of message type (SMS, LMS, MMS)"],"authentication":"HTTP Basic Auth using Sendon ID and API Key","commonUseCases":["Sending automated SMS alerts or notifications","Sending long-form messages (LMS) for marketing or updates","Sending MMS messages with images or rich content","Configuring ad-marked messages for compliance or tracking"],"limitations":["Only available to users with a registered business in South Korea","MMS messages require manual selection of type; auto-detection does not support MMS","Message length limits enforced by Sendon API (SMS: ≤90 bytes)","No support for international numbers or non-Korean regions"],"relatedNodes":["SMS nodes","Messaging nodes","API integration nodes"]}


node_type: @nexrender/n8n-nodes-nexrender.nexrender
package_name: @nexrender/n8n-nodes-nexrender
display_name: Nexrender
description: Interact with Nexrender Cloud API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: inlife
author_github_url: https://github.com/nexrender/nexrender-n8n-node.git
npm_package_name: @nexrender/n8n-nodes-nexrender
npm_version: 0.1.6
community_fetched_at: 2026-01-07T20:08:16.028Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create template",
          "description": "Create a new template"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete template",
          "description": "Delete a template"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get template",
          "description": "Get a template by ID"
        },
        {
          "name": "Get Download URL",
          "value": "getDownloadUrl",
          "action": "Get template download URL",
          "description": "Get a presigned download URL for the template file"
        },
        {
          "name": "Get Upload URL",
          "value": "getUploadUrl",
          "action": "Get template upload URL",
          "description": "Get a fresh upload URL for the template file"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List templates",
          "description": "List templates"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update template",
          "description": "Update a template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create job",
          "description": "Create a new job"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List jobs",
          "description": "List jobs"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get job",
          "description": "Get a job by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "job"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload font",
          "description": "Upload a new font"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List fonts",
          "description": "List fonts"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get font",
          "description": "Get a font by ID"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete font",
          "description": "Delete a font"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "font"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List secrets",
          "description": "List secrets"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create secret",
          "description": "Create or update secret"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete secret",
          "description": "Delete secret"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "secret"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "job",
      "options": [
        {
          "name": "Template",
          "value": "template"
        },
        {
          "name": "Job",
          "value": "job"
        },
        {
          "name": "Font",
          "value": "font"
        },
        {
          "name": "Secret",
          "value": "secret"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create template",
      "description": "Create a new template"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete template",
      "description": "Delete a template"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get template",
      "description": "Get a template by ID"
    },
    {
      "name": "Get Download URL",
      "value": "getDownloadUrl",
      "action": "Get template download URL",
      "description": "Get a presigned download URL for the template file"
    },
    {
      "name": "Get Upload URL",
      "value": "getUploadUrl",
      "action": "Get template upload URL",
      "description": "Get a fresh upload URL for the template file"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List templates",
      "description": "List templates"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update template",
      "description": "Update a template"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create job",
      "description": "Create a new job"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List jobs",
      "description": "List jobs"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get job",
      "description": "Get a job by ID"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload font",
      "description": "Upload a new font"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List fonts",
      "description": "List fonts"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get font",
      "description": "Get a font by ID"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete font",
      "description": "Delete a font"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List secrets",
      "description": "List secrets"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create secret",
      "description": "Create or update secret"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete secret",
      "description": "Delete secret"
    }
  ]

npm_readme:
  ![Banner image](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png)

  # n8n-nodes-nexrender

  This is an n8n community node. It lets you use the Nexrender Cloud API in your n8n workflows to manage templates, render jobs, fonts, and secrets.

  Nexrender is a cloud rendering platform for Adobe After Effects projects, providing API-based control for template upload, job creation, asset injection, and more.

  Note that this node requires an active subscription with [Nexrender Cloud](https://nexrender.com/). Get your trial [today](https://www.nexrender.com/contact)!

  [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 official guide to install community nodes in n8n:

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

  Package name: `@nexrender/n8n-nodes-nexrender`

  ## Operations

  The node exposes the following resources and operations:

  - Template
    - Create: POST /templates — register a template and get upload info
    - List: GET /templates — list templates for your team
    - Get: GET /templates/{id} — get template details
    - Update: PATCH /templates/{id} — update display name
    - Delete: DELETE /templates/{id} — delete a template
    - Get Download URL: GET /templates/{id}/upload — presigned URL to download the raw file
    - Get Upload URL: PUT /templates/{id}/upload — fresh presigned upload URL

  - Job
    - Create: POST /jobs — create a render job with template, assets, settings, upload + webhook
    - List: GET /jobs — supports filters: minimal, from, limit, from_date, to_date, states, exclude_states, sort, tags
    - Get: GET /jobs/{id} — job details, progress, stats, output URL
    - Wait For Job (separate node): polls a job ID until status is finished or error

  - Font
    - Upload: POST /fonts — upload a TTF font (multipart/form-data)
    - List: GET /fonts — list fonts
    - Get: GET /fonts/{id} — get font metadata
    - Delete: DELETE /fonts/{id} — delete a font

  - Secret
    - List: GET /secrets — list secrets (values not returned)
    - Create: PUT /secrets — create/update secret (name + value)
    - Delete: DELETE /secrets/{id} — delete a secret

  ## Credentials

  Credential: “Nexrender API”

  - API Token (required): Bearer token used to authenticate. You can generate a token in the Nexrender app: https://app.nexrender.com/team/settings
  - Base URL (optional): Defaults to `https://api.nexrender.com/api/v2`. Override for on-prem environments.

  ## Compatibility

  - Node.js: >= 20 (per package engines)
  - n8n: built with Nodes API v1

  ## Usage

  1) Add the Nexrender node to your workflow and select a Resource and Operation.

  2) Set up “Nexrender API” credentials with your team API token.

  3) Typical flows:

  - Upload a new template
    - Operation: Template → Create (returns upload info)
    - Use the returned upload info to upload your file (via HTTP Request or custom logic)

  - Render a job
    - Operation: Job → Create
    - Provide the Job body including `template.id`, `assets`, optional `settings`, `webhook` and `upload` configuration
    - Optionally add “Nexrender: Wait For Job” node after Create to block until completion

  - Monitor a job
    - Operation: Job → Get with `jobId`, or use Job → List with filters

  - Manage fonts
    - Operation: Font → Upload (multipart/form-data with TTF)
    - Then reference fonts by file name in your job payload if needed

  ## Resources

  - n8n community nodes docs: https://docs.n8n.io/integrations/#community-nodes
  - Nexrender Cloud product site: https://nexrender.com/
  - Generate an API token: https://app.nexrender.com/team/settings

  ## Version history

  - 0.1.0 — Initial release: Templates, Jobs, Fonts, Secrets operations

ai_documentation_summary:
  {"purpose":"The Nexrender node allows users to interact with the Nexrender Cloud API to manage templates, render jobs, fonts, and secrets within n8n workflows, enabling automation of Adobe After Effects project rendering tasks.","capabilities":["Create, list, get, update, and delete templates","Create, list, get, and delete fonts (via TTF upload)","Create, list, and delete secrets","Create render jobs with templates, assets, settings, and webhooks","Poll job status using a separate 'Wait For Job' node","Retrieve job details and progress","Get upload and download URLs for templates"],"authentication":"API token (Bearer token) required; obtained from Nexrender app settings (https://app.nexrender.com/team/settings). Base URL is optional and defaults to https://api.nexrender.com/api/v2.","commonUseCases":["Automating template uploads and management","Creating and monitoring render jobs for After Effects projects","Injecting assets and custom settings into render jobs","Managing fonts and secrets for consistent rendering","Integrating with webhooks for job completion notifications"],"limitations":[],"relatedNodes":["Nexrender: Wait For Job (separate node for polling job status)"]}


node_type: n8n-nodes-taddy.taddyApi
package_name: n8n-nodes-taddy
display_name: Taddy API
description: Interact with Taddy Podcast API - Search 4M+ podcasts and 180M+ episodes
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: jksr194
author_github_url: https://github.com/Julian194/n8n-taddy.git
npm_package_name: n8n-nodes-taddy
npm_version: 0.1.2
community_fetched_at: 2026-01-07T20:08:16.028Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Episode",
          "value": "episode"
        },
        {
          "name": "Latest Episode",
          "value": "latest"
        },
        {
          "name": "Podcast",
          "value": "podcast"
        },
        {
          "name": "Popular Content",
          "value": "popular"
        },
        {
          "name": "Search",
          "value": "search"
        },
        {
          "name": "Top Chart",
          "value": "topCharts"
        },
        {
          "name": "Transcript",
          "value": "transcript"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "searchContent",
      "options": [
        {
          "name": "Search",
          "value": "searchContent",
          "action": "Search podcasts and episodes",
          "description": "Search across podcasts, episodes, comics, and creators"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getDetails",
      "options": [
        {
          "name": "Get",
          "value": "getDetails",
          "action": "Get a podcast",
          "description": "Get detailed information about a specific podcast"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "podcast"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getDetails",
      "options": [
        {
          "name": "Get",
          "value": "getDetails",
          "action": "Get an episode",
          "description": "Get detailed information about a specific episode"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "episode"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPopular",
      "options": [
        {
          "name": "Get",
          "value": "getPopular",
          "action": "Get popular podcasts",
          "description": "Get popular/trending podcasts"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "popular"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLatest",
      "options": [
        {
          "name": "Get",
          "value": "getLatest",
          "action": "Get latest episodes",
          "description": "Get latest episodes from multiple podcasts"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "latest"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTranscript",
      "options": [
        {
          "name": "Get",
          "value": "getTranscript",
          "action": "Get a transcript",
          "description": "Get transcript for a specific episode"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transcript"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getByCountry",
      "options": [
        {
          "name": "Get by Country",
          "value": "getByCountry",
          "action": "Get top charts by country",
          "description": "Get Apple Podcasts top charts by country"
        },
        {
          "name": "Get by Genre",
          "value": "getByGenres",
          "action": "Get top charts by genre",
          "description": "Get Apple Podcasts top charts by genre"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "topCharts"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Search",
      "value": "searchContent",
      "action": "Search podcasts and episodes",
      "description": "Search across podcasts, episodes, comics, and creators"
    },
    {
      "name": "Get",
      "value": "getDetails",
      "action": "Get a podcast",
      "description": "Get detailed information about a specific podcast"
    },
    {
      "name": "Get",
      "value": "getDetails",
      "action": "Get an episode",
      "description": "Get detailed information about a specific episode"
    },
    {
      "name": "Get",
      "value": "getPopular",
      "action": "Get popular podcasts",
      "description": "Get popular/trending podcasts"
    },
    {
      "name": "Get",
      "value": "getLatest",
      "action": "Get latest episodes",
      "description": "Get latest episodes from multiple podcasts"
    },
    {
      "name": "Get",
      "value": "getTranscript",
      "action": "Get a transcript",
      "description": "Get transcript for a specific episode"
    },
    {
      "name": "Get by Country",
      "value": "getByCountry",
      "action": "Get top charts by country",
      "description": "Get Apple Podcasts top charts by country"
    },
    {
      "name": "Get by Genre",
      "value": "getByGenres",
      "action": "Get top charts by genre",
      "description": "Get Apple Podcasts top charts by genre"
    }
  ]

npm_readme:
  # n8n-nodes-taddy

  This is an n8n community node. It lets you use the Taddy Podcast API in your n8n workflows.

  Taddy provides access to over 4 million podcasts and 180+ million episodes through a comprehensive GraphQL API. Search for podcast content, get detailed podcast and episode information, discover popular content, find latest episodes, and access transcripts.

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

  Community package name: `n8n-nodes-taddy`

  ## Operations

  ### Search Content
  - **Full-text search** across podcasts and episodes with advanced filtering
  - **Field selection** - Choose which data fields to include in results
  - **Content type filtering** - Search podcasts, episodes, or both
  - **Advanced filters** - Language, country, genre, date ranges, duration, and more
  - **Exclude terms** - Exclude specific terms from search results
  - **Sorting options** - Sort by popularity or exactness
  - **Match types** - Exact phrase, all terms, or most terms matching

  ### Podcast Details
  - Get detailed podcast information by UUID, name, iTunes ID, or RSS URL
  - Includes episode list, metadata, genres, and statistics

  ### Episode Details
  - Get detailed episode information by UUID, GUID, or name
  - Includes podcast series information, transcript data, and chapters

  ### Popular Content
  - Discover trending podcasts with optional language and genre filtering
  - Pagination support for browsing popular content

  ### Latest Episodes
  - Get recent episodes from specific podcasts or RSS feeds
  - Filter by podcast UUIDs or RSS URLs with pagination

  ### Transcript
  - Retrieve episode transcripts in multiple formats (text, SRT, VTT, JSON)
  - Support for on-demand transcript generation

  ### Top Charts
  - Get Apple Podcasts top charts by country with filtering options
  - Get top charts by genre with optional country filtering
  - Support for both podcast series and episode content types

  ## Credentials

  To use this node, you need to authenticate with the Taddy API:

  ### Prerequisites
  1. Sign up for a Taddy API account at [taddy.org](https://taddy.org)
  2. Obtain your API credentials from the Taddy dashboard

  ### Setting up credentials in n8n
  1. In n8n, go to **Settings** > **Credentials**
  2. Click **Create New** and search for "Taddy API"
  3. Enter your credentials:
     - **X-USER-ID**: Your Taddy user identifier
     - **X-API-KEY**: Your Taddy API key
  4. Test the connection and save

  ### Authentication Method
  The node uses header-based authentication, automatically adding the required `X-USER-ID` and `X-API-KEY` headers to all API requests.

  ## Compatibility

  - **Minimum n8n version**: 0.174.0
  - **Tested with**: n8n 0.174.0 - 1.0.0+
  - **Node.js version**: 16+ (matches n8n requirements)

  This node follows n8n community node standards and should be compatible with all modern n8n versions.

  ## Usage

  ### Basic Search Example
  1. Add the Taddy API node to your workflow
  2. Select **Search Content** operation
  3. Enter a search term (e.g., "technology podcasts")
  4. Configure optional filters like language or date range
  5. Choose which fields to include in the response
  6. Execute to get search results with metadata

  ### Working with Results
  - **Search results** include pagination metadata as the first item for easy access to `totalCount` and `pagesCount`
  - **Episode results** automatically include podcast series information (name, UUID) by default
  - **Field selection** is content-type aware - episode-only fields are filtered out for podcast searches

  ### Advanced Features
  - **Exclude terms**: Use the dedicated "Exclude Terms" field to filter out unwanted content
  - **Response fields**: Select only the data fields you need to optimize response size
  - **Pagination**: Use the metadata from search results to implement pagination workflows
  - **Date filtering**: Supports precise date ranges with automatic epoch timestamp conversion

  ### Common Workflows
  - **Content Discovery**: Search → Filter → Extract podcast information for subscriptions
  - **Content Analysis**: Search with transcripts → Get transcript → Analyze content
  - **Monitoring**: Search for specific topics → Check for new episodes → Send notifications
  - **Trend Analysis**: Get top charts by country/genre → Track popular podcast trends

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Taddy API Documentation](https://taddy.org) - Official API documentation and guides
  * [GraphQL API Reference](https://taddy.org/developers/graphql) - Complete API schema and examples
  * [Node Testing Guide](./docs/testing-guide.md) - Comprehensive testing procedures for this node

  ## Version History


  ### 0.1.2 (2025-07-29)
  - Repository Url fixed

  ### 0.1.1 (2025-07-29)
  - n8n guidelines checklist
  ### 0.1.0 (Initial Release)
  - Full Taddy API integration with 7 resource types
  - Advanced search with field selection and filtering
  - Podcast and episode detail operations
  - Popular content discovery
  - Latest episodes retrieval
  - Transcript access with multiple formats
  - Top charts by country and genre
  - Comprehensive error handling and validation
  - Production-ready with extensive testing coverage

ai_documentation_summary:
  {"purpose":"The Taddy API node enables n8n users to interact with the Taddy Podcast API, allowing them to search for podcasts and episodes, retrieve detailed metadata, access transcripts, and discover trending or latest content across 4M+ podcasts and 180M+ episodes using GraphQL.","capabilities":["Full-text search with advanced filtering (language, country, genre, date ranges, duration)","Field selection to customize response data by content type","Search by content type (podcasts, episodes, or both)","Exclude specific terms from search results","Sort results by popularity or exactness","Match types: exact phrase, all terms, or most terms","Retrieve podcast details by UUID, name, iTunes ID, or RSS URL","Retrieve episode details by UUID, GUID, or name with transcript and chapter data","Discover popular trending podcasts with optional filters","Get latest episodes from specific podcasts or RSS feeds with pagination"],"authentication":"API key authentication via header-based credentials: requires X-USER-ID and X-API-KEY, which are set in n8n credentials under 'Taddy API'","commonUseCases":["Content discovery and subscription setup","Content analysis using episode transcripts","Monitoring for new episodes on specific topics","Trend analysis of popular podcasts by country or genre","Automated podcast curation and filtering workflows"],"limitations":[],"relatedNodes":["n8n-nodes-base","n8n-nodes-webhook","n8n-nodes-database"]}


node_type: @decodo/n8n-nodes-decodo.decodo
package_name: @decodo/n8n-nodes-decodo
display_name: Decodo
description: Decodo's Web Scraping API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: decodo
author_github_url: https://github.com/Decodo/n8n-nodes-decodo.git
npm_package_name: @decodo/n8n-nodes-decodo
npm_version: 1.9.1
community_fetched_at: 2026-01-07T20:08:16.029Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "universal",
      "options": [
        {
          "name": "Universal",
          "value": "universal",
          "action": "Scrape using Universal target"
        },
        {
          "name": "Google Search",
          "value": "google_search",
          "action": "Scrape using Google Search target"
        },
        {
          "name": "Amazon",
          "value": "amazon",
          "action": "Scrape using Amazon target"
        },
        {
          "name": "YouTube Transcript",
          "value": "youtube_transcript",
          "action": "Scrape using YouTube Transcript target"
        },
        {
          "name": "Reddit Subreddit",
          "value": "reddit_subreddit",
          "action": "Scrape using Reddit Subreddit target"
        }
      ],
      "required": true,
      "description": "Decodo Scraper API supported target",
      "displayName": "Target",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Universal",
      "value": "universal",
      "action": "Scrape using Universal target"
    },
    {
      "name": "Google Search",
      "value": "google_search",
      "action": "Scrape using Google Search target"
    },
    {
      "name": "Amazon",
      "value": "amazon",
      "action": "Scrape using Amazon target"
    },
    {
      "name": "YouTube Transcript",
      "value": "youtube_transcript",
      "action": "Scrape using YouTube Transcript target"
    },
    {
      "name": "Reddit Subreddit",
      "value": "reddit_subreddit",
      "action": "Scrape using Reddit Subreddit target"
    }
  ]

npm_readme:
  # Decodo n8n Node

  This repository provides an n8n integration for **Decodo's Web Scraping API**, a powerful web scraping tool that automatically bypasses blocks and bot protection to extract data from any target URL. It's designed for developers and startups looking to automate data collection workflows from platforms like Google, eCommerce sites, and job boards.

  [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform that lets you connect apps, APIs, and services to build automated workflows with minimal effort.

  ## Features

  - **Easy integration**. Plug the Decodo's n8n node into existing workflows to start scraping with minimal setup.
  - **Bypassing CAPTCHAs, rate-limits, and IP bans**. Automatic handling of common anti-bot defenses.
  - **Geo-targeting**. Request region-specific results from websites that restrict content based on location.
  - **Rotating proxy support to avoid IP bans**. Built-in proxy rotation to keep requests distributed and persistent.
  - **Structured data output**. Get results in JSON or Markdown formats for easy readability and further analysis.

  ## Installation

  Decodo is an official node integrated into n8n. To use it, simply:

  1. Open the nodes panel.

  <img src="docs/n8n-node-tab.png" width="500px">

  2. Search for "Decodo" to find the node.

  <img src="docs/n8n-decodo-search.png" width="500px">

  3. Click **+ Add to workflow**.

  <img src="docs/n8n-decodo-add-to-workflow.png" width="500px">

  ### Obtaining a Decodo account

  The node requires a [Decodo Web Scraping API](https://decodo.com/scraping) Advanced plan. You can get started with a free trial on the [dashboard](https://dashboard.decodo.com/).

  Once you have a plan activated, take a note of your generated authentication token from the [Web Scraping API page](https://dashboard.decodo.com/web-scraping-api/scraper):

  <img src="docs/decodo_dashboard_auth.png" width="500px">

  ### Setting up credentials on n8n

  1. Open the credentials window on n8n.

  <img src="docs/creds_01.png" width="500px">

  2. Create a new credential.

  <img src="docs/creds_02.png" width="500px">

  3. Find the _Decodo Credentials API_.

  <img src="docs/creds_03.png" width="500px">

  4. Enter your authentication token.

  <img src="docs/n8n_auth.png" width="500px">

  ## Using the node

  The node can be used in 2 ways - as an individual HTTP request node, or a tool for an AI agent.

  ### Individual node

  To use the Decodo node by itself, connect it to an existing workflow. Once you add it, you can set the target **URL** and **Geolocation**.

  <img src="docs/n8n-decodo-node-config.png" width="500px">

  The node requests the target URL through a proxy in the chosen location, scrapes the page, and returns the response for use by downstream nodes such as the **HTML** node to extract content. Below is an example setup:

  <img src="docs/n8n-decodo-workflow.png" width="500px">

  ### AI agent tool

  You can connect the Decodo node to the AI Agent node as a tool. You don't need to modify anything inside the node. Here's what a simple setup would look like:

  <img src="docs/n8n_setup.png" width="500px">

  With this setup, you can prompt the agent to scrape a website in order to extract information. The prompt must be detailed and specific to return the best results.

  **Bad prompt example**

  If your AI model does not have access to the most recent web information, the following question may fail:

  ```
  Who won the NBA in 2025?
  ```

  **Good prompt example**

  The question is more likely to be answered by updating the prompt with an instruction to scrape a reliable source:

  ```
  Scrape Wikipedia and tell me who won the NBA in 2025.
  ```

  ## Parameters

  When used as an AI tool, most parameters can be inferred automatically from messages, for example:

  | Parameter  | Description                                    | Example message                                                         |
  | ---------- | ---------------------------------------------- | ----------------------------------------------------------------------- |
  | `url`      | The target URL to scrape                       | Scrape Wikipedia and tell me the article of the day.                    |
  | `headless` | Render JS when scraping                        | Scrape https://ip.decodo.com/json with JS rendering.                    |
  | `geo`      | The country name from which to scrape          | Scrape https://ip.decodo.com/json with United States geolocation.       |
  | `markdown` | Receive Markdown type responce instead of HTML | Scrape https://ip.decodo.com/json and return result in markdown format. |

  If used as an individual node, all parameters can be manually configured by double-clicking on the node.

  ## Development & releases

  ### Contribution

  To contribute to this node:

  1. Install n8n globally in your development machine.

  ```
  npm install n8n -g
  ```

  2. Pull this repository.

  ```
  git clone https://github.com/Decodo/n8n-nodes-decodo.git

  ```

  3. Navigate to the downloaded folder and build it.

  ```
  cd n8n-nodes-decodo
  npm install
  npm run build
  ```

  4. Inside the project folder, run `npm link` after building to make your local build of `@decodo/n8n-nodes-decodo` available in the local npm registry.
  5. Inside `~/.n8n/custom`, run `npm link @decodo/n8n-nodes-decodo`.

  See this [documentation page](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally) for more information.

  ### Automated releases

  This project uses automated releases via GitHub Actions and semantic-release. When code is merged into the `main` branch, the following happens automatically:

  1. **Semantic analysis**. Commit messages are analyzed to determine the type of release (patch, minor, major).
  2. **Version bump**. The version in `package.json` is automatically updated.
  3. **NPM publish**. The package is built and published to npm as `@decodo/n8n-nodes-decodo`.
  4. **GitHub release**. A GitHub release is created with automatically generated release notes.
  5. **Git tag**. A git tag is created for the new version.

  ### Required secrets

  For automated releases to work, the following GitHub repository secrets must be configured:

  - `NPM_TOKEN`. An npm access token with publish permissions for the `@decodo` organization.
  - `GITHUB_TOKEN`. Automatically provided by GitHub Actions (no setup required).

  ### Commit message format

  To trigger releases, use conventional commit messages:

  - `feat: new feature` → Minor version bump
  - `fix: bug fix` → Patch version bump
  - `feat!: breaking change` or `BREAKING CHANGE:` in footer → Major version bump
  - `docs:`, `style:`, `refactor:`, `test:`, `chore:` → No release

  ## Compatibility

  The Decodo node has been developed and tested with:

  - Node.js v22.17.0
  - n8n nodes API version 1
  - [n8n-workflow](https://www.npmjs.com/package/n8n-workflow) v1.82.0

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Decodo's Web Scraping API documentation](https://help.decodo.com/docs/web-scraping-api-introduction)

  ## Further reading

  - [Complete guide for building n8n web scraping automations](https://decodo.com/blog/n8n-web-scraping-automation)

ai_documentation_summary:
  {"purpose":"The Decodo n8n node enables automated web scraping by integrating with Decodo's Web Scraping API, allowing users to extract data from any URL while bypassing CAPTCHAs, rate limits, and IP bans with support for geo-targeting and rotating proxies.","capabilities":["Scrapes any target URL with automatic bypass of anti-bot defenses","Supports geo-targeted scraping to access region-specific content","Uses rotating proxies to avoid IP bans","Returns structured data in JSON or Markdown format","Can be used as an individual HTTP request node or as a tool in AI agent workflows","Supports JavaScript rendering (headless mode) when scraping dynamic content"],"authentication":"API token required from Decodo's Web Scraping API dashboard (Advanced plan required)","commonUseCases":["Extracting product data from eCommerce websites","Collecting job listings from job boards","Gathering news or article content from websites","Automating data collection from Google or other dynamic platforms","Feeding scraped data into AI agents for real-time information retrieval"],"limitations":["Requires a Decodo Advanced plan (free trial available)","AI agent prompts must be specific and include source instructions to ensure success","Performance may depend on target website complexity and anti-bot measures","No support for custom headers or advanced scraping rules beyond configured parameters"],"relatedNodes":["HTML Node","AI Agent Node","HTTP Request Node"]}


node_type: n8n-nodes-browseract.browserAct
package_name: n8n-nodes-browseract
display_name: BrowserAct
description: browserAct description
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: xing-lin
author_github_url: https://github.com/browseract-ai/
npm_package_name: n8n-nodes-browseract
npm_version: 1.2.1
community_fetched_at: 2026-01-07T20:08:16.029Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "workflow",
      "options": [
        {
          "name": "Workflow",
          "value": "workflow"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runWorkflow",
      "options": [
        {
          "name": "Run a Workflow",
          "value": "runWorkflow",
          "action": "Run a workflow"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workflow"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Run a Workflow",
      "value": "runWorkflow",
      "action": "Run a workflow"
    }
  ]

npm_readme:
  # n8n Nodes - BrowserAct Integration

  This is an n8n community node that integrates [BrowserAct](https://www.browseract.com/) with your n8n workflows.

  [BrowserAct](https://www.browseract.com/) is a platform for anyone to launch AI-powered crawling tasks with one click to automate web crawling, data extraction, and content generation—without coding. while [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation tool that allows you to connect various services.

  ## Table of Contents

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

  ## Installation

  To install this community node, please follow the official [n8n community node installation guide](https://docs.n8n.io/integrations/community-nodes/installation/).

  ## Operations

  This node supports a wide range of BrowserAct operations, including:

  - **Run Agent**
    - Start the specified Agent crawler task to obtain the crawled web page data or structured results.
  - **Run Workflow**
    - Execute the specified BrowserAct Workflow, supporting multi-step task orchestration and data processing.

  ## Credentials

  To use a BrowserAct node, you need to complete the following steps:

  1. Create a free account at [BrowserAct.com](https://browseract.com/).

  2. Log in to BrowserAct and visit the "Integrations" page to create your API key.

  3. In n8n, add your `BrowserActApi` to the node's Credentials configuration.

  ⚠️ **Note:** The API key is sensitive information. Please keep it secure and never share it publicly.

  ## Resources

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [BrowserAct API Documentation](http://www.browseract.com/docs-api)

ai_documentation_summary:
  {"purpose":"The BrowserAct node enables n8n users to automate web crawling, data extraction, and content generation by integrating with the BrowserAct platform, allowing them to run AI-powered agent tasks or workflows without coding.","capabilities":["Run Agent: Start a specified agent crawler task to retrieve web page data or structured results","Run Workflow: Execute a predefined BrowserAct workflow for multi-step task orchestration and data processing"],"authentication":"API key required","commonUseCases":["Automating web data collection from websites","Extracting structured content using AI-powered crawlers","Orchestrating multi-step data processing workflows"],"limitations":[],"relatedNodes":["n8n-nodes-base.webhook","n8n-nodes-base.httpRequest"]}


node_type: n8n-nodes-dart.dart
package_name: n8n-nodes-dart
display_name: Dart
description: Dart streamlines project management so your team can get back to work that matters.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: dart-software
author_github_url: https://github.com/its-dart/
npm_package_name: n8n-nodes-dart
npm_version: 0.2.2
community_fetched_at: 2026-01-07T20:08:16.030Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "Attachment",
      "options": [
        {
          "name": "Attachment",
          "value": "Attachment"
        },
        {
          "name": "Comment",
          "value": "Comment"
        },
        {
          "name": "Config",
          "value": "Config"
        },
        {
          "name": "Dartboard",
          "value": "Dartboard"
        },
        {
          "name": "Doc",
          "value": "Doc"
        },
        {
          "name": "Folder",
          "value": "Folder"
        },
        {
          "name": "Help Center Article",
          "value": "Help Center Article"
        },
        {
          "name": "Skill",
          "value": "Skill"
        },
        {
          "name": "Task",
          "value": "Task"
        },
        {
          "name": "View",
          "value": "View"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Add Task Comment",
      "options": [
        {
          "name": "Add Task Comment",
          "value": "Add Task Comment",
          "action": "Create a new comment",
          "routing": {
            "request": {
              "url": "=/comments",
              "method": "POST"
            }
          },
          "description": "Record a new comment that the user intends to add to a given task. This will save the comment in Dart for later access, search, etc."
        },
        {
          "name": "List Comments",
          "value": "List Comments",
          "action": "List comments",
          "routing": {
            "request": {
              "url": "=/comments/list",
              "method": "GET"
            }
          },
          "description": "List comments for a task with filtering options. Filter by author, text content, or date range. Sort by date or hierarchical thread order. Task ID required. Supports pagination."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Comment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get Config",
      "options": [
        {
          "name": "Get Config",
          "value": "Get Config",
          "action": "Get user space configuration",
          "routing": {
            "request": {
              "url": "=/config",
              "method": "GET"
            }
          },
          "description": "Get information about the user's space, including all of the possible values that can be provided to other endpoints"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Config"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get Dartboard",
      "options": [
        {
          "name": "Get Dartboard",
          "value": "Get Dartboard",
          "action": "Retrieve an existing dartboard",
          "routing": {
            "request": {
              "url": "=/dartboards/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing dartboard. This will return the dartboard's information, including the title and description."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Dartboard"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Create Doc",
      "options": [
        {
          "name": "Create Doc",
          "value": "Create Doc",
          "action": "Create a new doc",
          "routing": {
            "request": {
              "url": "=/docs",
              "method": "POST"
            }
          },
          "description": "Record a new doc that the user intends to write down. This will save the doc in Dart for later access, search, etc. By default the created doc will be in the Docs folder. More information can be included in the text."
        },
        {
          "name": "Delete Doc",
          "value": "Delete Doc",
          "action": "Delete an existing doc",
          "routing": {
            "request": {
              "url": "=/docs/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Move an existing doc to the trash, where it can be recovered if needed. Nothing else about the doc will be changed."
        },
        {
          "name": "Get Doc",
          "value": "Get Doc",
          "action": "Retrieve an existing doc",
          "routing": {
            "request": {
              "url": "=/docs/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing doc. This will return the doc's information, including the title, folder, text and others."
        },
        {
          "name": "List Docs",
          "value": "List Docs",
          "action": "List docs",
          "routing": {
            "request": {
              "url": "=/docs/list",
              "method": "GET"
            }
          },
          "description": "List docs with filtering and search capabilities. Filter by folder, title, text content, or use full-text search. Sort by creation/update date or title. Supports pagination."
        },
        {
          "name": "Update Doc",
          "value": "Update Doc",
          "action": "Update an existing doc",
          "routing": {
            "request": {
              "url": "=/docs/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update certain properties of an existing doc. This will save the doc in Dart for later access, search, etc. Any properties that are not specified will not be changed."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Doc"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get Folder",
      "options": [
        {
          "name": "Get Folder",
          "value": "Get Folder",
          "action": "Retrieve an existing folder",
          "routing": {
            "request": {
              "url": "=/folders/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing folder. This will return the folder's information, including the title, description, all docs within it, and others."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Folder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "List Help Center Articles",
      "options": [
        {
          "name": "List Help Center Articles",
          "value": "List Help Center Articles",
          "action": "List help center articles by query",
          "routing": {
            "request": {
              "url": "=/help-center-articles/list",
              "method": "GET"
            }
          },
          "description": "Search for up to two help center articles by their semantic similarity to a short (1-5 word) query"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Help Center Article"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Retrieve Skill By Title",
      "options": [
        {
          "name": "Retrieve Skill By Title",
          "value": "Retrieve Skill By Title",
          "action": "Retrieve a skill by title",
          "routing": {
            "request": {
              "url": "=/skills/by-title",
              "method": "GET"
            }
          },
          "description": "Retrieve a skill by its title. Skills are user-defined instructions or templates for performing specific task types in the workspace. Returns the skill's title and instructions if found."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Skill"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Create Task",
      "options": [
        {
          "name": "Create Task",
          "value": "Create Task",
          "action": "Create a new task",
          "routing": {
            "request": {
              "url": "=/tasks",
              "method": "POST"
            }
          },
          "description": "Record a new task that the user intends to do. By default the task will be assigned to the current user, have an unstarted status, have no parent, and be in the default dartboard. More information can be included in the description."
        },
        {
          "name": "Delete Task",
          "value": "Delete Task",
          "action": "Delete an existing task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Move an existing task to the trash, where it can be recovered if needed. Nothing else about the task will be changed."
        },
        {
          "name": "Get Task",
          "value": "Get Task",
          "action": "Retrieve an existing task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing task. This will return the task's information, including the title, dartboard, status, description and others."
        },
        {
          "name": "List Tasks",
          "value": "List Tasks",
          "action": "List tasks",
          "routing": {
            "request": {
              "url": "=/tasks/list",
              "method": "GET"
            }
          },
          "description": "List tasks with powerful filtering options. Filter by dartboard, status, assignee, tags, priority, dates, completion state, view, and more. Supports pagination with limit/offset."
        },
        {
          "name": "Update Task",
          "value": "Update Task",
          "action": "Update an existing task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update certain properties of an existing task. This will save the task in Dart for later access, search, etc. Any properties that are not specified will not be changed."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Add Task Attachment From Url",
      "options": [
        {
          "name": "Add Task Attachment From Url",
          "value": "Add Task Attachment From Url",
          "action": "Attach a file from a provided URL to a task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter[\"id\"]}}/attachments/from-url",
              "method": "POST"
            }
          },
          "description": "Attach a file from a provided URL to a task. The file will be downloaded and attached asynchronously. This operation may take a few moments to complete."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Attachment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get View",
      "options": [
        {
          "name": "Get View",
          "value": "Get View",
          "action": "Retrieve an existing view",
          "routing": {
            "request": {
              "url": "=/views/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing view. This will return the view's information, including the title, description, and others."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "View"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /comments",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Comment"
          ],
          "operation": [
            "Add Task Comment"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /comments/list",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Comment"
          ],
          "operation": [
            "List Comments"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /config",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Config"
          ],
          "operation": [
            "Get Config"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /dartboards/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Dartboard"
          ],
          "operation": [
            "Get Dartboard"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /docs",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Doc"
          ],
          "operation": [
            "Create Doc"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /docs/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Doc"
          ],
          "operation": [
            "Get Doc"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "PUT /docs/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Doc"
          ],
          "operation": [
            "Update Doc"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "DELETE /docs/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Doc"
          ],
          "operation": [
            "Delete Doc"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /docs/list",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Doc"
          ],
          "operation": [
            "List Docs"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /folders/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Folder"
          ],
          "operation": [
            "Get Folder"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /help-center-articles/list",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Help Center Article"
          ],
          "operation": [
            "List Help Center Articles"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /skills/by-title",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Skill"
          ],
          "operation": [
            "Retrieve Skill By Title"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /tasks",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ],
          "operation": [
            "Create Task"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /tasks/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ],
          "operation": [
            "Get Task"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "PUT /tasks/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ],
          "operation": [
            "Update Task"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "DELETE /tasks/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ],
          "operation": [
            "Delete Task"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /tasks/{ID}/attachments/from-url",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Attachment"
          ],
          "operation": [
            "Add Task Attachment From Url"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /tasks/list",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ],
          "operation": [
            "List Tasks"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /views/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "View"
          ],
          "operation": [
            "Get View"
          ]
        }
      }
    }
  ]

operations:
  [
    {
      "name": "Add Task Comment",
      "value": "Add Task Comment",
      "action": "Create a new comment",
      "routing": {
        "request": {
          "url": "=/comments",
          "method": "POST"
        }
      },
      "description": "Record a new comment that the user intends to add to a given task. This will save the comment in Dart for later access, search, etc."
    },
    {
      "name": "List Comments",
      "value": "List Comments",
      "action": "List comments",
      "routing": {
        "request": {
          "url": "=/comments/list",
          "method": "GET"
        }
      },
      "description": "List comments for a task with filtering options. Filter by author, text content, or date range. Sort by date or hierarchical thread order. Task ID required. Supports pagination."
    },
    {
      "name": "Get Config",
      "value": "Get Config",
      "action": "Get user space configuration",
      "routing": {
        "request": {
          "url": "=/config",
          "method": "GET"
        }
      },
      "description": "Get information about the user's space, including all of the possible values that can be provided to other endpoints"
    },
    {
      "name": "Get Dartboard",
      "value": "Get Dartboard",
      "action": "Retrieve an existing dartboard",
      "routing": {
        "request": {
          "url": "=/dartboards/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing dartboard. This will return the dartboard's information, including the title and description."
    },
    {
      "name": "Create Doc",
      "value": "Create Doc",
      "action": "Create a new doc",
      "routing": {
        "request": {
          "url": "=/docs",
          "method": "POST"
        }
      },
      "description": "Record a new doc that the user intends to write down. This will save the doc in Dart for later access, search, etc. By default the created doc will be in the Docs folder. More information can be included in the text."
    },
    {
      "name": "Delete Doc",
      "value": "Delete Doc",
      "action": "Delete an existing doc",
      "routing": {
        "request": {
          "url": "=/docs/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Move an existing doc to the trash, where it can be recovered if needed. Nothing else about the doc will be changed."
    },
    {
      "name": "Get Doc",
      "value": "Get Doc",
      "action": "Retrieve an existing doc",
      "routing": {
        "request": {
          "url": "=/docs/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing doc. This will return the doc's information, including the title, folder, text and others."
    },
    {
      "name": "List Docs",
      "value": "List Docs",
      "action": "List docs",
      "routing": {
        "request": {
          "url": "=/docs/list",
          "method": "GET"
        }
      },
      "description": "List docs with filtering and search capabilities. Filter by folder, title, text content, or use full-text search. Sort by creation/update date or title. Supports pagination."
    },
    {
      "name": "Update Doc",
      "value": "Update Doc",
      "action": "Update an existing doc",
      "routing": {
        "request": {
          "url": "=/docs/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update certain properties of an existing doc. This will save the doc in Dart for later access, search, etc. Any properties that are not specified will not be changed."
    },
    {
      "name": "Get Folder",
      "value": "Get Folder",
      "action": "Retrieve an existing folder",
      "routing": {
        "request": {
          "url": "=/folders/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing folder. This will return the folder's information, including the title, description, all docs within it, and others."
    },
    {
      "name": "List Help Center Articles",
      "value": "List Help Center Articles",
      "action": "List help center articles by query",
      "routing": {
        "request": {
          "url": "=/help-center-articles/list",
          "method": "GET"
        }
      },
      "description": "Search for up to two help center articles by their semantic similarity to a short (1-5 word) query"
    },
    {
      "name": "Retrieve Skill By Title",
      "value": "Retrieve Skill By Title",
      "action": "Retrieve a skill by title",
      "routing": {
        "request": {
          "url": "=/skills/by-title",
          "method": "GET"
        }
      },
      "description": "Retrieve a skill by its title. Skills are user-defined instructions or templates for performing specific task types in the workspace. Returns the skill's title and instructions if found."
    },
    {
      "name": "Create Task",
      "value": "Create Task",
      "action": "Create a new task",
      "routing": {
        "request": {
          "url": "=/tasks",
          "method": "POST"
        }
      },
      "description": "Record a new task that the user intends to do. By default the task will be assigned to the current user, have an unstarted status, have no parent, and be in the default dartboard. More information can be included in the description."
    },
    {
      "name": "Delete Task",
      "value": "Delete Task",
      "action": "Delete an existing task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Move an existing task to the trash, where it can be recovered if needed. Nothing else about the task will be changed."
    },
    {
      "name": "Get Task",
      "value": "Get Task",
      "action": "Retrieve an existing task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing task. This will return the task's information, including the title, dartboard, status, description and others."
    },
    {
      "name": "List Tasks",
      "value": "List Tasks",
      "action": "List tasks",
      "routing": {
        "request": {
          "url": "=/tasks/list",
          "method": "GET"
        }
      },
      "description": "List tasks with powerful filtering options. Filter by dartboard, status, assignee, tags, priority, dates, completion state, view, and more. Supports pagination with limit/offset."
    },
    {
      "name": "Update Task",
      "value": "Update Task",
      "action": "Update an existing task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update certain properties of an existing task. This will save the task in Dart for later access, search, etc. Any properties that are not specified will not be changed."
    },
    {
      "name": "Add Task Attachment From Url",
      "value": "Add Task Attachment From Url",
      "action": "Attach a file from a provided URL to a task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter[\"id\"]}}/attachments/from-url",
          "method": "POST"
        }
      },
      "description": "Attach a file from a provided URL to a task. The file will be downloaded and attached asynchronously. This operation may take a few moments to complete."
    },
    {
      "name": "Get View",
      "value": "Get View",
      "action": "Retrieve an existing view",
      "routing": {
        "request": {
          "url": "=/views/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing view. This will return the view's information, including the title, description, and others."
    }
  ]

npm_readme:
  <div align="center">
    <h1>Dart n8n Node</h1>
    <p>
      <a href="https://www.npmjs.com/package/n8n-nodes-dart"><img src="https://img.shields.io/npm/v/n8n-nodes-dart" alt="NPM"></a>
      <a href="LICENSE"><img src="https://img.shields.io/github/license/its-dart/n8n-nodes-dart" alt="License"></a>
    </p>
  </div>

  [Dart](https://dartai.com?nr=1) is Project Management powered by AI.

  `n8n-nodes-dart` is the Dart n8n community node. It enables direct integration with Dart through n8n workflows.

  - [Installation](#installation)
  - [Credentials](#credentials)
  - [Resources](#resources)

  ## Installation

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

  ## Credentials

  This node uses bearer token authentication with the Dart API. You'll need to:

  1. Sign up for a [Dart account](https://app.dartai.com)
  2. Get your API token from [your Dart profile](https://app.dartai.com/home?settings=account)
  3. Configure the Dart API credentials in n8n with your token

  ## Help and Resources

  - [Homepage](https://dartai.com/?nr=1)
  - [Web App](https://app.dartai.com/)
  - [Help Center](https://help.dartai.com/)
  - [Bugs and Features](https://app.dartai.com/p/r/JFyPnhL9En61)
  - [Library Source](https://github.com/its-dart/n8n-nodes-dart/)
  - [Chat on Discord](https://discord.gg/RExv8jEkSh)
  - Email us at [support@dartai.com](mailto:support@dartai.com)

  ## Contributing

  Contributions are welcome! Please open an issue or submit a pull request.

  ## License

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

ai_documentation_summary:
  {"purpose":"The Dart n8n node enables integration with Dart's project management platform via AI-powered tools, allowing users to manage projects and tasks directly within n8n workflows.","capabilities":["Authenticate with Dart using a bearer token","Access project management features through AI-driven workflows","Integrate Dart's project management capabilities into n8n automation processes"],"authentication":"Bearer token authentication via the Dart API","commonUseCases":["Automating project task creation and updates","Syncing project status across tools using AI insights","Triggering workflows based on project milestones or changes"],"limitations":[],"relatedNodes":["Project Management","AI-Powered Automation","Workflow Integration"]}


node_type: n8n-nodes-omnara.omnara
package_name: n8n-nodes-omnara
display_name: Omnara
description: Send messages to users via Omnara - a web and mobile platform for human-AI communication
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: ksarangmath
author_github_url: https://github.com/omnara-ai/omnara.git
npm_package_name: n8n-nodes-omnara
npm_version: 0.1.7
community_fetched_at: 2026-01-07T20:08:16.031Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Message",
          "value": "message",
          "description": "Send messages to Omnara agents"
        },
        {
          "name": "Session",
          "value": "session",
          "description": "Manage agent sessions"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send message",
          "description": "Send a non-blocking message to the user (for status updates, progress reports, or sharing your thought process). Use this when you want to inform the user but do not need their response to continue"
        },
        {
          "name": "Send and Wait",
          "value": "sendAndWait",
          "action": "Send message and wait for response",
          "description": "Send a message and wait for the user's response (for questions, approvals, or conversations). Use this when you need the user's input to proceed with your task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "end",
      "options": [
        {
          "name": "End",
          "value": "end",
          "action": "End agent session",
          "description": "End an agent session"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "session"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send",
      "value": "send",
      "action": "Send message",
      "description": "Send a non-blocking message to the user (for status updates, progress reports, or sharing your thought process). Use this when you want to inform the user but do not need their response to continue"
    },
    {
      "name": "Send and Wait",
      "value": "sendAndWait",
      "action": "Send message and wait for response",
      "description": "Send a message and wait for the user's response (for questions, approvals, or conversations). Use this when you need the user's input to proceed with your task"
    },
    {
      "name": "End",
      "value": "end",
      "action": "End agent session",
      "description": "End an agent session"
    }
  ]

npm_readme:
  # n8n-nodes-omnara

  The best human-in-the-loop node for n8n, built for seamless human-agent interaction. Perfect for approval workflows and real-time agent conversations.

  [Omnara](https://omnara.com) lets you monitor and guide AI agents without the noise. View your agent's full thought process through our web and mobile apps with smart notifications - only get alerted when your input is needed. Need urgent responses? Enable email and SMS notifications with zero setup. Stay in control while automation runs.

  ## Installation

  ### Community Node (Recommended)

  ```bash
  npm install n8n-nodes-omnara
  ```

  Or in n8n, go to **Settings** > **Community Nodes** and search for `n8n-nodes-omnara`.

  ### Manual Installation

  1. Clone or download this repository
  2. In the repository folder, run:
     ```bash
     npm install
     npm run build
     ```
  3. Copy the `dist` folder to your n8n custom nodes folder
  4. Restart n8n

  ### Development Installation

  For development and testing:

  ```bash
  # Install dependencies
  npm install

  # Build the node
  npm run build

  # For development with auto-rebuild
  npm run dev

  # Link to n8n for testing
  npm link
  # In your n8n installation:
  npm link n8n-nodes-omnara
  ```

  ## Getting Started

  ### 1. Get Your API Key

  1. Go to [Omnara Dashboard](https://omnara.com/dashboard)
  2. Click on your email in the bottom left corner
  3. Click "API Keys"
  4. Create a new API key and copy it

  ### 2. Add Omnara Credentials in n8n

  1. In n8n, go to Credentials → Add Credential → Omnara API
  2. Paste your API key
  3. Leave the API URL as default (unless you have a custom deployment)
  4. Save the credentials

  ### 3. Important: Agent Instance ID and Agent Type

  **Every Omnara node in your workflow needs:**
  - **Agent Instance ID**: A unique UUID for each workflow run (same across all nodes in one run)
  - **Agent Type**: The name of your agent on the Omnara dashboard (same across all nodes)

  ⚠️ **Critical**: Use the SAME agent instance ID and agent type across ALL Omnara nodes in a single workflow run!

  ## Workflow Setup

  ### Option A: Trigger with Webhook (Recommended)

  This lets you start workflows from the Omnara dashboard.

  **Step 1: Set up n8n Webhook**
  1. Add a **Webhook** node as your trigger
  2. Set it to **POST** method
  3. Copy the webhook URL (looks like: `https://your-n8n.com/webhook/xxx`)

  **Step 2: Configure Omnara Dashboard**
  1. Go to [Omnara Dashboard](https://omnara.com/dashboard)
  2. Click the **+ New Instance** button (top left)
  3. Paste your webhook URL
  4. Create your agent type
  5. Send a message to trigger your workflow

  **Step 3: Use Webhook Data in Omnara Nodes**
  The webhook provides these values - use them in ALL your Omnara nodes:
  - **Agent Instance ID**: `{{ $('Webhook').item.json.body.agent_instance_id }}`
  - **Agent Type**: `{{ $('Webhook').item.json.body.agent_type }}`

  The webhook also provides:
  - **Prompt**: `{{ $('Webhook').item.json.body.prompt }}` - This is the message you entered in Omnara dashboard. Use it as input for your workflow if needed.

  ### Option B: Trigger Without Webhook

  For workflows triggered by other events (cron, manual, other apps).

  **Requirements:**
  1. Generate a unique UUID for Agent Instance ID (use Expression: `{{ $uuid() }}`)
  2. Choose an agent type name (e.g., "customer_support", "code_reviewer")
  3. Store these in Set node variables
  4. Use the SAME values across all Omnara nodes in the workflow

  **Example Setup:**
  ```
  Trigger → Set Node (store UUID & agent type) → Your Workflow → Omnara Nodes
  ```

  In Set node:
  - `agent_instance_id`: `{{ $uuid() }}`
  - `agent_type`: "your_agent_name"

  Then reference in all Omnara nodes:
  - **Agent Instance ID**: `{{ $('Set').item.json.agent_instance_id }}`
  - **Agent Type**: `{{ $('Set').item.json.agent_type }}`

  ## Operations

  ### Message Resource

  #### Send Message (Non-blocking)
  Send status updates and progress reports to users without waiting for a response. Perfect for AI agents to share their thought process, progress updates, or informational messages while continuing to work.

  **Parameters:**
  - **Agent Instance ID**: The ID of the agent instance (creates new if doesn't exist)
  - **Agent Type**: Type of agent (e.g., 'claude_code', 'cursor')
  - **Message**: Status update or informational message (workflow continues immediately)
  - **Additional Options**:
    - Send Email/SMS/Push: Notification preferences

  #### Send and Wait (Blocking)
  Send a question or request and WAIT for the user's response. Essential for AI agents that need human input, approvals, or answers to continue their task. The workflow pauses until the user responds via the Omnara web/mobile app.

  **Parameters:**
  - **Agent Instance ID**: The ID of the agent instance
  - **Agent Type**: Type of agent (e.g., 'claude_code', 'cursor')
  - **Message**: Question or request that requires user response (workflow pauses until answered)
  - **Wait Options**:
    - Timeout: How long to wait (default 24 hours)
    - **Sync Mode (For AI Agents)**: Enable synchronous polling mode for AI Agent compatibility
      - Sync Timeout: Max wait time in sync mode (default 2 hours, max 48 hours)
      - Poll Interval: How often to check for responses (default 5 seconds)
  - **Additional Options**: Same as Send Message

  **How it works:**

  *Normal Mode (for regular workflows):*
  1. Sends message to Omnara with `requires_user_input: true`
  2. Generates a webhook URL and stores it with the message
  3. Pauses workflow execution
  4. When user responds in Omnara dashboard, workflow resumes with the response

  *Sync Mode (for AI Agent tools):*
  1. Sends message to Omnara
  2. Polls for responses every 5 seconds
  3. Returns immediately when response received
  4. Works within AI Agent execution context (avoids async/await issues)

  ### Session Resource

  #### End Session
  End an agent session and mark it as completed.

  **Parameters:**
  - **Agent Instance ID**: The ID of the agent instance session to end

  ## Usage Examples

  ### Basic Message Send
  ```javascript
  // Send a status update to your agent
  {
    "resource": "message",
    "operation": "send",
    "agentInstanceId": "agent-123",
    "content": "Build completed successfully"
  }
  ```

  ### Approval Workflow (Regular)
  ```javascript
  // Ask for approval and wait for response
  {
    "resource": "message",
    "operation": "sendAndWait",
    "agentInstanceId": "agent-456",
    "agentType": "claude_code",
    "message": "Deploy to production? Please approve or decline.",
    "options": {
      "sendEmail": true,
      "sendPush": true
    }
  }
  ```

  ### AI Agent Tool Usage (Sync Mode)
  ```javascript
  // Use sync mode when calling from AI Agent tools
  {
    "resource": "message",
    "operation": "sendAndWait",
    "agentInstanceId": "agent-789",
    "agentType": "claude_code",
    "message": "What changes should I make to the database schema?",
    "options": {
      "syncMode": true,
      "syncTimeout": 600,  // Wait up to 10 minutes
      "pollInterval": 5,   // Check every 5 seconds
      "sendEmail": true,
      "sendPush": true
    }
  }
  ```

  ### End Session
  ```javascript
  // Mark agent session as completed
  {
    "resource": "session",
    "operation": "end",
    "agentInstanceId": "agent-789"
  }
  ```

  ## Agent Tool Support

  This node is configured with `usableAsTool: true`, making it available as a tool for AI agents in n8n. 

  **Important**: When using Send and Wait as an AI Agent tool, you MUST enable **Sync Mode** in the options. This solves the async/await limitations of AI Agents in n8n.

  AI Agents can:
  - Send status updates
  - Ask for human input and wait for responses (using Sync Mode)
  - Manage agent sessions

  ### Why Sync Mode?
  Regular Send and Wait uses `putExecutionToWait()` which doesn't work properly in AI Agent context due to n8n's architecture. Sync Mode polls for responses synchronously, allowing AI Agents to wait for human responses without timing out or returning prematurely.

  ## Webhook Integration

  The Send and Wait operation uses n8n's built-in webhook functionality:
  - Webhook URLs are automatically generated by n8n
  - Omnara stores the webhook URL and triggers it when users respond
  - Workflows resume with the user's response data
  - Supports timeout configuration (max 7 days)

  ## Error Handling

  The node includes comprehensive error handling:
  - Authentication failures
  - Invalid agent instance IDs
  - Timeout handling for wait operations
  - Network errors and API issues

  All operations support the "Continue On Fail" option in n8n.

  ## Development

  ### Building
  ```bash
  npm run build
  ```

  ### Linting
  ```bash
  npm run lint
  npm run lint:fix
  ```

  ### Code Formatting
  ```bash
  npm run format
  ```

  ## Resources

  - [Omnara GitHub](https://github.com/omnara-ai/omnara)
  - [n8n Documentation](https://docs.n8n.io)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  MIT

  ## Support & Feedback

  Our mission is to make Omnara the best platform for human-in-the-loop workflows and human-AI collaboration. We're actively improving and would love your input!

  - **Issues & feature requests**: [GitHub Issues](https://github.com/omnara-ai/omnara/issues) or contact@omnara.com
  - **Questions & support**: contact@omnara.com

  Share your ideas on how we can make human-AI interaction better!

ai_documentation_summary:
  {"purpose":"The Omnara node enables human-in-the-loop workflows by sending messages to users via the Omnara platform, supporting both non-blocking status updates and blocking requests that wait for user input through web or mobile apps.","capabilities":["Send status updates or progress messages (non-blocking)","Send questions or requests and wait for user responses (blocking)","Configure notification preferences (email, SMS, push)","Support for sync mode to enable real-time polling for AI agent compatibility","End an agent session"],"authentication":"API key required","commonUseCases":["Approval workflows requiring human validation","Real-time agent progress updates and notifications","AI agents that need user input during execution","Human-AI collaboration in automated processes"],"limitations":["Agent Instance ID and Agent Type must be identical across all Omnara nodes in a workflow run","Blocking mode requires user response via Omnara dashboard and may not work in environments without internet access","Sync mode polling has a maximum wait time of 48 hours and poll interval of 5 seconds"],"relatedNodes":["Webhook","Set","Expression"]}


node_type: n8n-nodes-copyseeker.copyseeker
package_name: n8n-nodes-copyseeker
display_name: Copyseeker
description: Reverse image search and copyright analysis
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: copyseeker
author_github_url: https://github.com/man-tas/
npm_package_name: n8n-nodes-copyseeker
npm_version: 1.0.5
community_fetched_at: 2026-01-07T20:08:16.035Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "image",
      "options": [
        {
          "name": "Image",
          "value": "image"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reverseSearch",
      "options": [
        {
          "name": "Reverse Search",
          "value": "reverseSearch",
          "action": "Perform reverse image search",
          "description": "Find where an image appears online"
        },
        {
          "name": "Site-Specific Search",
          "value": "siteSearch",
          "action": "Search specific site for image",
          "description": "Search for image on a specific website"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Reverse Search",
      "value": "reverseSearch",
      "action": "Perform reverse image search",
      "description": "Find where an image appears online"
    },
    {
      "name": "Site-Specific Search",
      "value": "siteSearch",
      "action": "Search specific site for image",
      "description": "Search for image on a specific website"
    }
  ]

npm_readme:
  # n8n-nodes-copyseeker

  n8n community node for [Copyseeker](https://copyseeker.net) - Reverse Image Search API

  [Installation](#installation) • [Configuration](#configuration) • [Operations](#operations) • [Use Cases](#use-cases) • [Support](#support)

  ## Installation

  ### Via n8n Community Nodes

  1. Go to **Settings** > **Community Nodes**
  2. Click **Install**
  3. Enter `n8n-nodes-copyseeker`
  4. Click **Install**

  ### Via npm
  ```bash
  npm install n8n-nodes-copyseeker
  ```

  ## Prerequisites

  Get your API key from [RapidAPI Copyseeker](https://rapidapi.com/copyseeker1-copyseeker-default/api/reverse-image-search-by-copyseeker)

  ## Configuration

  1. Add **Copyseeker** node to workflow
  2. Click **Create New Credentials**
  3. Enter your RapidAPI key
  4. Save

  ## Operations

  ### Reverse Image Search

  Find where an image appears online.

  **Input:**
  - Image URL (required)
  - Return Full Response (optional)
  - Filter by Minimum Rank (optional)
  - Include Visual Similar Images (optional)

  **Output:**
  ```json
  {
    "bestGuess": "logo design",
    "totalMatches": 15,
    "highestRankedSource": {
      "url": "https://example.com",
      "title": "Example Website",
      "rank": 8.5
    },
    "topEntities": ["Web Design", "Logo", "Branding"],
    "visuallySimilarCount": 23,
    "allPages": [],
    "entities": [],
    "visuallySimilar": []
  }
  ```

  ### Site-Specific Search

  Search for an image on a specific website.

  **Input:**
  - Image URL (required)
  - Target Site (required) - domain without protocol
  - Return Full Response (optional)
  - Filter by Minimum Rank (optional)
  - Include Visual Similar Images (optional)

  ## Use Cases

  ### Copyright Protection
  Monitor unauthorized use of your images across the web.

  ### E-commerce Visual Search
  Enable customers to find products by uploading images.

  ### Brand Protection
  Detect counterfeit products and unauthorized logo usage.

  ### Content Moderation
  Filter duplicate or previously flagged content.

  ### Fraud Detection
  Verify profile photos in dating apps, insurance claims, job applications.

  ### Fact-Checking
  Verify image authenticity and track original sources.

  ## Page Authority Scores

  | Score | Authority |
  |-------|-----------|
  | 8.0-10.0 | Very High - Major sites, likely original |
  | 6.0-7.9 | High - Established sites |
  | 4.0-5.9 | Medium - Regular sites |
  | 2.0-3.9 | Low - Smaller sites |
  | 0.0-1.9 | Very Low - New or low-authority |

  ## Best Practices

  **Do:**
  - Use direct image URLs (.jpg, .png, .gif, .webp)
  - Keep images under 10MB
  - Implement error handling
  - Cache results when possible
  - Use minimum rank filtering

  **Don't:**
  - Use HTML page URLs
  - Include protocol in Target Site
  - Exceed rate limits
  - Process same image repeatedly

  ## Troubleshooting

  **No matches found**
  - Verify URL is direct and public
  - Image may be too new to index

  **Rate limit exceeded**
  - Check RapidAPI plan limits
  - Add delays between requests

  **Invalid credentials**
  - Verify RapidAPI key
  - Check subscription status

  ## Support

  - [Copyseeker Website](https://copyseeker.net)
  - [GitHub Issues](https://github.com/man-tas/n8n-nodes-copyseeker/issues)
  - [RapidAPI Page](https://rapidapi.com/copyseeker1-copyseeker-default/api/reverse-image-search-by-copyseeker)

  ## License

  MIT

  ---

  Built for the n8n community • [Documentation](https://docs.n8n.io/integrations/community-nodes/)

ai_documentation_summary:
  {"purpose":"The Copyseeker node enables reverse image search and copyright analysis by integrating with the Copyseeker API to detect where images appear online, analyze visual similarities, and assess site authority for copyright protection and content verification.","capabilities":["Reverse image search by image URL","Site-specific image search by domain","Filter results by minimum rank","Include visually similar images in results","Retrieve page authority scores for sources","Analyze image entities and match contexts"],"authentication":"API key required from RapidAPI (via Copyseeker's RapidAPI account)","commonUseCases":["Copyright protection and monitoring of unauthorized image usage","E-commerce visual search for product identification","Brand protection against counterfeit products and logo misuse","Content moderation to detect duplicates or flagged content","Fraud detection in profile verification (e.g., dating apps, job applications)"],"limitations":["Only supports direct image URLs (not HTML page URLs)","Images must be under 10MB in size","Rate limits apply based on RapidAPI plan; excessive requests may trigger limits","New or recently uploaded images may not be indexed","No support for image uploads directly; requires public image URLs"],"relatedNodes":["Image processing nodes","Web search nodes","Content moderation nodes","Brand monitoring nodes"]}


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

updated_at: 2026-01-07 20:08:16
author_name: browserflow
author_github_url: https://github.com/Browserflow-io/browserflow-n8n.git
npm_package_name: n8n-nodes-browserflow
npm_version: 0.3.8
community_fetched_at: 2026-01-07T20:08:16.035Z
ai_summary_generated_at: 2026-01-08 10:45:32
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"
    },
    {
      "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"
    }
  ]

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":"The Browserflow for LinkedIn node automates various LinkedIn interactions such as checking connection status, retrieving profile data, sending connection invites, messaging, and scraping profiles from searches or post comments using the Browserflow API.","capabilities":["Check connection status of a LinkedIn profile","Retrieve profile data","Send connection invites with optional custom messages","Retrieve chat history from LinkedIn conversations","Scrape LinkedIn profiles based on search criteria (category, term, location)","Scrape profiles from LinkedIn post comments and reactions","Send direct messages to LinkedIn profiles (with mandatory message)"],"authentication":"API key required (free key available via browserflow.io/n8n)","commonUseCases":["Automatically sending connection requests to target professionals","Scraping and collecting LinkedIn profile data for lead generation","Monitoring and retrieving chat history with contacts","Engaging with LinkedIn communities by messaging users in posts or comments"],"limitations":["Direct messages require a mandatory message field and no message editing or scheduling support mentioned","Scraping may be limited by rate limits or LinkedIn's anti-bot policies","No support for bulk operations or advanced filtering beyond specified parameters"],"relatedNodes":["n8n-nodes-base.webhook","n8n-nodes-base.httpRequest","n8n-nodes-base.function"]}


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

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

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

npm_readme:
  # n8n-nodes-awork

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

  ## Installation

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

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

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

  ## Authentication

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

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

  ## Available Operations

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

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

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

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

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

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

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

  ## Example Workflows

  Here are some common use cases for the awork nodes:

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

  ## Resources

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

  ## Support

  If you encounter any issues or have questions:

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

  ## Local Development

  For contributors and developers who want to test changes locally:

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

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

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

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

  ## License

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

ai_documentation_summary:
  {"purpose":"The awork node enables automation of project, task, company, and user management within awork using n8n, allowing seamless integration with workflows for project tracking and data synchronization.","capabilities":["Create and manage projects with custom settings and status updates","Create, retrieve, list, and update tasks including custom fields and comments","Manage companies by creating, retrieving, and listing them","List users with filtering options","Perform generic HTTP requests to any awork API endpoint"],"authentication":"API key required; generated via awork's developer portal and entered in the n8n credentials under 'awork API'","commonUseCases":["Automated project creation triggered by CRM deal wins","Synchronizing tasks between awork and other tools","Creating companies in awork from form submissions","Updating task statuses based on external events","Extracting project and task data for reporting"],"limitations":[],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.crm"]}


