# nodes

node_type: n8n-nodes-dataforseo.dataForSeoBacklinksApi
package_name: n8n-nodes-dataforseo
display_name: DataForSEO Backlinks API
description: DataForSEO
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: dataforseo
author_github_url: https://github.com/dataforseo/
npm_package_name: n8n-nodes-dataforseo
npm_version: 1.6.2
community_fetched_at: 2026-07-14T14:40:34.028Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "get-backlinks-summary",
      "options": [
        {
          "name": "Get Backlinks Summary",
          "value": "get-backlinks-summary",
          "action": "Get bulk keyword difficulty",
          "description": "Get an overview of backlink data for a domain, subdomain, or webpage"
        },
        {
          "name": "Get Historical Backlink Summary",
          "value": "get-historical-backlink-summary",
          "action": "Get historical backlink summary",
          "description": "Get historical backlink data for a domain back to the beginning of 2019"
        },
        {
          "name": "Get Backlinks",
          "value": "get-backlinks",
          "action": "Get backlinks",
          "description": "Get a list of backlinks for a domain, subdomain or page"
        },
        {
          "name": "Get Anchors",
          "value": "get-anchors",
          "action": "Get anchors",
          "description": "Get a detailed overview of anchors used when linking to the specified website with relevant backlink data for each of them"
        },
        {
          "name": "Get Domain Pages",
          "value": "get-domain-pages",
          "action": "Get domain pages",
          "description": "Get a detailed overview of domain pages with backlink data for each page"
        },
        {
          "name": "Get Domain Pages Summary",
          "value": "get-domain-pages-summary",
          "action": "Get domain pages summary",
          "description": "Get a detailed summary data on all backlinks and related metrics for each page of the target domain or subdomain you specify"
        },
        {
          "name": "Get Referring Domains",
          "value": "get-referring-domains",
          "action": "Get referring domains",
          "description": "Get a detailed overview of referring domains pointing to the target you specify"
        },
        {
          "name": "Get Referring Networks",
          "value": "get-referring-networks",
          "action": "Get referring networks",
          "description": "Get a detailed overview of referring IPs and subnets pointing to the target you specify"
        },
        {
          "name": "Get Competitors",
          "value": "get-competitors",
          "action": "Get competitors",
          "description": "Get a list of competitors that share some part of the backlink profile with a target website, along with a number of backlink intersections and the rank of every competing website"
        },
        {
          "name": "Get Domain Intersection",
          "value": "get-domain-intersection",
          "action": "Get domain intersection",
          "description": "Get the list of domains pointing to the specified websites"
        },
        {
          "name": "Get Page Intersection",
          "value": "get-page-intersection",
          "action": "Get page intersection",
          "description": "Get the list of referring pages pointing to the specified targets"
        },
        {
          "name": "Get Backlinks Timeseries Summary",
          "value": "get-backlinks-timeseries-summary",
          "action": "Get backlinks timeseries summary",
          "description": "Get an overview of backlink data for the target domain available during a period between the two indicated dates"
        },
        {
          "name": "Get New & Lost Backlinks Timeseries Summary",
          "value": "get-new-and-lost-backlinks-timeseries-summary",
          "action": "Get new and lost backlinks timeseries summary",
          "description": "Get the number of new and lost backlinks and referring domains for the domain specified in the target field"
        },
        {
          "name": "Get Bulk Ranks",
          "value": "get-bulk-ranks",
          "action": "Get bulk ranks",
          "description": "Get rank scores for up to 1,000 domains, subdomains, and pages"
        },
        {
          "name": "Get Bulk Backlinks",
          "value": "get-bulk-backlinks",
          "action": "Get bulk backlinks",
          "description": "Get the number of backlinks for up to 1,000 domains, subdomains, and pages"
        },
        {
          "name": "Get Bulk Spam Scores",
          "value": "get-bulk-spam-scores",
          "action": "Get bulk spam scores",
          "description": "Get Spam Scores for up to 1,000 domains, subdomains, and pages"
        },
        {
          "name": "Get Bulk Referring Domains",
          "value": "get-bulk-referring-domains",
          "action": "Get bulk referring domains",
          "description": "Get the number of referring domains for up to 1,000 domains, subdomains, and pages"
        },
        {
          "name": "Get Bulk New & Lost Backlinks",
          "value": "get-bulk-new-and-lost-backlinks",
          "action": "Get bulk new and lost backlinks",
          "description": "Get the number of new and lost backlinks for up to 1,000 domains, subdomains, and pages"
        },
        {
          "name": "Get Bulk New & Lost Referring Domains",
          "value": "get-bulk-new-and-lost-referring-domains",
          "action": "Get bulk new and lost referring domains",
          "description": "Get the number of new and lost referring domains for up to 1,000 domains, subdomains, and pages"
        },
        {
          "name": "Get Bulk Pages Summary",
          "value": "get-bulk-pages-summary",
          "action": "Get bulk pages summary",
          "description": "Get a comprehensive overview of backlinks and related data for a bulk of up to 1000 pages, domains, or subdomains"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Backlinks Summary",
      "value": "get-backlinks-summary",
      "action": "Get bulk keyword difficulty",
      "description": "Get an overview of backlink data for a domain, subdomain, or webpage"
    },
    {
      "name": "Get Historical Backlink Summary",
      "value": "get-historical-backlink-summary",
      "action": "Get historical backlink summary",
      "description": "Get historical backlink data for a domain back to the beginning of 2019"
    },
    {
      "name": "Get Backlinks",
      "value": "get-backlinks",
      "action": "Get backlinks",
      "description": "Get a list of backlinks for a domain, subdomain or page"
    },
    {
      "name": "Get Anchors",
      "value": "get-anchors",
      "action": "Get anchors",
      "description": "Get a detailed overview of anchors used when linking to the specified website with relevant backlink data for each of them"
    },
    {
      "name": "Get Domain Pages",
      "value": "get-domain-pages",
      "action": "Get domain pages",
      "description": "Get a detailed overview of domain pages with backlink data for each page"
    },
    {
      "name": "Get Domain Pages Summary",
      "value": "get-domain-pages-summary",
      "action": "Get domain pages summary",
      "description": "Get a detailed summary data on all backlinks and related metrics for each page of the target domain or subdomain you specify"
    },
    {
      "name": "Get Referring Domains",
      "value": "get-referring-domains",
      "action": "Get referring domains",
      "description": "Get a detailed overview of referring domains pointing to the target you specify"
    },
    {
      "name": "Get Referring Networks",
      "value": "get-referring-networks",
      "action": "Get referring networks",
      "description": "Get a detailed overview of referring IPs and subnets pointing to the target you specify"
    },
    {
      "name": "Get Competitors",
      "value": "get-competitors",
      "action": "Get competitors",
      "description": "Get a list of competitors that share some part of the backlink profile with a target website, along with a number of backlink intersections and the rank of every competing website"
    },
    {
      "name": "Get Domain Intersection",
      "value": "get-domain-intersection",
      "action": "Get domain intersection",
      "description": "Get the list of domains pointing to the specified websites"
    },
    {
      "name": "Get Page Intersection",
      "value": "get-page-intersection",
      "action": "Get page intersection",
      "description": "Get the list of referring pages pointing to the specified targets"
    },
    {
      "name": "Get Backlinks Timeseries Summary",
      "value": "get-backlinks-timeseries-summary",
      "action": "Get backlinks timeseries summary",
      "description": "Get an overview of backlink data for the target domain available during a period between the two indicated dates"
    },
    {
      "name": "Get New & Lost Backlinks Timeseries Summary",
      "value": "get-new-and-lost-backlinks-timeseries-summary",
      "action": "Get new and lost backlinks timeseries summary",
      "description": "Get the number of new and lost backlinks and referring domains for the domain specified in the target field"
    },
    {
      "name": "Get Bulk Ranks",
      "value": "get-bulk-ranks",
      "action": "Get bulk ranks",
      "description": "Get rank scores for up to 1,000 domains, subdomains, and pages"
    },
    {
      "name": "Get Bulk Backlinks",
      "value": "get-bulk-backlinks",
      "action": "Get bulk backlinks",
      "description": "Get the number of backlinks for up to 1,000 domains, subdomains, and pages"
    },
    {
      "name": "Get Bulk Spam Scores",
      "value": "get-bulk-spam-scores",
      "action": "Get bulk spam scores",
      "description": "Get Spam Scores for up to 1,000 domains, subdomains, and pages"
    },
    {
      "name": "Get Bulk Referring Domains",
      "value": "get-bulk-referring-domains",
      "action": "Get bulk referring domains",
      "description": "Get the number of referring domains for up to 1,000 domains, subdomains, and pages"
    },
    {
      "name": "Get Bulk New & Lost Backlinks",
      "value": "get-bulk-new-and-lost-backlinks",
      "action": "Get bulk new and lost backlinks",
      "description": "Get the number of new and lost backlinks for up to 1,000 domains, subdomains, and pages"
    },
    {
      "name": "Get Bulk New & Lost Referring Domains",
      "value": "get-bulk-new-and-lost-referring-domains",
      "action": "Get bulk new and lost referring domains",
      "description": "Get the number of new and lost referring domains for up to 1,000 domains, subdomains, and pages"
    },
    {
      "name": "Get Bulk Pages Summary",
      "value": "get-bulk-pages-summary",
      "action": "Get bulk pages summary",
      "description": "Get a comprehensive overview of backlinks and related data for a bulk of up to 1000 pages, domains, or subdomains"
    }
  ]

npm_readme:
[cell repeats an earlier one in this file: 56802 characters]

ai_documentation_summary:
  {"purpose":"The DataForSEO Backlinks API node retrieves marketing and SEO data, specifically backlink reports, through the DataForSEO API within n8n workflows.","capabilities":["Retrieve backlink reports","Get Google Organic SERP data (Live and Task-based)","Get Google AI Mode SERP data","Get Google Maps SERP data","Get Google Local Finder SERP data","Get Google News SERP data","Get Google Events SERP data","Get Google Images SERP data","Get Google Search By Image SERP data","Get Google Jobs SERP data"],"authentication":"API Login and API Password required","commonUseCases":["SEO competitive analysis","Backlink profile monitoring","Keyword research and ranking tracking","Local SEO data retrieval","News and event SERP monitoring"],"limitations":["Requires a paid DataForSEO account","API credentials must be manually obtained from the DataForSEO dashboard","Password visibility is limited to 24 hours after registration without re-requesting"],"relatedNodes":[]}


node_type: n8n-nodes-dataforseo.dataForSeoLabsApi
package_name: n8n-nodes-dataforseo
display_name: DataForSEO Labs API
description: DataForSEO
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: dataforseo
author_github_url: https://github.com/dataforseo/
npm_package_name: n8n-nodes-dataforseo
npm_version: 1.6.2
community_fetched_at: 2026-07-14T14:40:34.030Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "google",
      "options": [
        {
          "name": "Google",
          "value": "google"
        },
        {
          "name": "Amazon",
          "value": "amazon"
        },
        {
          "name": "Bing",
          "value": "bing"
        },
        {
          "name": "Google Play",
          "value": "google_play"
        },
        {
          "name": "App Store",
          "value": "app_store"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get-keywords-for-site",
      "options": [
        {
          "name": "Get Keywords For Site",
          "value": "get-keywords-for-site",
          "action": "Get keywords for site",
          "description": "Get a list of keywords relevant to the target domain"
        },
        {
          "name": "Get Related Keywords",
          "value": "get-related-keywords",
          "action": "Get related keywords",
          "description": "Get keywords appearing in the \"searches related to\" SERP element"
        },
        {
          "name": "Get Keyword Suggestions",
          "value": "get-keyword-suggestions",
          "action": "Get keyword suggestions",
          "description": "Get search terms that are relevant to the product or service categories of all the specified keywords"
        },
        {
          "name": "Get Keyword Ideas",
          "value": "get-keyword-ideas",
          "action": "Get keyword ideas",
          "description": "Get search terms that fall into the same Google product or service category as the specified keywords"
        },
        {
          "name": "Get Keyword Difficulty",
          "value": "get-keyword-difficulty",
          "action": "Get keyword difficulty",
          "description": "Get Keyword Difficulty for the specified keywords"
        },
        {
          "name": "Get Search Intent",
          "value": "get-search-intent",
          "action": "Get search intent",
          "description": "Get search intent data for up to 1,000 keywords"
        },
        {
          "name": "Get Keyword Overview",
          "value": "get-keyword-overview",
          "action": "Get keyword overview",
          "description": "Get current cost-per-click, competition values for paid search, search volume, search intent, monthly searches, SERP and backlink information for specified keywords"
        },
        {
          "name": "Get Historical Keyword Data",
          "value": "get-historical-keyword-data",
          "action": "Get historical keyword data",
          "description": "Get Google historical keyword data for specified keywords, including search volume, cost-per-click, competition values for paid search, monthly searches, and search volume trends"
        },
        {
          "name": "Get Categories For Domain",
          "value": "get-categories-for-domain",
          "action": "Get categories for domain",
          "description": "Get Google product or service categories that include keywords the domain ranks for in search"
        },
        {
          "name": "Get Categories For Keywords",
          "value": "get-categories-for-keywords",
          "action": "Get categories for keywords",
          "description": "Get Google product and service categories related for each specified keyword"
        },
        {
          "name": "Get Keywords For Categories",
          "value": "get-keywords-for-categories",
          "action": "Get keywords for categories",
          "description": "Get a list of keywords relevant to the specified product categories"
        },
        {
          "name": "Get Domain Metrics By Categories",
          "value": "get-domain-metrics-by-categories",
          "action": "Get domain metrics by categories",
          "description": "Get dynamics of change in metrics of domains relevant to the specified product and service categories"
        },
        {
          "name": "Get Top Searches",
          "value": "get-top-searches",
          "action": "Get top searches",
          "description": "Get a set of relevant keyword data with Google Ads metrics, product categories, and Google SERP data"
        },
        {
          "name": "Get SERP Competitors",
          "value": "get-serp-competitors",
          "action": "Get serp competitors",
          "description": "Get a list of domains ranking for the keywords you specify"
        },
        {
          "name": "Get Ranked Keywords",
          "value": "get-ranked-keywords",
          "action": "Get ranked keywords",
          "description": "Get the list of keywords that any domain or webpage is ranking for"
        },
        {
          "name": "Get Competitors Domain",
          "value": "get-competitors-domain",
          "action": "Get competitors domain",
          "description": "Get a full overview of ranking and traffic data of the competitor domains from organic and paid search"
        },
        {
          "name": "Get Domain Intersection",
          "value": "get-domain-intersection",
          "action": "Get domain intersection",
          "description": "Get keywords for which both specified domains rank within the same SERP"
        },
        {
          "name": "Get Subdomains",
          "value": "get-subdomains",
          "action": "Get subdomains",
          "description": "Get the list of subdomains of the specified domain, along with the ranking distribution across organic and paid search"
        },
        {
          "name": "Get Relevant Pages",
          "value": "get-relevant-pages",
          "action": "Get relevant pages",
          "description": "Get rankings and traffic data for the web pages of the specified domain"
        },
        {
          "name": "Get Domain Rank Overview",
          "value": "get-domain-rank-overview",
          "action": "Get domain rank overview",
          "description": "Get ranking and traffic data from organic search for a domain"
        },
        {
          "name": "Get Historical SERPs",
          "value": "get-historical-serps",
          "action": "Get historical serps",
          "description": "Get Google SERPs collected within the specified time frame"
        },
        {
          "name": "Get Historical Rank Overview",
          "value": "get-historical-rank-overview",
          "action": "Get historical rank overview",
          "description": "Get historical data on rankings and traffic of the specified domain, such as domain ranking distribution in SERPs and estimated monthly traffic volume for both organic and paid results"
        },
        {
          "name": "Get Page Intersection",
          "value": "get-page-intersection",
          "action": "Get page intersection",
          "description": "Get the keywords for which specified pages rank within the same SERP"
        },
        {
          "name": "Get Bulk Traffic Estimation",
          "value": "get-bulk-traffic-estimation",
          "action": "Get bulk traffic estimation",
          "description": "Get estimated monthly traffic volumes for up to 1,000 domains, subdomains, or webpages"
        },
        {
          "name": "Get Historical Bulk Traffic Estimation",
          "value": "get-historical-bulk-traffic-estimation",
          "action": "Get historical bulk traffic estimation",
          "description": "Get historical monthly traffic volumes for up to 1,000 domains collected within the specified time range through October 2020"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "google"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get-bulk-search-volume",
      "options": [
        {
          "name": "Get Bulk Search Volume",
          "value": "get-bulk-search-volume",
          "action": "Get bulk search volume",
          "description": "Get search volume values for a maximum of 1,000 keywords in one API request"
        },
        {
          "name": "Get Related Keywords",
          "value": "get-amazon-related-keywords",
          "action": "Get related keywords",
          "description": "Get keywords appearing in the \"Related Searches\" section on Amazon"
        },
        {
          "name": "Get Ranked Keywords",
          "value": "get-amazon-ranked-keywords",
          "action": "Get ranked keywords",
          "description": "Get the list of keywords the target product ranks for on Amazon"
        },
        {
          "name": "Get Product Rank Overview",
          "value": "get-product-rank-overview",
          "action": "Get product rank overview",
          "description": "Get ranking data from organic and paid Amazon SERPs for the target products"
        },
        {
          "name": "Get Product Competitors",
          "value": "get-product-competitors",
          "action": "Get product competitors",
          "description": "Get a list of products that intersect with a target asin in Amazon SERPs"
        },
        {
          "name": "Get Product Keyword Intersections",
          "value": "get-product-keyword-intersections",
          "action": "Get product keyword intersections",
          "description": "Get a list of keywords for which the target products intersect in Amazon SERP"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "amazon"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get-bing-bulk-keyword-difficulty",
      "options": [
        {
          "name": "Get Bulk Keyword Difficulty",
          "value": "get-bing-bulk-keyword-difficulty",
          "action": "Get bulk keyword difficulty",
          "description": "Get the Keyword Difficulty metric for a maximum of 1,000 keywords"
        },
        {
          "name": "Get Bulk Traffic Estimation",
          "value": "get-bing-bulk-traffic-estimation",
          "action": "Get bulk traffic estimation",
          "description": "Get estimated monthly traffic volumes for up to 1,000 domains, subdomains, and pages"
        },
        {
          "name": "Get Competitors Domain",
          "value": "get-bing-competitors-domain",
          "action": "Get competitor domain",
          "description": "Get a full overview of ranking and traffic data of the competitor domains from organic and paid search"
        },
        {
          "name": "Get Domain Intersection",
          "value": "get-bing-domain-intersection",
          "action": "Get domain intersection",
          "description": "Get the keywords for which both specified domains rank within the same SERP"
        },
        {
          "name": "Get Domain Rank Overview",
          "value": "get-bing-domain-rank-overview",
          "action": "Get domain rank overview",
          "description": "Get ranking and traffic data from Bing’s organic and paid search for the specified domain"
        },
        {
          "name": "Get Page Intersection",
          "value": "get-bing-page-intersection",
          "action": "Get page intersection",
          "description": "Get keywords for which specified pages rank within the same Bing SERP"
        },
        {
          "name": "Get Related Keywords",
          "value": "get-bing-related-keywords",
          "action": "Get related keywords",
          "description": "Get keywords appearing in the “searches related to” SERP element"
        },
        {
          "name": "Get Relevant Pages",
          "value": "get-bing-relevant-pages",
          "action": "Get relevant pages",
          "description": "Get rankings and traffic data for the web pages of the specified domain"
        },
        {
          "name": "Get SERP Competitors",
          "value": "get-bing-serp-competitors",
          "action": "Get SERP competitors",
          "description": "Get a list of domain rankings for the keywords you specify"
        },
        {
          "name": "Get Subdomains",
          "value": "get-bing-subdomains",
          "action": "Get subdomains",
          "description": "Get a list of subdomains of the specified domain, along with the ranking distribution across organic and paid search"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "bing"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get-google-play-bulk-app-metrics",
      "options": [
        {
          "name": "Get Bulk App Metrics",
          "value": "get-google-play-bulk-app-metrics",
          "action": "Get bulk app metrics",
          "description": "Get ranking metrics for up to 1000 Google Play applications"
        },
        {
          "name": "Get Keywords for App",
          "value": "get-google-play-keywords-for-app",
          "action": "Get keywords for app",
          "description": "Get a list of keywords for which the target app ranks on Google Play"
        },
        {
          "name": "Get App Competitors",
          "value": "get-google-play-app-competitors",
          "action": "Get app competitors",
          "description": "Get a list of mobile applications that intersect with the target app for its ranking keywords on Google Play"
        },
        {
          "name": "Get App Intersection",
          "value": "get-google-play-app-intersection",
          "action": "Get app intersection",
          "description": "Get a list of keywords for which the mobile applications specified in the app_ids object rank within the same Google Play SERP"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "google_play"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get-app-store-bulk-app-metrics",
      "options": [
        {
          "name": "Get Bulk App Metrics",
          "value": "get-app-store-bulk-app-metrics",
          "action": "Get bulk app metrics",
          "description": "Get ranking metrics for up to 1000 App Store applications"
        },
        {
          "name": "Get Keywords for App",
          "value": "get-app-store-keywords-for-app",
          "action": "Get keywords for app",
          "description": "Get a list of keywords for which the target app ranks on App Store"
        },
        {
          "name": "Get App Competitors",
          "value": "get-app-store-app-competitors",
          "action": "Get app competitors",
          "description": "Get a list of mobile applications that intersect with the target app for its ranking keywords on App Store"
        },
        {
          "name": "Get App Intersection",
          "value": "get-app-store-app-intersection",
          "action": "Get app intersection",
          "description": "Get a list of keywords for which the mobile applications specified in the app_ids object rank within the same App Store SERP"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "app_store"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Keywords For Site",
      "value": "get-keywords-for-site",
      "action": "Get keywords for site",
      "description": "Get a list of keywords relevant to the target domain",
      "resource": "google"
    },
    {
      "name": "Get Related Keywords",
      "value": "get-related-keywords",
      "action": "Get related keywords",
      "description": "Get keywords appearing in the \"searches related to\" SERP element",
      "resource": "google"
    },
    {
      "name": "Get Keyword Suggestions",
      "value": "get-keyword-suggestions",
      "action": "Get keyword suggestions",
      "description": "Get search terms that are relevant to the product or service categories of all the specified keywords",
      "resource": "google"
    },
    {
      "name": "Get Keyword Ideas",
      "value": "get-keyword-ideas",
      "action": "Get keyword ideas",
      "description": "Get search terms that fall into the same Google product or service category as the specified keywords",
      "resource": "google"
    },
    {
      "name": "Get Keyword Difficulty",
      "value": "get-keyword-difficulty",
      "action": "Get keyword difficulty",
      "description": "Get Keyword Difficulty for the specified keywords",
      "resource": "google"
    },
    {
      "name": "Get Search Intent",
      "value": "get-search-intent",
      "action": "Get search intent",
      "description": "Get search intent data for up to 1,000 keywords",
      "resource": "google"
    },
    {
      "name": "Get Keyword Overview",
      "value": "get-keyword-overview",
      "action": "Get keyword overview",
      "description": "Get current cost-per-click, competition values for paid search, search volume, search intent, monthly searches, SERP and backlink information for specified keywords",
      "resource": "google"
    },
    {
      "name": "Get Historical Keyword Data",
      "value": "get-historical-keyword-data",
      "action": "Get historical keyword data",
      "description": "Get Google historical keyword data for specified keywords, including search volume, cost-per-click, competition values for paid search, monthly searches, and search volume trends",
      "resource": "google"
    },
    {
      "name": "Get Categories For Domain",
      "value": "get-categories-for-domain",
      "action": "Get categories for domain",
      "description": "Get Google product or service categories that include keywords the domain ranks for in search",
      "resource": "google"
    },
    {
      "name": "Get Categories For Keywords",
      "value": "get-categories-for-keywords",
      "action": "Get categories for keywords",
      "description": "Get Google product and service categories related for each specified keyword",
      "resource": "google"
    },
    {
      "name": "Get Keywords For Categories",
      "value": "get-keywords-for-categories",
      "action": "Get keywords for categories",
      "description": "Get a list of keywords relevant to the specified product categories",
      "resource": "google"
    },
    {
      "name": "Get Domain Metrics By Categories",
      "value": "get-domain-metrics-by-categories",
      "action": "Get domain metrics by categories",
      "description": "Get dynamics of change in metrics of domains relevant to the specified product and service categories",
      "resource": "google"
    },
    {
      "name": "Get Top Searches",
      "value": "get-top-searches",
      "action": "Get top searches",
      "description": "Get a set of relevant keyword data with Google Ads metrics, product categories, and Google SERP data",
      "resource": "google"
    },
    {
      "name": "Get SERP Competitors",
      "value": "get-serp-competitors",
      "action": "Get serp competitors",
      "description": "Get a list of domains ranking for the keywords you specify",
      "resource": "google"
    },
    {
      "name": "Get Ranked Keywords",
      "value": "get-ranked-keywords",
      "action": "Get ranked keywords",
      "description": "Get the list of keywords that any domain or webpage is ranking for",
      "resource": "google"
    },
    {
      "name": "Get Competitors Domain",
      "value": "get-competitors-domain",
      "action": "Get competitors domain",
      "description": "Get a full overview of ranking and traffic data of the competitor domains from organic and paid search",
      "resource": "google"
    },
    {
      "name": "Get Domain Intersection",
      "value": "get-domain-intersection",
      "action": "Get domain intersection",
      "description": "Get keywords for which both specified domains rank within the same SERP",
      "resource": "google"
    },
    {
      "name": "Get Subdomains",
      "value": "get-subdomains",
      "action": "Get subdomains",
      "description": "Get the list of subdomains of the specified domain, along with the ranking distribution across organic and paid search",
      "resource": "google"
    },
    {
      "name": "Get Relevant Pages",
      "value": "get-relevant-pages",
      "action": "Get relevant pages",
      "description": "Get rankings and traffic data for the web pages of the specified domain",
      "resource": "google"
    },
    {
      "name": "Get Domain Rank Overview",
      "value": "get-domain-rank-overview",
      "action": "Get domain rank overview",
      "description": "Get ranking and traffic data from organic search for a domain",
      "resource": "google"
    },
    {
      "name": "Get Historical SERPs",
      "value": "get-historical-serps",
      "action": "Get historical serps",
      "description": "Get Google SERPs collected within the specified time frame",
      "resource": "google"
    },
    {
      "name": "Get Historical Rank Overview",
      "value": "get-historical-rank-overview",
      "action": "Get historical rank overview",
      "description": "Get historical data on rankings and traffic of the specified domain, such as domain ranking distribution in SERPs and estimated monthly traffic volume for both organic and paid results",
      "resource": "google"
    },
    {
      "name": "Get Page Intersection",
      "value": "get-page-intersection",
      "action": "Get page intersection",
      "description": "Get the keywords for which specified pages rank within the same SERP",
      "resource": "google"
    },
    {
      "name": "Get Bulk Traffic Estimation",
      "value": "get-bulk-traffic-estimation",
      "action": "Get bulk traffic estimation",
      "description": "Get estimated monthly traffic volumes for up to 1,000 domains, subdomains, or webpages",
      "resource": "google"
    },
    {
      "name": "Get Historical Bulk Traffic Estimation",
      "value": "get-historical-bulk-traffic-estimation",
      "action": "Get historical bulk traffic estimation",
      "description": "Get historical monthly traffic volumes for up to 1,000 domains collected within the specified time range through October 2020",
      "resource": "google"
    },
    {
      "name": "Get Bulk Search Volume",
      "value": "get-bulk-search-volume",
      "action": "Get bulk search volume",
      "description": "Get search volume values for a maximum of 1,000 keywords in one API request",
      "resource": "amazon"
    },
    {
      "name": "Get Related Keywords",
      "value": "get-amazon-related-keywords",
      "action": "Get related keywords",
      "description": "Get keywords appearing in the \"Related Searches\" section on Amazon",
      "resource": "amazon"
    },
    {
      "name": "Get Ranked Keywords",
      "value": "get-amazon-ranked-keywords",
      "action": "Get ranked keywords",
      "description": "Get the list of keywords the target product ranks for on Amazon",
      "resource": "amazon"
    },
    {
      "name": "Get Product Rank Overview",
      "value": "get-product-rank-overview",
      "action": "Get product rank overview",
      "description": "Get ranking data from organic and paid Amazon SERPs for the target products",
      "resource": "amazon"
    },
    {
      "name": "Get Product Competitors",
      "value": "get-product-competitors",
      "action": "Get product competitors",
      "description": "Get a list of products that intersect with a target asin in Amazon SERPs",
      "resource": "amazon"
    },
    {
      "name": "Get Product Keyword Intersections",
      "value": "get-product-keyword-intersections",
      "action": "Get product keyword intersections",
      "description": "Get a list of keywords for which the target products intersect in Amazon SERP",
      "resource": "amazon"
    },
    {
      "name": "Get Bulk Keyword Difficulty",
      "value": "get-bing-bulk-keyword-difficulty",
      "action": "Get bulk keyword difficulty",
      "description": "Get the Keyword Difficulty metric for a maximum of 1,000 keywords",
      "resource": "bing"
    },
    {
      "name": "Get Bulk Traffic Estimation",
      "value": "get-bing-bulk-traffic-estimation",
      "action": "Get bulk traffic estimation",
      "description": "Get estimated monthly traffic volumes for up to 1,000 domains, subdomains, and pages",
      "resource": "bing"
    },
    {
      "name": "Get Competitors Domain",
      "value": "get-bing-competitors-domain",
      "action": "Get competitor domain",
      "description": "Get a full overview of ranking and traffic data of the competitor domains from organic and paid search",
      "resource": "bing"
    },
    {
      "name": "Get Domain Intersection",
      "value": "get-bing-domain-intersection",
      "action": "Get domain intersection",
      "description": "Get the keywords for which both specified domains rank within the same SERP",
      "resource": "bing"
    },
    {
      "name": "Get Domain Rank Overview",
      "value": "get-bing-domain-rank-overview",
      "action": "Get domain rank overview",
      "description": "Get ranking and traffic data from Bing’s organic and paid search for the specified domain",
      "resource": "bing"
    },
    {
      "name": "Get Page Intersection",
      "value": "get-bing-page-intersection",
      "action": "Get page intersection",
      "description": "Get keywords for which specified pages rank within the same Bing SERP",
      "resource": "bing"
    },
    {
      "name": "Get Related Keywords",
      "value": "get-bing-related-keywords",
      "action": "Get related keywords",
      "description": "Get keywords appearing in the “searches related to” SERP element",
      "resource": "bing"
    },
    {
      "name": "Get Relevant Pages",
      "value": "get-bing-relevant-pages",
      "action": "Get relevant pages",
      "description": "Get rankings and traffic data for the web pages of the specified domain",
      "resource": "bing"
    },
    {
      "name": "Get SERP Competitors",
      "value": "get-bing-serp-competitors",
      "action": "Get SERP competitors",
      "description": "Get a list of domain rankings for the keywords you specify",
      "resource": "bing"
    },
    {
      "name": "Get Subdomains",
      "value": "get-bing-subdomains",
      "action": "Get subdomains",
      "description": "Get a list of subdomains of the specified domain, along with the ranking distribution across organic and paid search",
      "resource": "bing"
    },
    {
      "name": "Get Bulk App Metrics",
      "value": "get-google-play-bulk-app-metrics",
      "action": "Get bulk app metrics",
      "description": "Get ranking metrics for up to 1000 Google Play applications",
      "resource": "google_play"
    },
    {
      "name": "Get Keywords for App",
      "value": "get-google-play-keywords-for-app",
      "action": "Get keywords for app",
      "description": "Get a list of keywords for which the target app ranks on Google Play",
      "resource": "google_play"
    },
    {
      "name": "Get App Competitors",
      "value": "get-google-play-app-competitors",
      "action": "Get app competitors",
      "description": "Get a list of mobile applications that intersect with the target app for its ranking keywords on Google Play",
      "resource": "google_play"
    },
    {
      "name": "Get App Intersection",
      "value": "get-google-play-app-intersection",
      "action": "Get app intersection",
      "description": "Get a list of keywords for which the mobile applications specified in the app_ids object rank within the same Google Play SERP",
      "resource": "google_play"
    },
    {
      "name": "Get Bulk App Metrics",
      "value": "get-app-store-bulk-app-metrics",
      "action": "Get bulk app metrics",
      "description": "Get ranking metrics for up to 1000 App Store applications",
      "resource": "app_store"
    },
    {
      "name": "Get Keywords for App",
      "value": "get-app-store-keywords-for-app",
      "action": "Get keywords for app",
      "description": "Get a list of keywords for which the target app ranks on App Store",
      "resource": "app_store"
    },
    {
      "name": "Get App Competitors",
      "value": "get-app-store-app-competitors",
      "action": "Get app competitors",
      "description": "Get a list of mobile applications that intersect with the target app for its ranking keywords on App Store",
      "resource": "app_store"
    },
    {
      "name": "Get App Intersection",
      "value": "get-app-store-app-intersection",
      "action": "Get app intersection",
      "description": "Get a list of keywords for which the mobile applications specified in the app_ids object rank within the same App Store SERP",
      "resource": "app_store"
    }
  ]

npm_readme:
[cell repeats an earlier one in this file: 56802 characters]

ai_documentation_summary:
  {"purpose":"Retrieves marketing and SEO data, including Google rankings, keyword suggestions, and backlink reports, via the DataForSEO API.","capabilities":["Get Live Google Organic SERP Regular","Get Live Google Organic SERP Advanced","Get Live Google Organic SERP HTML","Get Google Organic SERP Regular","Get Google Organic SERP Advanced","Get Google Organic SERP HTML","Get Live Google AI Mode SERP Advanced","Get Live Google AI Mode SERP HTML","Get Google AI Mode SERP Advanced","Get Google AI Mode SERP HTML"],"authentication":"API Login and API Password required","commonUseCases":["Retrieve live Google search engine results pages (SERP)","Analyze keyword suggestions and autocomplete data","Generate backlink reports","Monitor local search rankings","Extract news and image search results"],"limitations":["Requires a paid DataForSEO account to obtain API credentials","API password is only visible for 24 hours after initial registration"],"relatedNodes":[]}


node_type: n8n-nodes-hacknotice-api.hackNotice
package_name: n8n-nodes-hacknotice-api
display_name: HackNotice
description: Call the HackNotice extensions API (alerts, assessments, and more)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: nspessot
author_github_url: https://github.com/HackNotice/n8n-nodes-hacknotice.git
npm_package_name: n8n-nodes-hacknotice-api
npm_version: 3.0.4
community_fetched_at: 2026-07-14T14:40:34.032Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "thirdPartyAlerts",
      "options": [
        {
          "name": "Assessment",
          "value": "assessment"
        },
        {
          "name": "Assessment Data File",
          "value": "assessmentDataFile"
        },
        {
          "name": "Assessment Data File (Invited)",
          "value": "invitedAssessmentDataFile"
        },
        {
          "name": "Assessment Event",
          "value": "assessmentEvent"
        },
        {
          "name": "Assessment Invite",
          "value": "assessmentInvite"
        },
        {
          "name": "Assessment Preference",
          "value": "assessmentPreference"
        },
        {
          "name": "Assessment Template",
          "value": "assessmentTemplate"
        },
        {
          "name": "Chatter",
          "value": "chatter"
        },
        {
          "name": "End User",
          "value": "endUserAlerts"
        },
        {
          "name": "End User Watchlist",
          "value": "endUserWatchlist"
        },
        {
          "name": "First Party Alert",
          "value": "firstPartyAlerts"
        },
        {
          "name": "First Party Watchlist",
          "value": "firstPartyWatchlist"
        },
        {
          "name": "Leak File Search",
          "value": "leakFileSearch"
        },
        {
          "name": "Research",
          "value": "research"
        },
        {
          "name": "Third Party Alert",
          "value": "thirdPartyAlerts"
        },
        {
          "name": "Third Party Watchlist",
          "value": "thirdPartyWatchlist"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Count",
          "value": "count",
          "action": "Count chatter results",
          "description": "Count matching chatter posts"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search chatter",
          "description": "Search matching chatter posts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chatter"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Count",
          "value": "count",
          "action": "Count leak file search results",
          "description": "Count matching leak files"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search leak files",
          "description": "Search matching leak files"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "leakFileSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getThirdPartyAlerts",
      "options": [
        {
          "name": "Get Third Party Alerts",
          "value": "getThirdPartyAlerts",
          "action": "Get third party alerts",
          "description": "Get third party alerts from the HackNotice API"
        },
        {
          "name": "Get Third Party Alert Count",
          "value": "getThirdPartyAlertCount",
          "action": "Get third party alert count",
          "description": "Get the number of third party alerts matching the selected filters"
        },
        {
          "name": "Get Saved Search Filters",
          "value": "getSavedSearchFilters",
          "action": "Get third party saved search filters",
          "description": "Get the normalized filter JSON for a third party saved search"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "thirdPartyAlerts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getFirstPartyAlerts",
      "options": [
        {
          "name": "Get Many First Party Alerts",
          "value": "getFirstPartyAlerts",
          "action": "Get first party alerts",
          "description": "Get first party alerts from the HackNotice API"
        },
        {
          "name": "Get First Party Alert Count",
          "value": "getFirstPartyAlertCount",
          "action": "Get first party alert count",
          "description": "Get the number of first party alerts matching the selected filters"
        },
        {
          "name": "Get Saved Search Filters",
          "value": "getSavedSearchFilters",
          "action": "Get first party saved search filters",
          "description": "Get the normalized filter JSON for a first party saved search"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "firstPartyAlerts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getWatchlistItems",
      "options": [
        {
          "name": "Create Item",
          "value": "createItem",
          "action": "Create item",
          "description": "Add a domain to the first-party watchlist"
        },
        {
          "name": "Delete by ID",
          "value": "deleteById",
          "action": "Delete by ID",
          "description": "Delete a first-party watchlist item by document ID"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get by ID",
          "description": "Get a first-party watchlist item by document ID"
        },
        {
          "name": "Get Watchlist Items",
          "value": "getWatchlistItems",
          "action": "Get watchlist items",
          "description": "Read a page of first-party watchlist domains"
        },
        {
          "name": "Search Item",
          "value": "searchItem",
          "action": "Search item",
          "description": "Search the first-party watchlist for a domain"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "firstPartyWatchlist"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPhraseAlerts",
      "options": [
        {
          "name": "Get Phrase Alert Count",
          "value": "getPhraseAlertCount",
          "action": "Get phrase or filename research alert count",
          "description": "Get the number of phrase or filename research alerts matching the selected filters"
        },
        {
          "name": "Get Phrase Alerts",
          "value": "getPhraseAlerts",
          "action": "Get phrase or filename research alerts",
          "description": "Uses research8 phrase/filename search (saved searches from phrase search UI)"
        },
        {
          "name": "Get Saved Search Filters",
          "value": "getSavedSearchFilters",
          "action": "Get research saved search filters",
          "description": "Get the normalized filter JSON for a research saved search"
        },
        {
          "name": "Get Wordpool Alert Count",
          "value": "getWordpoolAlertCount",
          "action": "Get word pool research alert count",
          "description": "Get the number of word pool research alerts matching the selected filters"
        },
        {
          "name": "Get Wordpool Alerts",
          "value": "getWordpoolAlerts",
          "action": "Get word pool research alerts",
          "description": "Uses research8 word pool search (saved searches from word pool UI)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "research"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getEndUserAlerts",
      "options": [
        {
          "name": "Get End User Alerts",
          "value": "getEndUserAlerts",
          "action": "Get end user alerts",
          "description": "Get end user alerts from the HackNotice API"
        },
        {
          "name": "Get End User Alert Count",
          "value": "getEndUserAlertCount",
          "action": "Get end user alert count",
          "description": "Get the number of end user alerts matching the selected filters"
        },
        {
          "name": "Get Saved Search Filters",
          "value": "getSavedSearchFilters",
          "action": "Get end user saved search filters",
          "description": "Get the normalized filter JSON for an end user saved search"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "endUserAlerts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add Item to Watchlist",
          "value": "addItemToWatchlist",
          "action": "Add item to watchlist",
          "description": "Add an email or hash to the end user watchlist"
        },
        {
          "name": "Delete by ID",
          "value": "deleteById",
          "action": "Delete by ID",
          "description": "Delete an end user watchlist item by document ID"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get by ID",
          "description": "Get an end user watchlist item by document ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many",
          "description": "Read a page of end user watchlist items"
        },
        {
          "name": "Search for Email",
          "value": "searchForEmail",
          "action": "Search for email",
          "description": "Search the end user watchlist for an email address or hash"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "endUserWatchlist"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getWatchlistDomains",
      "options": [
        {
          "name": "Delete by ID",
          "value": "deleteById",
          "action": "Delete by ID",
          "description": "Delete a third-party watchlist domain by document ID"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get by ID",
          "description": "Get a third-party watchlist domain by document ID"
        },
        {
          "name": "Get Watchlist Domains",
          "value": "getWatchlistDomains",
          "action": "Get watchlist domains",
          "description": "Read a page of third-party watchlist domains from the HackNotice API"
        },
        {
          "name": "Search Domain",
          "value": "searchDomain",
          "action": "Search domain",
          "description": "Search the third-party watchlist for a domain"
        },
        {
          "name": "Update by ID",
          "value": "updateById",
          "action": "Update by ID",
          "description": "Update third-party watchlist domain tags by document ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "thirdPartyWatchlist"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAssessmentInvite",
      "options": [
        {
          "name": "Get Assessment Invite",
          "value": "getAssessmentInvite",
          "action": "Get Assessment Invite",
          "description": "GET /assessments/invited/:docId"
        },
        {
          "name": "Update Assessment Invite",
          "value": "updateAssessmentInvite",
          "action": "Update Assessment Invite",
          "description": "PUT /assessments/invited/:docId"
        },
        {
          "name": "List Assessments (Page)",
          "value": "listAssessmentsPage",
          "action": "List Assessments (Page)",
          "description": "POST /assessments/page/:pageNum"
        },
        {
          "name": "Count Assessments",
          "value": "countAssessments",
          "action": "Count Assessments",
          "description": "POST /assessments/count"
        },
        {
          "name": "Create Assessment",
          "value": "createAssessment",
          "action": "Create Assessment",
          "description": "POST /assessments"
        },
        {
          "name": "Get Assessment",
          "value": "getAssessment",
          "action": "Get Assessment",
          "description": "GET /assessments/:docId"
        },
        {
          "name": "Projection Assessments",
          "value": "projectionAssessments",
          "action": "Projection Assessments",
          "description": "POST /assessments/projection"
        },
        {
          "name": "Delete Assessment",
          "value": "deleteAssessment",
          "action": "Delete Assessment",
          "description": "DELETE /assessments/:docId"
        },
        {
          "name": "Update Assessment",
          "value": "updateAssessment",
          "action": "Update Assessment",
          "description": "PUT /assessments/:docId"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "assessment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "invitedListEventsPage",
      "options": [
        {
          "name": "Invited — List Events (Page)",
          "value": "invitedListEventsPage",
          "action": "Invited — List Events (Page)",
          "description": "POST /assessmentevents/invited/page/:pageNum"
        },
        {
          "name": "Invited — Create Event",
          "value": "invitedCreateEvent",
          "action": "Invited — Create Event",
          "description": "POST /assessmentevents/invited"
        },
        {
          "name": "Invited — Get Event",
          "value": "invitedGetEvent",
          "action": "Invited — Get Event",
          "description": "GET /assessmentevents/invited/:docId"
        },
        {
          "name": "Invited — Delete Event",
          "value": "invitedDeleteEvent",
          "action": "Invited — Delete Event",
          "description": "DELETE /assessmentevents/invited/:docId"
        },
        {
          "name": "Invited — Update Event",
          "value": "invitedUpdateEvent",
          "action": "Invited — Update Event",
          "description": "PUT /assessmentevents/invited/:docId"
        },
        {
          "name": "List Events (Page)",
          "value": "listEventsPage",
          "action": "List Events (Page)",
          "description": "POST /assessmentevents/page/:pageNum"
        },
        {
          "name": "Count Events",
          "value": "countEvents",
          "action": "Count Events",
          "description": "POST /assessmentevents/count"
        },
        {
          "name": "Create Event",
          "value": "createEvent",
          "action": "Create Event",
          "description": "POST /assessmentevents"
        },
        {
          "name": "Get Event",
          "value": "getEvent",
          "action": "Get Event",
          "description": "GET /assessmentevents/:docId"
        },
        {
          "name": "Delete Event",
          "value": "deleteEvent",
          "action": "Delete Event",
          "description": "DELETE /assessmentevents/:docId"
        },
        {
          "name": "Update Event",
          "value": "updateEvent",
          "action": "Update Event",
          "description": "PUT /assessmentevents/:docId"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "assessmentEvent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listTemplatesPage",
      "options": [
        {
          "name": "List Templates (Page)",
          "value": "listTemplatesPage",
          "action": "List Templates (Page)",
          "description": "POST /assessmenttemplates/page/:pageNum"
        },
        {
          "name": "List Template Frameworks",
          "value": "listTemplateFrameworks",
          "action": "List Template Frameworks",
          "description": "GET /assessmenttemplates/frameworks"
        },
        {
          "name": "Count Templates",
          "value": "countTemplates",
          "action": "Count Templates",
          "description": "POST /assessmenttemplates/count"
        },
        {
          "name": "Create Template",
          "value": "createTemplate",
          "action": "Create Template",
          "description": "POST /assessmenttemplates"
        },
        {
          "name": "Get Template",
          "value": "getTemplate",
          "action": "Get Template",
          "description": "GET /assessmenttemplates/:docId"
        },
        {
          "name": "Delete Template",
          "value": "deleteTemplate",
          "action": "Delete Template",
          "description": "DELETE /assessmenttemplates/:docId"
        },
        {
          "name": "Update Template",
          "value": "updateTemplate",
          "action": "Update Template",
          "description": "PUT /assessmenttemplates/:docId"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "assessmentTemplate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createPreferences",
      "options": [
        {
          "name": "Create Preferences",
          "value": "createPreferences",
          "action": "Create Preferences",
          "description": "POST /assessmentpreferences"
        },
        {
          "name": "Get Preferences",
          "value": "getPreferences",
          "action": "Get Preferences",
          "description": "GET /assessmentpreferences"
        },
        {
          "name": "Delete Preferences",
          "value": "deletePreferences",
          "action": "Delete Preferences",
          "description": "DELETE /assessmentpreferences"
        },
        {
          "name": "Update Preferences",
          "value": "updatePreferences",
          "action": "Update Preferences",
          "description": "PUT /assessmentpreferences"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "assessmentPreference"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listInvitesPage",
      "options": [
        {
          "name": "List Invites (Page)",
          "value": "listInvitesPage",
          "action": "List Invites (Page)",
          "description": "POST /assessmentinvites/page/:pageNum"
        },
        {
          "name": "Count Invites",
          "value": "countInvites",
          "action": "Count Invites",
          "description": "POST /assessmentinvites/count"
        },
        {
          "name": "Create Invite",
          "value": "createInvite",
          "action": "Create Invite",
          "description": "POST /assessmentinvites"
        },
        {
          "name": "Get Invite",
          "value": "getInvite",
          "action": "Get Invite",
          "description": "GET /assessmentinvites/:docId"
        },
        {
          "name": "List My Invites",
          "value": "listMyInvites",
          "action": "List My Invites",
          "description": "GET /assessmentinvites/mine"
        },
        {
          "name": "Get Invite by Code",
          "value": "getInviteByCode",
          "action": "Get Invite by Code",
          "description": "GET /assessmentinvites/code/:inviteCode"
        },
        {
          "name": "Activate Invite",
          "value": "activateInvite",
          "action": "Activate Invite",
          "description": "POST /assessmentinvites/activate/:inviteCode"
        },
        {
          "name": "Delete Invite",
          "value": "deleteInvite",
          "action": "Delete Invite",
          "description": "DELETE /assessmentinvites/:docId"
        },
        {
          "name": "Update Invite",
          "value": "updateInvite",
          "action": "Update Invite",
          "description": "PUT /assessmentinvites/:docId"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "assessmentInvite"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listFilesPage",
      "options": [
        {
          "name": "List Files (Page)",
          "value": "listFilesPage",
          "action": "List Files (Page)",
          "description": "POST /assessmentdatafiles/page/:pageNum"
        },
        {
          "name": "Count Files",
          "value": "countFiles",
          "action": "Count Files",
          "description": "POST /assessmentdatafiles/count"
        },
        {
          "name": "Get File Metadata",
          "value": "getFile",
          "action": "Get File Metadata",
          "description": "GET /assessmentdatafiles/:docId"
        },
        {
          "name": "Update File Metadata",
          "value": "updateFile",
          "action": "Update File Metadata",
          "description": "PUT /assessmentdatafiles/:docId"
        },
        {
          "name": "Download File",
          "value": "downloadFile",
          "action": "Download File",
          "description": "GET /assessmentdatafiles/download/:docId"
        },
        {
          "name": "Delete File",
          "value": "deleteFile",
          "action": "Delete File",
          "description": "DELETE /assessmentdatafiles/:docId"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "assessmentDataFile"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadInvitedFile",
      "options": [
        {
          "name": "Upload File (Invited)",
          "value": "uploadInvitedFile",
          "action": "Upload File (Invited)",
          "description": "POST /assessmentdatafiles/invited"
        },
        {
          "name": "List Files (Page, Invited)",
          "value": "listInvitedFilesPage",
          "action": "List Files (Page, Invited)",
          "description": "POST /assessmentdatafiles/invited/page/:pageNum"
        },
        {
          "name": "Count Files (Invited)",
          "value": "countInvitedFiles",
          "action": "Count Files (Invited)",
          "description": "POST /assessmentdatafiles/invited/count"
        },
        {
          "name": "Get File Metadata (Invited)",
          "value": "getInvitedFile",
          "action": "Get File Metadata (Invited)",
          "description": "GET /assessmentdatafiles/invited/:docId"
        },
        {
          "name": "Download File (Invited)",
          "value": "downloadInvitedFile",
          "action": "Download File (Invited)",
          "description": "GET /assessmentdatafiles/invited/download/:docId"
        },
        {
          "name": "Delete File (Invited)",
          "value": "deleteInvitedFile",
          "action": "Delete File (Invited)",
          "description": "DELETE /assessmentdatafiles/invited/:docId"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invitedAssessmentDataFile"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Count",
      "value": "count",
      "action": "Count chatter results",
      "description": "Count matching chatter posts",
      "resource": "chatter"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search chatter",
      "description": "Search matching chatter posts",
      "resource": "chatter"
    },
    {
      "name": "Count",
      "value": "count",
      "action": "Count leak file search results",
      "description": "Count matching leak files",
      "resource": "leakFileSearch"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search leak files",
      "description": "Search matching leak files",
      "resource": "leakFileSearch"
    },
    {
      "name": "Get Third Party Alerts",
      "value": "getThirdPartyAlerts",
      "action": "Get third party alerts",
      "description": "Get third party alerts from the HackNotice API",
      "resource": "thirdPartyAlerts"
    },
    {
      "name": "Get Third Party Alert Count",
      "value": "getThirdPartyAlertCount",
      "action": "Get third party alert count",
      "description": "Get the number of third party alerts matching the selected filters",
      "resource": "thirdPartyAlerts"
    },
    {
      "name": "Get Saved Search Filters",
      "value": "getSavedSearchFilters",
      "action": "Get third party saved search filters",
      "description": "Get the normalized filter JSON for a third party saved search",
      "resource": "thirdPartyAlerts"
    },
    {
      "name": "Get Many First Party Alerts",
      "value": "getFirstPartyAlerts",
      "action": "Get first party alerts",
      "description": "Get first party alerts from the HackNotice API",
      "resource": "firstPartyAlerts"
    },
    {
      "name": "Get First Party Alert Count",
      "value": "getFirstPartyAlertCount",
      "action": "Get first party alert count",
      "description": "Get the number of first party alerts matching the selected filters",
      "resource": "firstPartyAlerts"
    },
    {
      "name": "Get Saved Search Filters",
      "value": "getSavedSearchFilters",
      "action": "Get first party saved search filters",
      "description": "Get the normalized filter JSON for a first party saved search",
      "resource": "firstPartyAlerts"
    },
    {
      "name": "Create Item",
      "value": "createItem",
      "action": "Create item",
      "description": "Add a domain to the first-party watchlist",
      "resource": "firstPartyWatchlist"
    },
    {
      "name": "Delete by ID",
      "value": "deleteById",
      "action": "Delete by ID",
      "description": "Delete a first-party watchlist item by document ID",
      "resource": "firstPartyWatchlist"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get by ID",
      "description": "Get a first-party watchlist item by document ID",
      "resource": "firstPartyWatchlist"
    },
    {
      "name": "Get Watchlist Items",
      "value": "getWatchlistItems",
      "action": "Get watchlist items",
      "description": "Read a page of first-party watchlist domains",
      "resource": "firstPartyWatchlist"
    },
    {
      "name": "Search Item",
      "value": "searchItem",
      "action": "Search item",
      "description": "Search the first-party watchlist for a domain",
      "resource": "firstPartyWatchlist"
    },
    {
      "name": "Get Phrase Alert Count",
      "value": "getPhraseAlertCount",
      "action": "Get phrase or filename research alert count",
      "description": "Get the number of phrase or filename research alerts matching the selected filters",
      "resource": "research"
    },
    {
      "name": "Get Phrase Alerts",
      "value": "getPhraseAlerts",
      "action": "Get phrase or filename research alerts",
      "description": "Uses research8 phrase/filename search (saved searches from phrase search UI)",
      "resource": "research"
    },
    {
      "name": "Get Saved Search Filters",
      "value": "getSavedSearchFilters",
      "action": "Get research saved search filters",
      "description": "Get the normalized filter JSON for a research saved search",
      "resource": "research"
    },
    {
      "name": "Get Wordpool Alert Count",
      "value": "getWordpoolAlertCount",
      "action": "Get word pool research alert count",
      "description": "Get the number of word pool research alerts matching the selected filters",
      "resource": "research"
    },
    {
      "name": "Get Wordpool Alerts",
      "value": "getWordpoolAlerts",
      "action": "Get word pool research alerts",
      "description": "Uses research8 word pool search (saved searches from word pool UI)",
      "resource": "research"
    },
    {
      "name": "Get End User Alerts",
      "value": "getEndUserAlerts",
      "action": "Get end user alerts",
      "description": "Get end user alerts from the HackNotice API",
      "resource": "endUserAlerts"
    },
    {
      "name": "Get End User Alert Count",
      "value": "getEndUserAlertCount",
      "action": "Get end user alert count",
      "description": "Get the number of end user alerts matching the selected filters",
      "resource": "endUserAlerts"
    },
    {
      "name": "Get Saved Search Filters",
      "value": "getSavedSearchFilters",
      "action": "Get end user saved search filters",
      "description": "Get the normalized filter JSON for an end user saved search",
      "resource": "endUserAlerts"
    },
    {
      "name": "Add Item to Watchlist",
      "value": "addItemToWatchlist",
      "action": "Add item to watchlist",
      "description": "Add an email or hash to the end user watchlist",
      "resource": "endUserWatchlist"
    },
    {
      "name": "Delete by ID",
      "value": "deleteById",
      "action": "Delete by ID",
      "description": "Delete an end user watchlist item by document ID",
      "resource": "endUserWatchlist"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get by ID",
      "description": "Get an end user watchlist item by document ID",
      "resource": "endUserWatchlist"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "description": "Read a page of end user watchlist items",
      "resource": "endUserWatchlist"
    },
    {
      "name": "Search for Email",
      "value": "searchForEmail",
      "action": "Search for email",
      "description": "Search the end user watchlist for an email address or hash",
      "resource": "endUserWatchlist"
    },
    {
      "name": "Delete by ID",
      "value": "deleteById",
      "action": "Delete by ID",
      "description": "Delete a third-party watchlist domain by document ID",
      "resource": "thirdPartyWatchlist"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get by ID",
      "description": "Get a third-party watchlist domain by document ID",
      "resource": "thirdPartyWatchlist"
    },
    {
      "name": "Get Watchlist Domains",
      "value": "getWatchlistDomains",
      "action": "Get watchlist domains",
      "description": "Read a page of third-party watchlist domains from the HackNotice API",
      "resource": "thirdPartyWatchlist"
    },
    {
      "name": "Search Domain",
      "value": "searchDomain",
      "action": "Search domain",
      "description": "Search the third-party watchlist for a domain",
      "resource": "thirdPartyWatchlist"
    },
    {
      "name": "Update by ID",
      "value": "updateById",
      "action": "Update by ID",
      "description": "Update third-party watchlist domain tags by document ID",
      "resource": "thirdPartyWatchlist"
    },
    {
      "name": "Get Assessment Invite",
      "value": "getAssessmentInvite",
      "action": "Get Assessment Invite",
      "description": "GET /assessments/invited/:docId",
      "resource": "assessment"
    },
    {
      "name": "Update Assessment Invite",
      "value": "updateAssessmentInvite",
      "action": "Update Assessment Invite",
      "description": "PUT /assessments/invited/:docId",
      "resource": "assessment"
    },
    {
      "name": "List Assessments (Page)",
      "value": "listAssessmentsPage",
      "action": "List Assessments (Page)",
      "description": "POST /assessments/page/:pageNum",
      "resource": "assessment"
    },
    {
      "name": "Count Assessments",
      "value": "countAssessments",
      "action": "Count Assessments",
      "description": "POST /assessments/count",
      "resource": "assessment"
    },
    {
      "name": "Create Assessment",
      "value": "createAssessment",
      "action": "Create Assessment",
      "description": "POST /assessments",
      "resource": "assessment"
    },
    {
      "name": "Get Assessment",
      "value": "getAssessment",
      "action": "Get Assessment",
      "description": "GET /assessments/:docId",
      "resource": "assessment"
    },
    {
      "name": "Projection Assessments",
      "value": "projectionAssessments",
      "action": "Projection Assessments",
      "description": "POST /assessments/projection",
      "resource": "assessment"
    },
    {
      "name": "Delete Assessment",
      "value": "deleteAssessment",
      "action": "Delete Assessment",
      "description": "DELETE /assessments/:docId",
      "resource": "assessment"
    },
    {
      "name": "Update Assessment",
      "value": "updateAssessment",
      "action": "Update Assessment",
      "description": "PUT /assessments/:docId",
      "resource": "assessment"
    },
    {
      "name": "Invited — List Events (Page)",
      "value": "invitedListEventsPage",
      "action": "Invited — List Events (Page)",
      "description": "POST /assessmentevents/invited/page/:pageNum",
      "resource": "assessmentEvent"
    },
    {
      "name": "Invited — Create Event",
      "value": "invitedCreateEvent",
      "action": "Invited — Create Event",
      "description": "POST /assessmentevents/invited",
      "resource": "assessmentEvent"
    },
    {
      "name": "Invited — Get Event",
      "value": "invitedGetEvent",
      "action": "Invited — Get Event",
      "description": "GET /assessmentevents/invited/:docId",
      "resource": "assessmentEvent"
    },
    {
      "name": "Invited — Delete Event",
      "value": "invitedDeleteEvent",
      "action": "Invited — Delete Event",
      "description": "DELETE /assessmentevents/invited/:docId",
      "resource": "assessmentEvent"
    },
    {
      "name": "Invited — Update Event",
      "value": "invitedUpdateEvent",
      "action": "Invited — Update Event",
      "description": "PUT /assessmentevents/invited/:docId",
      "resource": "assessmentEvent"
    },
    {
      "name": "List Events (Page)",
      "value": "listEventsPage",
      "action": "List Events (Page)",
      "description": "POST /assessmentevents/page/:pageNum",
      "resource": "assessmentEvent"
    },
    {
      "name": "Count Events",
      "value": "countEvents",
      "action": "Count Events",
      "description": "POST /assessmentevents/count",
      "resource": "assessmentEvent"
    },
    {
      "name": "Create Event",
      "value": "createEvent",
      "action": "Create Event",
      "description": "POST /assessmentevents",
      "resource": "assessmentEvent"
    },
    {
      "name": "Get Event",
      "value": "getEvent",
      "action": "Get Event",
      "description": "GET /assessmentevents/:docId",
      "resource": "assessmentEvent"
    },
    {
      "name": "Delete Event",
      "value": "deleteEvent",
      "action": "Delete Event",
      "description": "DELETE /assessmentevents/:docId",
      "resource": "assessmentEvent"
    },
    {
      "name": "Update Event",
      "value": "updateEvent",
      "action": "Update Event",
      "description": "PUT /assessmentevents/:docId",
      "resource": "assessmentEvent"
    },
    {
      "name": "List Templates (Page)",
      "value": "listTemplatesPage",
      "action": "List Templates (Page)",
      "description": "POST /assessmenttemplates/page/:pageNum",
      "resource": "assessmentTemplate"
    },
    {
      "name": "List Template Frameworks",
      "value": "listTemplateFrameworks",
      "action": "List Template Frameworks",
      "description": "GET /assessmenttemplates/frameworks",
      "resource": "assessmentTemplate"
    },
    {
      "name": "Count Templates",
      "value": "countTemplates",
      "action": "Count Templates",
      "description": "POST /assessmenttemplates/count",
      "resource": "assessmentTemplate"
    },
    {
      "name": "Create Template",
      "value": "createTemplate",
      "action": "Create Template",
      "description": "POST /assessmenttemplates",
      "resource": "assessmentTemplate"
    },
    {
      "name": "Get Template",
      "value": "getTemplate",
      "action": "Get Template",
      "description": "GET /assessmenttemplates/:docId",
      "resource": "assessmentTemplate"
    },
    {
      "name": "Delete Template",
      "value": "deleteTemplate",
      "action": "Delete Template",
      "description": "DELETE /assessmenttemplates/:docId",
      "resource": "assessmentTemplate"
    },
    {
      "name": "Update Template",
      "value": "updateTemplate",
      "action": "Update Template",
      "description": "PUT /assessmenttemplates/:docId",
      "resource": "assessmentTemplate"
    },
    {
      "name": "Create Preferences",
      "value": "createPreferences",
      "action": "Create Preferences",
      "description": "POST /assessmentpreferences",
      "resource": "assessmentPreference"
    },
    {
      "name": "Get Preferences",
      "value": "getPreferences",
      "action": "Get Preferences",
      "description": "GET /assessmentpreferences",
      "resource": "assessmentPreference"
    },
    {
      "name": "Delete Preferences",
      "value": "deletePreferences",
      "action": "Delete Preferences",
      "description": "DELETE /assessmentpreferences",
      "resource": "assessmentPreference"
    },
    {
      "name": "Update Preferences",
      "value": "updatePreferences",
      "action": "Update Preferences",
      "description": "PUT /assessmentpreferences",
      "resource": "assessmentPreference"
    },
    {
      "name": "List Invites (Page)",
      "value": "listInvitesPage",
      "action": "List Invites (Page)",
      "description": "POST /assessmentinvites/page/:pageNum",
      "resource": "assessmentInvite"
    },
    {
      "name": "Count Invites",
      "value": "countInvites",
      "action": "Count Invites",
      "description": "POST /assessmentinvites/count",
      "resource": "assessmentInvite"
    },
    {
      "name": "Create Invite",
      "value": "createInvite",
      "action": "Create Invite",
      "description": "POST /assessmentinvites",
      "resource": "assessmentInvite"
    },
    {
      "name": "Get Invite",
      "value": "getInvite",
      "action": "Get Invite",
      "description": "GET /assessmentinvites/:docId",
      "resource": "assessmentInvite"
    },
    {
      "name": "List My Invites",
      "value": "listMyInvites",
      "action": "List My Invites",
      "description": "GET /assessmentinvites/mine",
      "resource": "assessmentInvite"
    },
    {
      "name": "Get Invite by Code",
      "value": "getInviteByCode",
      "action": "Get Invite by Code",
      "description": "GET /assessmentinvites/code/:inviteCode",
      "resource": "assessmentInvite"
    },
    {
      "name": "Activate Invite",
      "value": "activateInvite",
      "action": "Activate Invite",
      "description": "POST /assessmentinvites/activate/:inviteCode",
      "resource": "assessmentInvite"
    },
    {
      "name": "Delete Invite",
      "value": "deleteInvite",
      "action": "Delete Invite",
      "description": "DELETE /assessmentinvites/:docId",
      "resource": "assessmentInvite"
    },
    {
      "name": "Update Invite",
      "value": "updateInvite",
      "action": "Update Invite",
      "description": "PUT /assessmentinvites/:docId",
      "resource": "assessmentInvite"
    },
    {
      "name": "List Files (Page)",
      "value": "listFilesPage",
      "action": "List Files (Page)",
      "description": "POST /assessmentdatafiles/page/:pageNum",
      "resource": "assessmentDataFile"
    },
    {
      "name": "Count Files",
      "value": "countFiles",
      "action": "Count Files",
      "description": "POST /assessmentdatafiles/count",
      "resource": "assessmentDataFile"
    },
    {
      "name": "Get File Metadata",
      "value": "getFile",
      "action": "Get File Metadata",
      "description": "GET /assessmentdatafiles/:docId",
      "resource": "assessmentDataFile"
    },
    {
      "name": "Update File Metadata",
      "value": "updateFile",
      "action": "Update File Metadata",
      "description": "PUT /assessmentdatafiles/:docId",
      "resource": "assessmentDataFile"
    },
    {
      "name": "Download File",
      "value": "downloadFile",
      "action": "Download File",
      "description": "GET /assessmentdatafiles/download/:docId",
      "resource": "assessmentDataFile"
    },
    {
      "name": "Delete File",
      "value": "deleteFile",
      "action": "Delete File",
      "description": "DELETE /assessmentdatafiles/:docId",
      "resource": "assessmentDataFile"
    },
    {
      "name": "Upload File (Invited)",
      "value": "uploadInvitedFile",
      "action": "Upload File (Invited)",
      "description": "POST /assessmentdatafiles/invited",
      "resource": "invitedAssessmentDataFile"
    },
    {
      "name": "List Files (Page, Invited)",
      "value": "listInvitedFilesPage",
      "action": "List Files (Page, Invited)",
      "description": "POST /assessmentdatafiles/invited/page/:pageNum",
      "resource": "invitedAssessmentDataFile"
    },
    {
      "name": "Count Files (Invited)",
      "value": "countInvitedFiles",
      "action": "Count Files (Invited)",
      "description": "POST /assessmentdatafiles/invited/count",
      "resource": "invitedAssessmentDataFile"
    },
    {
      "name": "Get File Metadata (Invited)",
      "value": "getInvitedFile",
      "action": "Get File Metadata (Invited)",
      "description": "GET /assessmentdatafiles/invited/:docId",
      "resource": "invitedAssessmentDataFile"
    },
    {
      "name": "Download File (Invited)",
      "value": "downloadInvitedFile",
      "action": "Download File (Invited)",
      "description": "GET /assessmentdatafiles/invited/download/:docId",
      "resource": "invitedAssessmentDataFile"
    },
    {
      "name": "Delete File (Invited)",
      "value": "deleteInvitedFile",
      "action": "Delete File (Invited)",
      "description": "DELETE /assessmentdatafiles/invited/:docId",
      "resource": "invitedAssessmentDataFile"
    }
  ]

npm_readme:
  # n8n-nodes-hacknotice

  This is an n8n community node for [HackNotice](https://hacknotice.com/). It exposes the **HackNotice** node so you can call the HackNotice extensions API from workflows: third-party, first-party, and end-user alerts; research alerts; first-party, third-party, and end-user watchlists; and the assessments API family.

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

  ## Installation

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

  ## Published surface

  | Item | Name in n8n | Notes |
  |------|-------------|--------|
  | Node | **HackNotice** | Single regular node; pick a **Resource**, then an **Operation**. |
  | Credential | **HackNotice API** | Two authentication methods (see [Credentials](#credentials)). |

  ## Operations

  ### Alerts and research

  - **Third Party Alert** — Get Third Party Alerts  
  - **First Party Alert** — Get Many First Party Alerts  
  - **End User** — Get End User Alerts  
  - **Research** — Get Phrase Alerts; Get Wordpool Alerts  

  For the alert resources above, you can optionally select a **saved search**, and use **Limit by Time**: `Last Day`, `Last Week`, `Last Month`.

  ### Watchlists

  - **Third Party Watchlist** — Delete by ID; Get by ID; Get Watchlist Domains; Search Domain; Update by ID  
  - **First Party Watchlist** — Create Item; Delete by ID; Get by ID; Get Watchlist Items; Search Item  
  - **End User Watchlist** — Add Item to Watchlist; Delete by ID; Get by ID; Get Many; Search for Email  

  ### Assessments (extension API)

  Choose one of these **resources**, then pick an **operation** (each operation’s description in the node shows the HTTP method and path):

  - **Assessment** — Get Assessment Invite; Update Assessment Invite; List Assessments (Page); Count Assessments; Create Assessment; Get Assessment; Projection Assessments; Delete Assessment; Update Assessment  
  - **Assessment Event** — Invited — List Events (Page); Invited — Create Event; Invited — Get Event; Invited — Delete Event; Invited — Update Event; List Events (Page); Count Events; Create Event; Get Event; Delete Event; Update Event  
  - **Assessment Template** — List Templates (Page); List Template Frameworks; Count Templates; Create Template; Get Template; Delete Template; Update Template  
  - **Assessment Preference** — Create Preferences; Get Preferences; Delete Preferences; Update Preferences  
  - **Assessment Invite** — List Invites (Page); Count Invites; Create Invite; Get Invite; List My Invites; Get Invite by Code; Activate Invite; Delete Invite; Update Invite  
  - **Assessment Data File** — List Files (Page); Count Files; Get File Metadata; Update File Metadata; Download File; Delete File  
  - **Assessment Data File (Invited)** — Upload File (Invited); List Files (Page, Invited); Count Files (Invited); Get File Metadata (Invited); Download File (Invited); Delete File (Invited)  

  Assessment calls use shared fields such as **Document ID**, **Page Number**, **Invite Code**, and **Request Body** (JSON) where the API expects them; invited file upload uses the multipart fields shown in the node.

  ## Credentials

  Use the **HackNotice API** credential. Base URL for API traffic is `https://extensionapi.hacknotice.com`.

  ### API Key + Email + Password

  - **API Key** — Your HackNotice API key (sent as the `apikey` header).  
  - **Email** / **Password** — Used once per request flow to obtain a JWT via `POST /auth/sign_in`.  

  Successful requests send:

  - `apikey: <your API key>`  
  - `Authorization: JWT <token>`  

  ### Integration Key

  - **Integration Key** — Per-user integration secret from HackNotice.  

  Requests send:

  - `X-HackNotice-Integration-Key: <your integration key>`  

  No email/password or JWT is used for this method.

  API reference: [HackNotice API (Postman)](https://documenter.getpostman.com/view/806684/RWaHzA6C)

  ## Compatibility

  Compatible with n8n@1.60.0 or later.

  ## MCP and AI agents (separate package)

  n8n’s [community node verification rules](https://docs.n8n.io/integrations/creating-nodes/build/reference/verification-guidelines/#node-types) allow only **one** regular node per package. MCP client workflows are therefore shipped as a **separate** npm package: [`n8n-nodes-hacknotice-mcp`](https://www.npmjs.com/package/n8n-nodes-hacknotice-mcp) (repository: [github.com/HackNotice/n8n-nodes-hacknotice-mcp](https://github.com/HackNotice/n8n-nodes-hacknotice-mcp)). Install that package for the MCP-oriented node and credential; its README documents install steps, credential fields, and tool exposure. This repo remains the REST-oriented **HackNotice** node only.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [HackNotice API documentation](https://documenter.getpostman.com/view/806684/RWaHzA6C)

ai_documentation_summary:
  {"purpose":"Fetches security alerts from the HackNotice API, including third-party, first-party, end-user, and research alerts, to integrate threat intelligence into n8n workflows.","capabilities":["Get Third Party Alerts","Get Many First Party Alerts","Get End User Alerts","Get Phrase Alerts","Get Wordpool Alerts","Filter alerts by time range (Last Day, Last Week, Last Month)","Support for saved search selection"],"authentication":"API key required (with optional email/password for JWT token generation)","commonUseCases":["Real-time threat monitoring and alerting","Security incident response automation","Researching specific keywords or phrases in security feeds","Aggregating alerts from multiple sources into a central dashboard"],"limitations":["Requires a valid HackNotice API key and account","Limited to n8n version 1.60.0 or later","Time filtering options are restricted to predefined ranges (Last Day, Last Week, Last Month)"],"relatedNodes":[]}


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

updated_at: 2026-07-14 14:40:34
author_name: web.waboo
author_github_url: https://github.com/webwaboo/
npm_package_name: n8n-nodes-haloscan
npm_version: 2.0.11
community_fetched_at: 2026-07-14T14:40:34.034Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  Haloscan is a powerful SEO analysis tool that provides insights into keyword rankings, domain metrics, and related searches.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "keywordExplorer",
      "options": [
        {
          "name": "Keyword Explorer",
          "value": "keywordExplorer"
        },
        {
          "name": "Site Explorer",
          "value": "siteExplorer"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "GetUserCredit",
      "options": [
        {
          "name": "Get User Credit",
          "value": "GetUserCredit",
          "action": "Get user credit",
          "routing": {
            "request": {
              "url": "=/user/credit",
              "method": "GET"
            }
          },
          "description": "Retrieves the remaining credit for the current user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "GetKeywordOverview",
      "options": [
        {
          "name": "Compare Keywords SERP",
          "value": "CompareKeywordsSERP",
          "action": "Compare keywords SERP",
          "routing": {
            "request": {
              "url": "=/keywords/serp/compare",
              "body": {
                "period": "={{$parameter.period}}",
                "keyword": "={{$parameter.keyword}}",
                "first_date": "={{$parameter.first_date_compare}}",
                "second_date": "={{$parameter.second_date_compare}}"
              },
              "method": "POST"
            }
          },
          "description": "Compares SERPs for a given keyword"
        },
        {
          "name": "Find Keyword",
          "value": "FindKeyword",
          "action": "Find keyword",
          "routing": {
            "request": {
              "url": "=/keywords/find",
              "body": {
                "page": "={{$parameter.page}}",
                "order": "={{$parameter.order}}",
                "cpc_max": "={{$parameter.additionalFields_findKeyword.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields_findKeyword.cpc_min}}",
                "exclude": "={{$parameter.additionalFields_findKeyword.exclude}}",
                "include": "={{$parameter.additionalFields_findKeyword.include}}",
                "keyword": "={{$parameter.keyword_findKeyword}}",
                "kgr_max": "={{$parameter.additionalFields_findKeyword.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields_findKeyword.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields_findKeyword.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields_findKeyword.kvi_min}}",
                "keywords": "={{$parameter.keywords_findKeyword}}",
                "order_by": "={{$parameter.order_by_findKeyword}}",
                "keep_seed": "={{$parameter.keep_seed}}",
                "lineCount": "={{$parameter.lineCount}}",
                "volume_max": "={{$parameter.additionalFields_findKeyword.volume_max}}",
                "volume_min": "={{$parameter.additionalFields_findKeyword.volume_min}}",
                "exact_match": "={{$parameter.exact_match}}",
                "kvi_keep_na": "={{$parameter.additionalFields_findKeyword.kvi_keep_na}}",
                "allintitle_max": "={{$parameter.additionalFields_findKeyword.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields_findKeyword.allintitle_min}}",
                "competition_max": "={{$parameter.additionalFields_findKeyword.competition_max}}",
                "competition_min": "={{$parameter.additionalFields_findKeyword.competition_min}}",
                "keywords_sources": "={{$parameter.keywords_sources}}"
              },
              "method": "POST"
            }
          },
          "description": "Finds keywords based on a seed"
        },
        {
          "name": "Find Keyword Synonym",
          "value": "FindKeywordSynonym",
          "action": "Find keyword synonym",
          "routing": {
            "request": {
              "url": "=/keywords/synonyms",
              "body": {
                "page": "={{$parameter.page}}",
                "order": "={{$parameter.additionalFields.order}}",
                "cpc_max": "={{$parameter.additionalFields.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields.cpc_min}}",
                "exclude": "={{$parameter.additionalFields.exclude}}",
                "include": "={{$parameter.additionalFields.include}}",
                "keyword": "={{$parameter.keyword}}",
                "kgr_max": "={{$parameter.additionalFields.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields.kvi_min}}",
                "order_by": "={{$parameter.order_by_findSynoMatch}}",
                "lineCount": "={{$parameter.lineCount}}",
                "volume_max": "={{$parameter.additionalFields.volume_max}}",
                "volume_min": "={{$parameter.additionalFields.volume_min}}",
                "exact_match": "={{$parameter.exact_match}}",
                "kvi_keep_na": "={{$parameter.additionalFields.kvi_keep_na}}",
                "allintitle_max": "={{$parameter.additionalFields.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields.allintitle_min}}",
                "word_count_max": "={{$parameter.additionalFields.word_count_max}}",
                "word_count_min": "={{$parameter.additionalFields.word_count_min}}",
                "competition_max": "={{$parameter.additionalFields.competition_max}}",
                "competition_min": "={{$parameter.additionalFields.competition_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Finds synonyms for a keyword"
        },
        {
          "name": "Find Keywords Match",
          "value": "FindKeywordsMatch",
          "action": "Find keywords match",
          "routing": {
            "request": {
              "url": "=/keywords/match",
              "body": {
                "page": "={{$parameter.page}}",
                "order": "={{$parameter.additionalFields.order}}",
                "cpc_max": "={{$parameter.additionalFields.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields.cpc_min}}",
                "exclude": "={{$parameter.additionalFields.exclude}}",
                "include": "={{$parameter.additionalFields.include}}",
                "keyword": "={{$parameter.keyword}}",
                "kgr_max": "={{$parameter.additionalFields.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields.kvi_min}}",
                "order_by": "={{$parameter.order_by_findSynoMatch}}",
                "lineCount": "={{$parameter.lineCount}}",
                "volume_max": "={{$parameter.additionalFields.volume_max}}",
                "volume_min": "={{$parameter.additionalFields.volume_min}}",
                "exact_match": "={{$parameter.exact_match}}",
                "kvi_keep_na": "={{$parameter.additionalFields.kvi_keep_na}}",
                "allintitle_max": "={{$parameter.additionalFields.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields.allintitle_min}}",
                "word_count_max": "={{$parameter.additionalFields.word_count_max}}",
                "word_count_min": "={{$parameter.additionalFields.word_count_min}}",
                "competition_max": "={{$parameter.additionalFields.competition_max}}",
                "competition_min": "={{$parameter.additionalFields.competition_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Finds a keyword or expression containing a given seed keyword"
        },
        {
          "name": "Find Related Keyword",
          "value": "FindRelatedKeyword",
          "action": "Find related keyword",
          "routing": {
            "request": {
              "url": "=/keywords/related",
              "body": {
                "page": "={{$parameter.page}}",
                "order": "={{$parameter.additionalFields.order}}",
                "cpc_max": "={{$parameter.additionalFields.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields.cpc_min}}",
                "exclude": "={{$parameter.additionalFields.exclude}}",
                "include": "={{$parameter.additionalFields.include}}",
                "keyword": "={{$parameter.keyword}}",
                "kgr_max": "={{$parameter.additionalFields.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields.kvi_min}}",
                "order_by": "={{$parameter.order_by_findRelated}}",
                "depth_max": "={{$parameter.depth_max}}",
                "depth_min": "={{$parameter.depth_min}}",
                "lineCount": "={{$parameter.lineCount}}",
                "volume_max": "={{$parameter.additionalFields.volume_max}}",
                "volume_min": "={{$parameter.additionalFields.volume_min}}",
                "exact_match": "={{$parameter.exact_match}}",
                "kvi_keep_na": "={{$parameter.additionalFields.kvi_keep_na}}",
                "allintitle_max": "={{$parameter.additionalFields.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields.allintitle_min}}",
                "word_count_max": "={{$parameter.additionalFields.word_count_max}}",
                "word_count_min": "={{$parameter.additionalFields.word_count_min}}",
                "competition_max": "={{$parameter.additionalFields.competition_max}}",
                "competition_min": "={{$parameter.additionalFields.competition_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Finds similar keywords or expressions, based on SERP's \"Related Searches\""
        },
        {
          "name": "Find Similar Keyword",
          "value": "FindSimilarKeyword",
          "action": "Find similar keyword",
          "routing": {
            "request": {
              "url": "=/keywords/similar",
              "body": {
                "page": "={{$parameter.page}}",
                "order": "={{$parameter.additionalFields_findSimilar.order}}",
                "cpc_max": "={{$parameter.additionalFields_findSimilar.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields_findSimilar.cpc_min}}",
                "exclude": "={{$parameter.additionalFields_findSimilar.exclude}}",
                "include": "={{$parameter.additionalFields_findSimilar.include}}",
                "keyword": "={{$parameter.keyword}}",
                "kgr_max": "={{$parameter.additionalFields_findSimilar.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields_findSimilar.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields_findSimilar.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields_findSimilar.kvi_min}}",
                "order_by": "={{$parameter.order_by_findSimilar}}",
                "lineCount": "={{$parameter.lineCount}}",
                "score_max": "={{$parameter.additionalFields_findSimilar.score_max}}",
                "score_min": "={{$parameter.additionalFields_findSimilar.score_min}}",
                "volume_max": "={{$parameter.additionalFields_findSimilar.volume_max}}",
                "volume_min": "={{$parameter.additionalFields_findSimilar.volume_min}}",
                "kvi_keep_na": "={{$parameter.additionalFields_findSimilar.kvi_keep_na}}",
                "p1_score_max": "={{$parameter.additionalFields_findSimilar.p1_score_max}}",
                "p1_score_min": "={{$parameter.additionalFields_findSimilar.p1_score_min}}",
                "allintitle_max": "={{$parameter.additionalFields_findSimilar.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields_findSimilar.allintitle_min}}",
                "similarity_max": "={{$parameter.similarity_max}}",
                "similarity_min": "={{$parameter.similarity_min}}",
                "word_count_max": "={{$parameter.additionalFields_findSimilar.word_count_max}}",
                "word_count_min": "={{$parameter.additionalFields_findSimilar.word_count_min}}",
                "competition_max": "={{$parameter.additionalFields_findSimilar.competition_max}}",
                "competition_min": "={{$parameter.additionalFields_findSimilar.competition_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Finds keywords with the same categories as the seed keywords"
        },
        {
          "name": "Get Keyword Data in Bulk",
          "value": "GetKeywordDatainBulk",
          "action": "Get keyword data in bulk",
          "routing": {
            "request": {
              "url": "=/keywords/bulk",
              "body": {
                "page": "={{$parameter.page}}",
                "order": "={{$parameter.additionalFields.order}}",
                "cpc_max": "={{$parameter.additionalFields.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields.cpc_min}}",
                "exclude": "={{$parameter.additionalFields.exclude}}",
                "include": "={{$parameter.additionalFields.include}}",
                "kgr_max": "={{$parameter.additionalFields.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields.kvi_min}}",
                "order_by": "={{$parameter.order_by_bulk}}",
                "lineCount": "={{$parameter.lineCount}}",
                "volume_max": "={{$parameter.additionalFields.volume_max}}",
                "volume_min": "={{$parameter.additionalFields.volume_min}}",
                "exact_match": "={{$parameter.exact_match}}",
                "kvi_keep_na": "={{$parameter.additionalFields.kvi_keep_na}}",
                "allintitle_max": "={{$parameter.additionalFields.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields.allintitle_min}}",
                "word_count_max": "={{$parameter.additionalFields.word_count_max}}",
                "word_count_min": "={{$parameter.additionalFields.word_count_min}}",
                "competition_max": "={{$parameter.additionalFields.competition_max}}",
                "competition_min": "={{$parameter.additionalFields.competition_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves a keyword data in bulk"
        },
        {
          "name": "Get Keyword Highlight",
          "value": "GetKeywordHighlight",
          "action": "Get keyword highlight",
          "routing": {
            "request": {
              "url": "=/keywords/highlights",
              "body": {
                "page": "={{$parameter.page}}",
                "order": "={{$parameter.additionalFields.order}}",
                "cpc_max": "={{$parameter.additionalFields.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields.cpc_min}}",
                "exclude": "={{$parameter.additionalFields.exclude}}",
                "include": "={{$parameter.additionalFields.include}}",
                "keyword": "={{$parameter.keyword}}",
                "kgr_max": "={{$parameter.additionalFields.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields.kvi_min}}",
                "order_by": "={{$parameter.order_by_highlight}}",
                "lineCount": "={{$parameter.lineCount}}",
                "volume_max": "={{$parameter.additionalFields.volume_max}}",
                "volume_min": "={{$parameter.additionalFields.volume_min}}",
                "exact_match": "={{$parameter.exact_match}}",
                "kvi_keep_na": "={{$parameter.additionalFields.kvi_keep_na}}",
                "allintitle_max": "={{$parameter.additionalFields.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields.allintitle_min}}",
                "similarity_max": "={{$parameter.similarity_max}}",
                "similarity_min": "={{$parameter.similarity_min}}",
                "word_count_max": "={{$parameter.additionalFields.word_count_max}}",
                "word_count_min": "={{$parameter.additionalFields.word_count_min}}",
                "competition_max": "={{$parameter.additionalFields.competition_max}}",
                "competition_min": "={{$parameter.additionalFields.competition_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Identifies keywords for which the same expressions are highlighted in SERPs"
        },
        {
          "name": "Get Keyword Overview",
          "value": "GetKeywordOverview",
          "action": "Get keyword overview",
          "routing": {
            "request": {
              "url": "=keywords/overview",
              "body": {
                "lang": "={{$parameter.lang}}",
                "keyword": "={{$parameter.keyword}}",
                "requested_data": "={{$parameter.requested_data}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves an SEO overview for a keyword"
        },
        {
          "name": "Get Keyword Question",
          "value": "GetKeywordQuestion",
          "action": "Get keyword question",
          "routing": {
            "request": {
              "url": "=/keywords/questions",
              "body": {
                "page": "={{$parameter.page}}",
                "order": "={{$parameter.additionalFields.order}}",
                "cpc_max": "={{$parameter.additionalFields.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields.cpc_min}}",
                "exclude": "={{$parameter.additionalFields.exclude}}",
                "include": "={{$parameter.additionalFields.include}}",
                "keyword": "={{$parameter.keyword}}",
                "kgr_max": "={{$parameter.additionalFields.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields.kvi_min}}",
                "order_by": "={{$parameter.order_by_question}}",
                "depth_max": "={{$parameter.depth_max}}",
                "depth_min": "={{$parameter.depth_min}}",
                "lineCount": "={{$parameter.lineCount}}",
                "volume_max": "={{$parameter.additionalFields.volume_max}}",
                "volume_min": "={{$parameter.additionalFields.volume_min}}",
                "exact_match": "={{$parameter.exact_match}}",
                "kvi_keep_na": "={{$parameter.additionalFields.kvi_keep_na}}",
                "keep_only_paa": "={{$parameter.keep_only_paa}}",
                "allintitle_max": "={{$parameter.additionalFields.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields.allintitle_min}}",
                "question_types": "={{$parameter.question_types}}",
                "word_count_max": "={{$parameter.additionalFields.word_count_max}}",
                "word_count_min": "={{$parameter.additionalFields.word_count_min}}",
                "competition_max": "={{$parameter.additionalFields.competition_max}}",
                "competition_min": "={{$parameter.additionalFields.competition_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves popular questions and PAA queries related to a keyword"
        },
        {
          "name": "Get Keyword's Available Dates From SERP",
          "value": "GetKeywordAvailableDatesfromSERP",
          "action": "Get keyword available dates from serp",
          "routing": {
            "request": {
              "url": "=/keywords/serp/availableDates",
              "body": {
                "keyword": "={{$parameter.keyword}}"
              },
              "method": "POST"
            }
          },
          "description": "Identifies keywords for which the same expressions are highlighted in SERPs"
        },
        {
          "name": "Get Keyword's SERP Page Evolution",
          "value": "GetKeywordSERPPageEvolution",
          "action": "Get keyword SERP page evolution",
          "routing": {
            "request": {
              "url": "=/keywords/serp/pageEvolution",
              "body": {
                "url": "={{$parameter.url}}",
                "keyword": "={{$parameter.keyword}}",
                "first_date": "={{$parameter.first_date}}",
                "second_date": "={{$parameter.second_date}}"
              },
              "method": "POST"
            }
          },
          "description": "Tracks a specific URL's ranking history for a given keyword between two dates"
        },
        {
          "name": "Get Keyword's Site Structure",
          "value": "GetKeywordSiteStructure",
          "action": "Get keyword site structure",
          "routing": {
            "request": {
              "url": "=/keywords/siteStructure",
              "body": {
                "mode": "={{$parameter.mode_structure}}",
                "keyword": "={{ $parameter.keyword_siteStructure === \"\" ? null : $parameter.keyword_siteStructure }}",
                "keywords": "={{$parameter.keywords_siteStructure}}",
                "exact_match": "={{$parameter.exact_match}}",
                "granularity": "={{$parameter.granularity}}",
                "manual_common_10": "={{$parameter.manual_common_10}}",
                "manual_common_100": "={{$parameter.manual_common_100}}",
                "multipartite_modes": "={{$parameter.multipartite_modes}}",
                "neighbours_sources": "={{$parameter.neighbours_sources}}",
                "neighbours_sample_max_size": "={{$parameter.neighbours_sample_max_size}}"
              },
              "method": "POST"
            }
          },
          "description": "Analyzes keyword relationships and groups them based on shared statistics"
        },
        {
          "name": "Scrap Keyword",
          "value": "ScrapKeyword",
          "action": "Scrap keyword",
          "routing": {
            "request": {
              "url": "=/keywords/scrap",
              "body": {
                "keywords": "={{$parameter.keywords}}"
              },
              "method": "POST"
            }
          },
          "description": "Refreshes keyword data, including SERP, Ads metrics and All in Title when necessary"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "keywordExplorer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "GetDomainOverview",
      "options": [
        {
          "name": "Compare Domain Keywords with Competitors",
          "value": "CompareDomainKeywordswithCompetitors",
          "action": "Compare domain keywords with competitors",
          "routing": {
            "request": {
              "url": "=/domains/siteCompetitors/keywordsDiff",
              "body": {
                "mode": "={{$parameter.mode}}",
                "page": "={{$parameter.page}}",
                "input": "={{$parameter.input}}",
                "bested": "={{$parameter.bested !== false ? undefined  : $parameter.bested }}",
                "besting": "={{$parameter.besting === false ? undefined  : $parameter.besting}}",
                "cpc_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.cpc_min}}",
                "kgr_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.kvi_min}}",
                "missing": "={{$parameter.missing === false ? undefined  : $parameter.missing}}",
                "order_by": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.order_by}}",
                "exclusive": "={{$parameter.exclusive === false ? undefined  : $parameter.exclusive}}",
                "lineCount": "={{$parameter.lineCount}}",
                "volume_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.volume_max}}",
                "volume_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.volume_min}}",
                "cpc_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.cpc_keep_na}}",
                "kgr_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.kgr_keep_na}}",
                "kvi_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.kvi_keep_na}}",
                "acceptedTypes": "={{$parameter.acceptedTypes}}",
                "allintitle_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.allintitle_min}}",
                "volume_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.volume_keep_na}}",
                "competition_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.competition_max}}",
                "competition_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.competition_min}}",
                "keyword_exclude": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.keyword_exclude}}",
                "keyword_include": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.keyword_include}}",
                "allintitle_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.allintitle_keep_na}}",
                "google_indexed_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.google_indexed_max}}",
                "google_indexed_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.google_indexed_min}}",
                "competition_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.competition_keep_na}}",
                "google_indexed_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.google_indexed_keep_na}}",
                "keyword_word_count_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.keyword_word_count_max}}",
                "keyword_word_count_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.keyword_word_count_min}}",
                "competitors_positions_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.competitors_positions_max}}",
                "competitors_positions_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.competitors_positions_min}}",
                "best_reference_traffic_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_reference_traffic_max}}",
                "best_reference_traffic_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_reference_traffic_min}}",
                "best_competitor_traffic_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_competitor_traffic_max}}",
                "best_competitor_traffic_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_competitor_traffic_min}}",
                "best_reference_position_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_reference_position_max}}",
                "best_reference_position_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_reference_position_min}}",
                "best_competitor_position_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_competitor_position_max}}",
                "best_competitor_position_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_competitor_position_min}}",
                "unique_competitors_count_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.unique_competitors_count_max}}",
                "unique_competitors_count_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.unique_competitors_count_min}}",
                "best_reference_traffic_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_reference_traffic_keep_na}}",
                "best_competitor_traffic_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_competitor_traffic_keep_na}}"
              },
              "method": "POST"
            }
          },
          "description": "Compares keyword rankings between a given website and its competitors"
        },
        {
          "name": "Get Best Keywords From Page",
          "value": "GetBestKeywordsfromPage",
          "action": "Get best keywords from page",
          "routing": {
            "request": {
              "url": "=/domains/pageBestKeywords",
              "body": {
                "input": "={{$parameter.input_visibility_bestkeyword}}",
                "strategy": "={{$parameter.strategy}}",
                "lineCount": "={{$parameter.lineCount_bestkeyword}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves the best-positioned keyword for the given pages"
        },
        {
          "name": "Get Competitor Best Pages",
          "value": "GetCompetitorBestPages",
          "action": "Get competitor best pages",
          "routing": {
            "request": {
              "url": "=/domains/siteCompetitors/bestPages",
              "body": {
                "mode": "={{$parameter.mode}}",
                "page": "={{$parameter.page}}",
                "input": "={{$parameter.input}}",
                "order_by": "={{$parameter.order_by_competitor_keyworddata}}",
                "strategy": "={{$parameter.strategy}}",
                "lineCount": "={{$parameter.lineCount}}",
                "competitors": "={{$parameter.competitors}}",
                "keywords_max": "={{$parameter.additionalFields_GetCompetitorBestPages.keywords_max}}",
                "keywords_min": "={{$parameter.additionalFields_GetCompetitorBestPages.keywords_min}}",
                "positions_max": "={{$parameter.additionalFields_GetCompetitorBestPages.positions_max}}",
                "positions_min": "={{$parameter.additionalFields_GetCompetitorBestPages.positions_min}}",
                "total_traffic_max": "={{$parameter.additionalFields_GetCompetitorBestPages.total_traffic_max}}",
                "total_traffic_min": "={{$parameter.additionalFields_GetCompetitorBestPages.total_traffic_min}}",
                "bested_keywords_max": "={{$parameter.additionalFields_GetCompetitorBestPages.bested_keywords_max}}",
                "bested_keywords_min": "={{$parameter.additionalFields_GetCompetitorBestPages.bested_keywords_min}}",
                "besting_keywords_max": "={{$parameter.additionalFields_GetCompetitorBestPages.besting_keywords_max}}",
                "besting_keywords_min": "={{$parameter.additionalFields_GetCompetitorBestPages.besting_keywords_min}}",
                "total_traffic_keep_na": "={{$parameter.additionalFields_GetCompetitorBestPages.total_traffic_keep_na}}",
                "exclusive_keywords_max": "={{$parameter.additionalFields_GetCompetitorBestPages.exclusive_keywords_max}}",
                "exclusive_keywords_min": "={{$parameter.additionalFields_GetCompetitorBestPages.exclusive_keywords_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves the best-performing pages of a competitor's domain"
        },
        {
          "name": "Get Competitor Keywords with the Best Position",
          "value": "GetCompetitorsKeywordsBestPosition",
          "action": "Get competitor keywords with the best position",
          "routing": {
            "request": {
              "url": "=/domains/siteCompetitors/keywordsBestPos",
              "body": {
                "mode": "={{$parameter.mode_bestposition}}",
                "page": "={{$parameter.page}}",
                "cpc_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.cpc_min}}",
                "kgr_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.kvi_min}}",
                "keywords": "={{$parameter.keywords_bestposition}}",
                "order_by": "={{$parameter.order_by_bestposition}}",
                "lineCount": "={{$parameter.lineCount}}",
                "volume_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.volume_max}}",
                "volume_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.volume_min}}",
                "competitors": "={{$parameter.competitors_bestposition}}",
                "cpc_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.cpc_keep_na}}",
                "kgr_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.kgr_keep_na}}",
                "kvi_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.kvi_keep_na}}",
                "allintitle_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.allintitle_min}}",
                "volume_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.volume_keep_na}}",
                "competition_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.competition_max}}",
                "competition_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.competition_min}}",
                "keyword_exclude": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.keyword_exclude}}",
                "keyword_include": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.keyword_include}}",
                "allintitle_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.allintitle_keep_na}}",
                "competition_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.competition_keep_na}}",
                "keyword_word_count_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.keyword_word_count_max}}",
                "keyword_word_count_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.keyword_word_count_min}}",
                "competitors_positions_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.competitors_positions_max}}",
                "competitors_positions_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.competitors_positions_min}}",
                "best_competitor_traffic_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.best_competitor_traffic_max}}",
                "best_competitor_traffic_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.best_competitor_traffic_min}}",
                "best_competitor_position_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.best_competitor_position_max}}",
                "best_competitor_position_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.best_competitor_position_min}}",
                "unique_competitors_count_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.unique_competitors_count_max}}",
                "unique_competitors_count_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.unique_competitors_count_min}}",
                "best_competitor_traffic_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.best_competitor_traffic_keep_na}}"
              },
              "method": "POST"
            }
          },
          "description": "Get the keywords of a competitor with the best positions"
        },
        {
          "name": "Get Domain Categories Based on GMB Backlinks",
          "value": "GetDomainCategoriesbasedGMBBacklinks",
          "action": "Get domain categories based on gmb backlinks",
          "routing": {
            "request": {
              "url": "=/domains/gmbBacklinks/categories",
              "body": {
                "mode": "={{$parameter.mode}}",
                "input": "={{$parameter.input}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves the business categories associated with a given domain or URL based on GMB backlinks"
        },
        {
          "name": "Get Domain Competitors",
          "value": "GetDomainCompetitors",
          "action": "Get domain competitors",
          "routing": {
            "request": {
              "url": "=/domains/siteCompetitors",
              "body": {
                "mode": "={{$parameter.mode}}",
                "page": "={{$parameter.page}}",
                "input": "={{$parameter.input}}",
                "lineCount": "={{$parameter.lineCount}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves a list of competitor domains for a given website"
        },
        {
          "name": "Get Domain Data in Bulk",
          "value": "GetDomainDatainBulk",
          "action": "Get domain data in bulk",
          "routing": {
            "request": {
              "url": "=/domains/bulk",
              "body": {
                "mode": "={{$parameter.mode}}",
                "page": "={{$parameter.page}}",
                "order": "={{$parameter.additionalFields_GetDomainDatainBulk.order}}",
                "inputs": "={{$parameter.inputs}}",
                "order_by": "={{$parameter.order_by}}",
                "lineCount": "={{$parameter.lineCount}}",
                "total_top_3_max": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_3_max}}",
                "total_top_3_min": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_3_min}}",
                "total_top_10_max": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_10_max}}",
                "total_top_10_min": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_10_min}}",
                "total_top_50_max": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_50_max}}",
                "total_top_50_min": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_50_min}}",
                "total_top_100_max": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_100_max}}",
                "total_top_100_min": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_100_min}}",
                "total_traffic_max": "={{$parameter.additionalFields_GetDomainDatainBulk.total_traffic_max}}",
                "total_traffic_min": "={{$parameter.additionalFields_GetDomainDatainBulk.total_traffic_min}}",
                "unique_keywords_max": "={{$parameter.additionalFields_GetDomainDatainBulk.unique_keywords_max}}",
                "unique_keywords_min": "={{$parameter.additionalFields_GetDomainDatainBulk.unique_keywords_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves data for a list of provided domains or URLs"
        },
        {
          "name": "Get Domain GMB Backlinks Map",
          "value": "GetDomainGMBBacklinksMap",
          "action": "Get domain gmb backlinks map",
          "routing": {
            "request": {
              "url": "=/domains/gmbBacklinks/map",
              "body": {
                "mode": "={{$parameter.mode}}",
                "input": "={{$parameter.input}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves the geographical locations of backlinks for a given domain or URL"
        },
        {
          "name": "Get Domain Overview",
          "value": "GetDomainOverview",
          "action": "Get domain overview",
          "routing": {
            "request": {
              "url": "=/domains/overview",
              "body": {
                "lang": "={{$parameter.lang}}",
                "mode": "={{$parameter.mode}}",
                "input": "={{$parameter.input_domain}}",
                "requested_data": "={{$parameter.requested_data}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves an SEO overview for a domain or URL"
        },
        {
          "name": "Get Domain Position History",
          "value": "GetDomainPositionHistory",
          "action": "Get domain position history",
          "routing": {
            "request": {
              "url": "=/domains/history",
              "body": {
                "mode": "={{$parameter.mode}}",
                "page": "={{$parameter.page}}",
                "input": "={{$parameter.input}}",
                "order": "={{$parameter.additionalFields_GetDomainPositionHistory.order}}",
                "cpc_max": "={{$parameter.additionalFields_GetDomainPositionHistory.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields_GetDomainPositionHistory.cpc_min}}",
                "date_to": "={{$parameter.date_to}}",
                "kgr_max": "={{$parameter.additionalFields_GetDomainPositionHistory.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields_GetDomainPositionHistory.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields_GetDomainPositionHistory.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields_GetDomainPositionHistory.kvi_min}}",
                "order_by": "={{$parameter.order_by_domain_history}}",
                "date_from": "={{$parameter.date_from}}",
                "lineCount": "={{$parameter.lineCount}}",
                "volume_max": "={{$parameter.additionalFields_GetDomainPositionHistory.volume_max}}",
                "volume_min": "={{$parameter.additionalFields_GetDomainPositionHistory.volume_min}}",
                "kvi_keep_na": "={{$parameter.additionalFields_GetDomainPositionHistory.kvi_keep_na}}",
                "still_there": "={{$parameter.additionalFields_GetDomainPositionHistory.still_there}}",
                "allintitle_max": "={{$parameter.additionalFields_GetDomainPositionHistory.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields_GetDomainPositionHistory.allintitle_min}}",
                "page_count_max": "={{$parameter.additionalFields_GetDomainPositionHistory.page_count_max}}",
                "page_count_min": "={{$parameter.additionalFields_GetDomainPositionHistory.page_count_min}}",
                "word_count_max": "={{$parameter.additionalFields_GetDomainPositionHistory.word_count_max}}",
                "word_count_min": "={{$parameter.additionalFields_GetDomainPositionHistory.word_count_min}}",
                "competition_max": "={{$parameter.additionalFields_GetDomainPositionHistory.competition_max}}",
                "competition_min": "={{$parameter.additionalFields_GetDomainPositionHistory.competition_min}}",
                "keyword_exclude": "={{$parameter.additionalFields_GetDomainPositionHistory.keyword_exclude}}",
                "keyword_include": "={{$parameter.additionalFields_GetDomainPositionHistory.keyword_include}}",
                "best_position_max": "={{$parameter.additionalFields_GetDomainPositionHistory.best_position_max}}",
                "best_position_min": "={{$parameter.additionalFields_GetDomainPositionHistory.best_position_min}}",
                "last_time_seen_max": "={{$parameter.additionalFields_GetDomainPositionHistory.last_time_seen_max}}",
                "last_time_seen_min": "={{$parameter.additionalFields_GetDomainPositionHistory.last_time_seen_min}}",
                "worst_position_max": "={{$parameter.additionalFields_GetDomainPositionHistory.worst_position_max}}",
                "worst_position_min": "={{$parameter.additionalFields_GetDomainPositionHistory.worst_position_min}}",
                "first_time_seen_max": "={{$parameter.additionalFields_GetDomainPositionHistory.first_time_seen_max}}",
                "first_time_seen_min": "={{$parameter.additionalFields_GetDomainPositionHistory.first_time_seen_min}}",
                "subdomain_count_max": "={{$parameter.additionalFields_GetDomainPositionHistory.subdomain_count_max}}",
                "subdomain_count_min": "={{$parameter.additionalFields_GetDomainPositionHistory.subdomain_count_min}}",
                "most_recent_position_max": "={{$parameter.additionalFields_GetDomainPositionHistory.most_recent_position_max}}",
                "most_recent_position_min": "={{$parameter.additionalFields_GetDomainPositionHistory.most_recent_position_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves the historical ranking positions of a specified domain or URL for various keywords"
        },
        {
          "name": "Get Domain Top Pages",
          "value": "GetDomainTopPages",
          "action": "Get domains top pages",
          "routing": {
            "request": {
              "url": "=/domains/topPages",
              "body": {
                "mode": "={{$parameter.mode}}",
                "page": "={{$parameter.page}}",
                "input": "={{$parameter.input}}",
                "order": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.order}}",
                "order_by": "={{$parameter.order_by_domain_history}}",
                "lineCount": "={{$parameter.lineCount}}",
                "total_top_3_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_3_max}}",
                "total_top_3_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_3_min}}",
                "total_top_10_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_10_max}}",
                "total_top_10_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_10_min}}",
                "total_top_50_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_50_max}}",
                "total_top_50_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_50_min}}",
                "total_top_100_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_100_max}}",
                "total_top_100_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_100_min}}",
                "total_traffic_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_traffic_max}}",
                "total_traffic_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_traffic_min}}",
                "known_versions_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.known_versions_max}}",
                "known_versions_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.known_versions_min}}",
                "unique_keywords_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.unique_keywords_max}}",
                "unique_keywords_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.unique_keywords_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves top-performing pages of a domain or URL"
        },
        {
          "name": "Get Expired Domains",
          "value": "GetExpiredDomains",
          "action": "Get expired domains",
          "routing": {
            "request": {
              "url": "=/domains/expired",
              "body": {
                "page": "={{$parameter.page}}",
                "order": "={{$parameter.additionalFields_GetExpiredDomains.order}}",
                "keyword": "={{$parameter.keyword_expired}}",
                "order_by": "={{$parameter.order_by_expired}}",
                "lineCount": "={{$parameter.lineCount}}",
                "fb_shares_max": "={{$parameter.additionalFields_GetExpiredDomains.fb_shares_max}}",
                "fb_shares_min": "={{$parameter.additionalFields_GetExpiredDomains.fb_shares_min}}",
                "firstseen_min": "={{$parameter.additionalFields_GetExpiredDomains.firstseen_min}}",
                "last_seen_max": "={{$parameter.additionalFields_GetExpiredDomains.last_seen_max}}",
                "last_seen_min": "={{$parameter.additionalFields_GetExpiredDomains.last_seen_min}}",
                "first_seen_max": "={{$parameter.additionalFields_GetExpiredDomains.first_seen_max}}",
                "fb_comments_max": "={{$parameter.additionalFields_GetExpiredDomains.fb_comments_max}}",
                "fb_comments_min": "={{$parameter.additionalFields_GetExpiredDomains.fb_comments_min}}",
                "total_pages_max": "={{$parameter.additionalFields_GetExpiredDomains.total_pages_max}}",
                "total_pages_min": "={{$parameter.additionalFields_GetExpiredDomains.total_pages_min}}",
                "total_domains_max": "={{$parameter.additionalFields_GetExpiredDomains.total_domains_max}}",
                "total_domains_min": "={{$parameter.additionalFields_GetExpiredDomains.total_domains_min}}",
                "total_traffic_max": "={{$parameter.additionalFields_GetExpiredDomains.total_traffic_max}}",
                "total_traffic_min": "={{$parameter.additionalFields_GetExpiredDomains.total_traffic_min}}",
                "matching_pages_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_pages_max}}",
                "matching_pages_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_pages_min}}",
                "pinterest_pins_max": "={{$parameter.additionalFields_GetExpiredDomains.pinterest_pins_max}}",
                "pinterest_pins_min": "={{$parameter.additionalFields_GetExpiredDomains.pinterest_pins_min}}",
                "total_keywords_max": "={{$parameter.additionalFields_GetExpiredDomains.total_keywords_max}}",
                "total_keywords_min": "={{$parameter.additionalFields_GetExpiredDomains.total_keywords_min}}",
                "root_domain_exclude": "={{$parameter.additionalFields_GetExpiredDomains.root_domain_exclude}}",
                "root_domain_include": "={{$parameter.additionalFields_GetExpiredDomains.root_domain_include}}",
                "matching_traffic_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_traffic_max}}",
                "matching_traffic_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_traffic_min}}",
                "matching_keywords_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_keywords_max}}",
                "matching_keywords_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_keywords_min}}",
                "referring_domains_max": "={{$parameter.additionalFields_GetExpiredDomains.referring_domains_max}}",
                "referring_domains_min": "={{$parameter.additionalFields_GetExpiredDomains.referring_domains_min}}",
                "last_time_available_max": "={{$parameter.additionalFields_GetExpiredDomains.last_time_available_max}}",
                "last_time_available_min": "={{$parameter.additionalFields_GetExpiredDomains.last_time_available_min}}",
                "total_top_3_traffic_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_3_traffic_max}}",
                "total_top_3_traffic_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_3_traffic_min}}",
                "first_time_available_max": "={{$parameter.additionalFields_GetExpiredDomains.first_time_available_max}}",
                "first_time_available_min": "={{$parameter.additionalFields_GetExpiredDomains.first_time_available_min}}",
                "total_top_10_traffic_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_10_traffic_max}}",
                "total_top_10_traffic_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_10_traffic_min}}",
                "total_top_50_traffic_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_50_traffic_max}}",
                "total_top_50_traffic_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_50_traffic_min}}",
                "total_top_100_traffic_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_100_traffic_max}}",
                "total_top_100_traffic_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_100_traffic_min}}",
                "total_top_3_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_3_positions_max}}",
                "total_top_3_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_3_positions_min}}",
                "total_top_10_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_10_positions_max}}",
                "total_top_10_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_10_positions_min}}",
                "total_top_50_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_50_positions_max}}",
                "total_top_50_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_50_positions_min}}",
                "total_top_100_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_100_positions_max}}",
                "total_top_100_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_100_positions_min}}",
                "matching_top_3_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_3_positions_max}}",
                "matching_top_3_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_3_positions_min}}",
                "matching_top_10_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_10_positions_max}}",
                "matching_top_10_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_10_positions_min}}",
                "matching_top_50_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_50_positions_max}}",
                "matching_top_50_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_50_positions_min}}",
                "matching_top_100_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_100_positions_max}}",
                "matching_top_100_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_100_positions_min}}",
                "matching_most_recent_position_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_most_recent_position_max}}",
                "matching_most_recent_position_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_most_recent_position_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves a list of (registar free) expired domains with SEO metrics"
        },
        {
          "name": "Get GMB Backlink",
          "value": "GetGMBBacklink",
          "action": "Get gmb backlink",
          "routing": {
            "request": {
              "url": "=/domains/gmbBacklinks",
              "body": {
                "mode": "={{$parameter.mode}}",
                "page": "={{$parameter.page}}",
                "input": "={{$parameter.input}}",
                "order": "={{$parameter.additionalFields_GetGMBBacklink.order}}",
                "order_by": "={{$parameter.order_by_backlink}}",
                "lineCount": "={{$parameter.lineCount}}",
                "is_claimed": "={{$parameter.additionalFields_GetGMBBacklink.is_claimed}}",
                "latitude_max": "={{$parameter.additionalFields_GetGMBBacklink.latitude_max}}",
                "latitude_min": "={{$parameter.additionalFields_GetGMBBacklink.latitude_min}}",
                "longitude_max": "={{$parameter.additionalFields_GetGMBBacklink.longitude_max}}",
                "longitude_min": "={{$parameter.additionalFields_GetGMBBacklink.longitude_min}}",
                "latitude_keep_na": "={{$parameter.additionalFields_GetGMBBacklink.latitude_keep_na}}",
                "rating_count_max": "={{$parameter.additionalFields_GetGMBBacklink.rating_count_max}}",
                "rating_count_min": "={{$parameter.additionalFields_GetGMBBacklink.rating_count_min}}",
                "rating_value_max": "={{$parameter.additionalFields_GetGMBBacklink.rating_value_max}}",
                "rating_value_min": "={{$parameter.additionalFields_GetGMBBacklink.rating_value_min}}",
                "longitude_keep_na": "={{$parameter.additionalFields_GetGMBBacklink.longitude_keep_na}}",
                "categories_exclude": "={{$parameter.additionalFields_GetGMBBacklink.categories_exclude}}",
                "categories_include": "={{$parameter.additionalFields_GetGMBBacklink.categories_include}}",
                "rating_count_keep_na": "={{$parameter.additionalFields_GetGMBBacklink.rating_count_keep_na}}",
                "rating_value_keep_na": "={{$parameter.additionalFields_GetGMBBacklink.rating_value_keep_na}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves GMB backlink data for a specified domain or URL"
        },
        {
          "name": "Get History of Domain Pages",
          "value": "GetHistoryofDomainPages",
          "action": "Get history of domain pages",
          "routing": {
            "request": {
              "url": "=/domains/pagesHistory",
              "body": {
                "mode": "={{$parameter.mode}}",
                "page": "={{$parameter.page}}",
                "input": "={{$parameter.input}}",
                "order": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.order}}",
                "date_to": "={{$parameter.date_to}}",
                "order_by": "={{$parameter.order_by_pagehistory}}",
                "date_from": "={{$parameter.date_from}}",
                "lineCount": "={{$parameter.lineCount}}",
                "total_top_3_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_3_max}}",
                "total_top_3_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_3_min}}",
                "total_top_10_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_10_max}}",
                "total_top_10_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_10_min}}",
                "total_top_50_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_50_max}}",
                "total_top_50_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_50_min}}",
                "total_top_100_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_100_max}}",
                "total_top_100_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_100_min}}",
                "total_traffic_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_traffic_max}}",
                "total_traffic_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_traffic_min}}",
                "known_versions_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.known_versions_max}}",
                "known_versions_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.known_versions_min}}",
                "unique_keywords_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.unique_keywords_max}}",
                "unique_keywords_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.unique_keywords_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Fetches metrics for specific pages of a domain"
        },
        {
          "name": "Get Keyword Data From an URL",
          "value": "GetKeywordDatafromURL",
          "action": "Get keyword data from an url",
          "routing": {
            "request": {
              "url": "=/domains/keywords",
              "body": {
                "mode": "={{$parameter.mode}}",
                "page": "={{$parameter.page}}",
                "input": "={{$parameter.input}}",
                "order": "={{$parameter.additionalFields_GetKeywordDatafromURL.order}}",
                "cpc_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.cpc_min}}",
                "kgr_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.kvi_min}}",
                "keywords": "={{$parameter.keywords_bestposition}}",
                "order_by": "={{$parameter.order_by_competitor_keyworddata}}",
                "lineCount": "={{$parameter.lineCount}}",
                "volume_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.volume_max}}",
                "volume_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.volume_min}}",
                "kvi_keep_na": "={{$parameter.additionalFields_GetKeywordDatafromURL.kvi_keep_na}}",
                "traffic_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.traffic_max}}",
                "traffic_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.traffic_min}}",
                "position_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.position_max}}",
                "position_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.position_min}}",
                "serp_date_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.serp_date_max}}",
                "serp_date_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.serp_date_min}}",
                "title_exclude": "={{$parameter.additionalFields_GetKeywordDatafromURL.title_exclude}}",
                "title_include": "={{$parameter.additionalFields_GetKeywordDatafromURL.title_include}}",
                "allintitle_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.allintitle_min}}",
                "competition_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.competition_max}}",
                "competition_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.competition_min}}",
                "keyword_exclude": "={{$parameter.additionalFields_GetKeywordDatafromURL.keyword_exclude}}",
                "keyword_include": "={{$parameter.additionalFields_GetKeywordDatafromURL.keyword_include}}",
                "title_word_count_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.title_word_count_max}}",
                "title_word_count_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.title_word_count_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves keyword data for a given URL or domain"
        },
        {
          "name": "Get Ranking of Domain Keyword",
          "value": "GetRankingofDomainKeyword",
          "action": "Get ranking of domain keyword",
          "routing": {
            "request": {
              "url": "=/domains/positions",
              "body": {
                "mode": "={{$parameter.mode}}",
                "page": "={{$parameter.page}}",
                "input": "={{$parameter.input}}",
                "order": "={{$parameter.additionalFields_GetRankingofDomainKeyword.order}}",
                "cpc_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.cpc_max}}",
                "cpc_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.cpc_min}}",
                "kgr_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.kgr_max}}",
                "kgr_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.kgr_min}}",
                "kvi_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.kvi_max}}",
                "kvi_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.kvi_min}}",
                "order_by": "={{$parameter.order_by_ranking}}",
                "lineCount": "={{$parameter.lineCount}}",
                "volume_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.volume_max}}",
                "volume_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.volume_min}}",
                "kvi_keep_na": "={{$parameter.additionalFields_GetRankingofDomainKeyword.kvi_keep_na}}",
                "traffic_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.traffic_max}}",
                "traffic_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.traffic_min}}",
                "position_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.position_max}}",
                "position_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.position_min}}",
                "serp_date_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.serp_date_max}}",
                "serp_date_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.serp_date_min}}",
                "title_exclude": "={{$parameter.additionalFields_GetRankingofDomainKeyword.title_exclude}}",
                "title_include": "={{$parameter.additionalFields_GetRankingofDomainKeyword.title_include}}",
                "allintitle_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.allintitle_max}}",
                "allintitle_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.allintitle_min}}",
                "competition_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.competition_max}}",
                "competition_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.competition_min}}",
                "keyword_exclude": "={{$parameter.additionalFields_GetRankingofDomainKeyword.keyword_exclude}}",
                "keyword_include": "={{$parameter.additionalFields_GetRankingofDomainKeyword.keyword_include}}",
                "keyword_word_count_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.keyword_word_count_max}}",
                "keyword_word_count_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.keyword_word_count_min}}"
              },
              "method": "POST"
            }
          },
          "description": "Fetches a current domain rankings for a domain or URL"
        },
        {
          "name": "Get Visibility Trend of Domains",
          "value": "GetVisibilityTrendofDomains",
          "action": "Get visibility trend of domains",
          "routing": {
            "request": {
              "url": "=/domains/history/visibilityTrends",
              "body": {
                "mode": "={{$parameter.mode}}",
                "type": "={{$parameter.type}}",
                "input": "={{$parameter.input_visibility_bestkeyword}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves a visibility trend data for a given list of websites or URLs"
        },
        {
          "name": "Reveal Expired Domains",
          "value": "RevealExpiredDomains",
          "action": "Reveal expired domains",
          "routing": {
            "request": {
              "url": "=/domains/expired/reveal",
              "body": {
                "root_domain_keys": "={{$parameter.root_domain_keys.toInt()}}"
              },
              "method": "POST"
            }
          },
          "description": "Reveals expired root domains using the provided keys retrieved from the domains/expired endpoint"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "siteExplorer"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get User Credit",
      "value": "GetUserCredit",
      "action": "Get user credit",
      "routing": {
        "request": {
          "url": "=/user/credit",
          "method": "GET"
        }
      },
      "description": "Retrieves the remaining credit for the current user",
      "resource": "user"
    },
    {
      "name": "Compare Keywords SERP",
      "value": "CompareKeywordsSERP",
      "action": "Compare keywords SERP",
      "routing": {
        "request": {
          "url": "=/keywords/serp/compare",
          "body": {
            "period": "={{$parameter.period}}",
            "keyword": "={{$parameter.keyword}}",
            "first_date": "={{$parameter.first_date_compare}}",
            "second_date": "={{$parameter.second_date_compare}}"
          },
          "method": "POST"
        }
      },
      "description": "Compares SERPs for a given keyword",
      "resource": "keywordExplorer"
    },
    {
      "name": "Find Keyword",
      "value": "FindKeyword",
      "action": "Find keyword",
      "routing": {
        "request": {
          "url": "=/keywords/find",
          "body": {
            "page": "={{$parameter.page}}",
            "order": "={{$parameter.order}}",
            "cpc_max": "={{$parameter.additionalFields_findKeyword.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields_findKeyword.cpc_min}}",
            "exclude": "={{$parameter.additionalFields_findKeyword.exclude}}",
            "include": "={{$parameter.additionalFields_findKeyword.include}}",
            "keyword": "={{$parameter.keyword_findKeyword}}",
            "kgr_max": "={{$parameter.additionalFields_findKeyword.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields_findKeyword.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields_findKeyword.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields_findKeyword.kvi_min}}",
            "keywords": "={{$parameter.keywords_findKeyword}}",
            "order_by": "={{$parameter.order_by_findKeyword}}",
            "keep_seed": "={{$parameter.keep_seed}}",
            "lineCount": "={{$parameter.lineCount}}",
            "volume_max": "={{$parameter.additionalFields_findKeyword.volume_max}}",
            "volume_min": "={{$parameter.additionalFields_findKeyword.volume_min}}",
            "exact_match": "={{$parameter.exact_match}}",
            "kvi_keep_na": "={{$parameter.additionalFields_findKeyword.kvi_keep_na}}",
            "allintitle_max": "={{$parameter.additionalFields_findKeyword.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields_findKeyword.allintitle_min}}",
            "competition_max": "={{$parameter.additionalFields_findKeyword.competition_max}}",
            "competition_min": "={{$parameter.additionalFields_findKeyword.competition_min}}",
            "keywords_sources": "={{$parameter.keywords_sources}}"
          },
          "method": "POST"
        }
      },
      "description": "Finds keywords based on a seed",
      "resource": "keywordExplorer"
    },
    {
      "name": "Find Keyword Synonym",
      "value": "FindKeywordSynonym",
      "action": "Find keyword synonym",
      "routing": {
        "request": {
          "url": "=/keywords/synonyms",
          "body": {
            "page": "={{$parameter.page}}",
            "order": "={{$parameter.additionalFields.order}}",
            "cpc_max": "={{$parameter.additionalFields.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields.cpc_min}}",
            "exclude": "={{$parameter.additionalFields.exclude}}",
            "include": "={{$parameter.additionalFields.include}}",
            "keyword": "={{$parameter.keyword}}",
            "kgr_max": "={{$parameter.additionalFields.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields.kvi_min}}",
            "order_by": "={{$parameter.order_by_findSynoMatch}}",
            "lineCount": "={{$parameter.lineCount}}",
            "volume_max": "={{$parameter.additionalFields.volume_max}}",
            "volume_min": "={{$parameter.additionalFields.volume_min}}",
            "exact_match": "={{$parameter.exact_match}}",
            "kvi_keep_na": "={{$parameter.additionalFields.kvi_keep_na}}",
            "allintitle_max": "={{$parameter.additionalFields.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields.allintitle_min}}",
            "word_count_max": "={{$parameter.additionalFields.word_count_max}}",
            "word_count_min": "={{$parameter.additionalFields.word_count_min}}",
            "competition_max": "={{$parameter.additionalFields.competition_max}}",
            "competition_min": "={{$parameter.additionalFields.competition_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Finds synonyms for a keyword",
      "resource": "keywordExplorer"
    },
    {
      "name": "Find Keywords Match",
      "value": "FindKeywordsMatch",
      "action": "Find keywords match",
      "routing": {
        "request": {
          "url": "=/keywords/match",
          "body": {
            "page": "={{$parameter.page}}",
            "order": "={{$parameter.additionalFields.order}}",
            "cpc_max": "={{$parameter.additionalFields.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields.cpc_min}}",
            "exclude": "={{$parameter.additionalFields.exclude}}",
            "include": "={{$parameter.additionalFields.include}}",
            "keyword": "={{$parameter.keyword}}",
            "kgr_max": "={{$parameter.additionalFields.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields.kvi_min}}",
            "order_by": "={{$parameter.order_by_findSynoMatch}}",
            "lineCount": "={{$parameter.lineCount}}",
            "volume_max": "={{$parameter.additionalFields.volume_max}}",
            "volume_min": "={{$parameter.additionalFields.volume_min}}",
            "exact_match": "={{$parameter.exact_match}}",
            "kvi_keep_na": "={{$parameter.additionalFields.kvi_keep_na}}",
            "allintitle_max": "={{$parameter.additionalFields.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields.allintitle_min}}",
            "word_count_max": "={{$parameter.additionalFields.word_count_max}}",
            "word_count_min": "={{$parameter.additionalFields.word_count_min}}",
            "competition_max": "={{$parameter.additionalFields.competition_max}}",
            "competition_min": "={{$parameter.additionalFields.competition_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Finds a keyword or expression containing a given seed keyword",
      "resource": "keywordExplorer"
    },
    {
      "name": "Find Related Keyword",
      "value": "FindRelatedKeyword",
      "action": "Find related keyword",
      "routing": {
        "request": {
          "url": "=/keywords/related",
          "body": {
            "page": "={{$parameter.page}}",
            "order": "={{$parameter.additionalFields.order}}",
            "cpc_max": "={{$parameter.additionalFields.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields.cpc_min}}",
            "exclude": "={{$parameter.additionalFields.exclude}}",
            "include": "={{$parameter.additionalFields.include}}",
            "keyword": "={{$parameter.keyword}}",
            "kgr_max": "={{$parameter.additionalFields.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields.kvi_min}}",
            "order_by": "={{$parameter.order_by_findRelated}}",
            "depth_max": "={{$parameter.depth_max}}",
            "depth_min": "={{$parameter.depth_min}}",
            "lineCount": "={{$parameter.lineCount}}",
            "volume_max": "={{$parameter.additionalFields.volume_max}}",
            "volume_min": "={{$parameter.additionalFields.volume_min}}",
            "exact_match": "={{$parameter.exact_match}}",
            "kvi_keep_na": "={{$parameter.additionalFields.kvi_keep_na}}",
            "allintitle_max": "={{$parameter.additionalFields.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields.allintitle_min}}",
            "word_count_max": "={{$parameter.additionalFields.word_count_max}}",
            "word_count_min": "={{$parameter.additionalFields.word_count_min}}",
            "competition_max": "={{$parameter.additionalFields.competition_max}}",
            "competition_min": "={{$parameter.additionalFields.competition_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Finds similar keywords or expressions, based on SERP's \"Related Searches\"",
      "resource": "keywordExplorer"
    },
    {
      "name": "Find Similar Keyword",
      "value": "FindSimilarKeyword",
      "action": "Find similar keyword",
      "routing": {
        "request": {
          "url": "=/keywords/similar",
          "body": {
            "page": "={{$parameter.page}}",
            "order": "={{$parameter.additionalFields_findSimilar.order}}",
            "cpc_max": "={{$parameter.additionalFields_findSimilar.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields_findSimilar.cpc_min}}",
            "exclude": "={{$parameter.additionalFields_findSimilar.exclude}}",
            "include": "={{$parameter.additionalFields_findSimilar.include}}",
            "keyword": "={{$parameter.keyword}}",
            "kgr_max": "={{$parameter.additionalFields_findSimilar.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields_findSimilar.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields_findSimilar.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields_findSimilar.kvi_min}}",
            "order_by": "={{$parameter.order_by_findSimilar}}",
            "lineCount": "={{$parameter.lineCount}}",
            "score_max": "={{$parameter.additionalFields_findSimilar.score_max}}",
            "score_min": "={{$parameter.additionalFields_findSimilar.score_min}}",
            "volume_max": "={{$parameter.additionalFields_findSimilar.volume_max}}",
            "volume_min": "={{$parameter.additionalFields_findSimilar.volume_min}}",
            "kvi_keep_na": "={{$parameter.additionalFields_findSimilar.kvi_keep_na}}",
            "p1_score_max": "={{$parameter.additionalFields_findSimilar.p1_score_max}}",
            "p1_score_min": "={{$parameter.additionalFields_findSimilar.p1_score_min}}",
            "allintitle_max": "={{$parameter.additionalFields_findSimilar.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields_findSimilar.allintitle_min}}",
            "similarity_max": "={{$parameter.similarity_max}}",
            "similarity_min": "={{$parameter.similarity_min}}",
            "word_count_max": "={{$parameter.additionalFields_findSimilar.word_count_max}}",
            "word_count_min": "={{$parameter.additionalFields_findSimilar.word_count_min}}",
            "competition_max": "={{$parameter.additionalFields_findSimilar.competition_max}}",
            "competition_min": "={{$parameter.additionalFields_findSimilar.competition_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Finds keywords with the same categories as the seed keywords",
      "resource": "keywordExplorer"
    },
    {
      "name": "Get Keyword Data in Bulk",
      "value": "GetKeywordDatainBulk",
      "action": "Get keyword data in bulk",
      "routing": {
        "request": {
          "url": "=/keywords/bulk",
          "body": {
            "page": "={{$parameter.page}}",
            "order": "={{$parameter.additionalFields.order}}",
            "cpc_max": "={{$parameter.additionalFields.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields.cpc_min}}",
            "exclude": "={{$parameter.additionalFields.exclude}}",
            "include": "={{$parameter.additionalFields.include}}",
            "kgr_max": "={{$parameter.additionalFields.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields.kvi_min}}",
            "order_by": "={{$parameter.order_by_bulk}}",
            "lineCount": "={{$parameter.lineCount}}",
            "volume_max": "={{$parameter.additionalFields.volume_max}}",
            "volume_min": "={{$parameter.additionalFields.volume_min}}",
            "exact_match": "={{$parameter.exact_match}}",
            "kvi_keep_na": "={{$parameter.additionalFields.kvi_keep_na}}",
            "allintitle_max": "={{$parameter.additionalFields.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields.allintitle_min}}",
            "word_count_max": "={{$parameter.additionalFields.word_count_max}}",
            "word_count_min": "={{$parameter.additionalFields.word_count_min}}",
            "competition_max": "={{$parameter.additionalFields.competition_max}}",
            "competition_min": "={{$parameter.additionalFields.competition_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves a keyword data in bulk",
      "resource": "keywordExplorer"
    },
    {
      "name": "Get Keyword Highlight",
      "value": "GetKeywordHighlight",
      "action": "Get keyword highlight",
      "routing": {
        "request": {
          "url": "=/keywords/highlights",
          "body": {
            "page": "={{$parameter.page}}",
            "order": "={{$parameter.additionalFields.order}}",
            "cpc_max": "={{$parameter.additionalFields.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields.cpc_min}}",
            "exclude": "={{$parameter.additionalFields.exclude}}",
            "include": "={{$parameter.additionalFields.include}}",
            "keyword": "={{$parameter.keyword}}",
            "kgr_max": "={{$parameter.additionalFields.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields.kvi_min}}",
            "order_by": "={{$parameter.order_by_highlight}}",
            "lineCount": "={{$parameter.lineCount}}",
            "volume_max": "={{$parameter.additionalFields.volume_max}}",
            "volume_min": "={{$parameter.additionalFields.volume_min}}",
            "exact_match": "={{$parameter.exact_match}}",
            "kvi_keep_na": "={{$parameter.additionalFields.kvi_keep_na}}",
            "allintitle_max": "={{$parameter.additionalFields.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields.allintitle_min}}",
            "similarity_max": "={{$parameter.similarity_max}}",
            "similarity_min": "={{$parameter.similarity_min}}",
            "word_count_max": "={{$parameter.additionalFields.word_count_max}}",
            "word_count_min": "={{$parameter.additionalFields.word_count_min}}",
            "competition_max": "={{$parameter.additionalFields.competition_max}}",
            "competition_min": "={{$parameter.additionalFields.competition_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Identifies keywords for which the same expressions are highlighted in SERPs",
      "resource": "keywordExplorer"
    },
    {
      "name": "Get Keyword Overview",
      "value": "GetKeywordOverview",
      "action": "Get keyword overview",
      "routing": {
        "request": {
          "url": "=keywords/overview",
          "body": {
            "lang": "={{$parameter.lang}}",
            "keyword": "={{$parameter.keyword}}",
            "requested_data": "={{$parameter.requested_data}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves an SEO overview for a keyword",
      "resource": "keywordExplorer"
    },
    {
      "name": "Get Keyword Question",
      "value": "GetKeywordQuestion",
      "action": "Get keyword question",
      "routing": {
        "request": {
          "url": "=/keywords/questions",
          "body": {
            "page": "={{$parameter.page}}",
            "order": "={{$parameter.additionalFields.order}}",
            "cpc_max": "={{$parameter.additionalFields.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields.cpc_min}}",
            "exclude": "={{$parameter.additionalFields.exclude}}",
            "include": "={{$parameter.additionalFields.include}}",
            "keyword": "={{$parameter.keyword}}",
            "kgr_max": "={{$parameter.additionalFields.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields.kvi_min}}",
            "order_by": "={{$parameter.order_by_question}}",
            "depth_max": "={{$parameter.depth_max}}",
            "depth_min": "={{$parameter.depth_min}}",
            "lineCount": "={{$parameter.lineCount}}",
            "volume_max": "={{$parameter.additionalFields.volume_max}}",
            "volume_min": "={{$parameter.additionalFields.volume_min}}",
            "exact_match": "={{$parameter.exact_match}}",
            "kvi_keep_na": "={{$parameter.additionalFields.kvi_keep_na}}",
            "keep_only_paa": "={{$parameter.keep_only_paa}}",
            "allintitle_max": "={{$parameter.additionalFields.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields.allintitle_min}}",
            "question_types": "={{$parameter.question_types}}",
            "word_count_max": "={{$parameter.additionalFields.word_count_max}}",
            "word_count_min": "={{$parameter.additionalFields.word_count_min}}",
            "competition_max": "={{$parameter.additionalFields.competition_max}}",
            "competition_min": "={{$parameter.additionalFields.competition_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves popular questions and PAA queries related to a keyword",
      "resource": "keywordExplorer"
    },
    {
      "name": "Get Keyword's Available Dates From SERP",
      "value": "GetKeywordAvailableDatesfromSERP",
      "action": "Get keyword available dates from serp",
      "routing": {
        "request": {
          "url": "=/keywords/serp/availableDates",
          "body": {
            "keyword": "={{$parameter.keyword}}"
          },
          "method": "POST"
        }
      },
      "description": "Identifies keywords for which the same expressions are highlighted in SERPs",
      "resource": "keywordExplorer"
    },
    {
      "name": "Get Keyword's SERP Page Evolution",
      "value": "GetKeywordSERPPageEvolution",
      "action": "Get keyword SERP page evolution",
      "routing": {
        "request": {
          "url": "=/keywords/serp/pageEvolution",
          "body": {
            "url": "={{$parameter.url}}",
            "keyword": "={{$parameter.keyword}}",
            "first_date": "={{$parameter.first_date}}",
            "second_date": "={{$parameter.second_date}}"
          },
          "method": "POST"
        }
      },
      "description": "Tracks a specific URL's ranking history for a given keyword between two dates",
      "resource": "keywordExplorer"
    },
    {
      "name": "Get Keyword's Site Structure",
      "value": "GetKeywordSiteStructure",
      "action": "Get keyword site structure",
      "routing": {
        "request": {
          "url": "=/keywords/siteStructure",
          "body": {
            "mode": "={{$parameter.mode_structure}}",
            "keyword": "={{ $parameter.keyword_siteStructure === \"\" ? null : $parameter.keyword_siteStructure }}",
            "keywords": "={{$parameter.keywords_siteStructure}}",
            "exact_match": "={{$parameter.exact_match}}",
            "granularity": "={{$parameter.granularity}}",
            "manual_common_10": "={{$parameter.manual_common_10}}",
            "manual_common_100": "={{$parameter.manual_common_100}}",
            "multipartite_modes": "={{$parameter.multipartite_modes}}",
            "neighbours_sources": "={{$parameter.neighbours_sources}}",
            "neighbours_sample_max_size": "={{$parameter.neighbours_sample_max_size}}"
          },
          "method": "POST"
        }
      },
      "description": "Analyzes keyword relationships and groups them based on shared statistics",
      "resource": "keywordExplorer"
    },
    {
      "name": "Scrap Keyword",
      "value": "ScrapKeyword",
      "action": "Scrap keyword",
      "routing": {
        "request": {
          "url": "=/keywords/scrap",
          "body": {
            "keywords": "={{$parameter.keywords}}"
          },
          "method": "POST"
        }
      },
      "description": "Refreshes keyword data, including SERP, Ads metrics and All in Title when necessary",
      "resource": "keywordExplorer"
    },
    {
      "name": "Compare Domain Keywords with Competitors",
      "value": "CompareDomainKeywordswithCompetitors",
      "action": "Compare domain keywords with competitors",
      "routing": {
        "request": {
          "url": "=/domains/siteCompetitors/keywordsDiff",
          "body": {
            "mode": "={{$parameter.mode}}",
            "page": "={{$parameter.page}}",
            "input": "={{$parameter.input}}",
            "bested": "={{$parameter.bested !== false ? undefined  : $parameter.bested }}",
            "besting": "={{$parameter.besting === false ? undefined  : $parameter.besting}}",
            "cpc_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.cpc_min}}",
            "kgr_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.kvi_min}}",
            "missing": "={{$parameter.missing === false ? undefined  : $parameter.missing}}",
            "order_by": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.order_by}}",
            "exclusive": "={{$parameter.exclusive === false ? undefined  : $parameter.exclusive}}",
            "lineCount": "={{$parameter.lineCount}}",
            "volume_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.volume_max}}",
            "volume_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.volume_min}}",
            "cpc_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.cpc_keep_na}}",
            "kgr_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.kgr_keep_na}}",
            "kvi_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.kvi_keep_na}}",
            "acceptedTypes": "={{$parameter.acceptedTypes}}",
            "allintitle_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.allintitle_min}}",
            "volume_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.volume_keep_na}}",
            "competition_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.competition_max}}",
            "competition_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.competition_min}}",
            "keyword_exclude": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.keyword_exclude}}",
            "keyword_include": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.keyword_include}}",
            "allintitle_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.allintitle_keep_na}}",
            "google_indexed_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.google_indexed_max}}",
            "google_indexed_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.google_indexed_min}}",
            "competition_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.competition_keep_na}}",
            "google_indexed_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.google_indexed_keep_na}}",
            "keyword_word_count_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.keyword_word_count_max}}",
            "keyword_word_count_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.keyword_word_count_min}}",
            "competitors_positions_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.competitors_positions_max}}",
            "competitors_positions_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.competitors_positions_min}}",
            "best_reference_traffic_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_reference_traffic_max}}",
            "best_reference_traffic_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_reference_traffic_min}}",
            "best_competitor_traffic_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_competitor_traffic_max}}",
            "best_competitor_traffic_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_competitor_traffic_min}}",
            "best_reference_position_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_reference_position_max}}",
            "best_reference_position_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_reference_position_min}}",
            "best_competitor_position_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_competitor_position_max}}",
            "best_competitor_position_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_competitor_position_min}}",
            "unique_competitors_count_max": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.unique_competitors_count_max}}",
            "unique_competitors_count_min": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.unique_competitors_count_min}}",
            "best_reference_traffic_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_reference_traffic_keep_na}}",
            "best_competitor_traffic_keep_na": "={{$parameter.additionalFields_CompareDomainKeywordswithCompetitors.best_competitor_traffic_keep_na}}"
          },
          "method": "POST"
        }
      },
      "description": "Compares keyword rankings between a given website and its competitors",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Best Keywords From Page",
      "value": "GetBestKeywordsfromPage",
      "action": "Get best keywords from page",
      "routing": {
        "request": {
          "url": "=/domains/pageBestKeywords",
          "body": {
            "input": "={{$parameter.input_visibility_bestkeyword}}",
            "strategy": "={{$parameter.strategy}}",
            "lineCount": "={{$parameter.lineCount_bestkeyword}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves the best-positioned keyword for the given pages",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Competitor Best Pages",
      "value": "GetCompetitorBestPages",
      "action": "Get competitor best pages",
      "routing": {
        "request": {
          "url": "=/domains/siteCompetitors/bestPages",
          "body": {
            "mode": "={{$parameter.mode}}",
            "page": "={{$parameter.page}}",
            "input": "={{$parameter.input}}",
            "order_by": "={{$parameter.order_by_competitor_keyworddata}}",
            "strategy": "={{$parameter.strategy}}",
            "lineCount": "={{$parameter.lineCount}}",
            "competitors": "={{$parameter.competitors}}",
            "keywords_max": "={{$parameter.additionalFields_GetCompetitorBestPages.keywords_max}}",
            "keywords_min": "={{$parameter.additionalFields_GetCompetitorBestPages.keywords_min}}",
            "positions_max": "={{$parameter.additionalFields_GetCompetitorBestPages.positions_max}}",
            "positions_min": "={{$parameter.additionalFields_GetCompetitorBestPages.positions_min}}",
            "total_traffic_max": "={{$parameter.additionalFields_GetCompetitorBestPages.total_traffic_max}}",
            "total_traffic_min": "={{$parameter.additionalFields_GetCompetitorBestPages.total_traffic_min}}",
            "bested_keywords_max": "={{$parameter.additionalFields_GetCompetitorBestPages.bested_keywords_max}}",
            "bested_keywords_min": "={{$parameter.additionalFields_GetCompetitorBestPages.bested_keywords_min}}",
            "besting_keywords_max": "={{$parameter.additionalFields_GetCompetitorBestPages.besting_keywords_max}}",
            "besting_keywords_min": "={{$parameter.additionalFields_GetCompetitorBestPages.besting_keywords_min}}",
            "total_traffic_keep_na": "={{$parameter.additionalFields_GetCompetitorBestPages.total_traffic_keep_na}}",
            "exclusive_keywords_max": "={{$parameter.additionalFields_GetCompetitorBestPages.exclusive_keywords_max}}",
            "exclusive_keywords_min": "={{$parameter.additionalFields_GetCompetitorBestPages.exclusive_keywords_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves the best-performing pages of a competitor's domain",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Competitor Keywords with the Best Position",
      "value": "GetCompetitorsKeywordsBestPosition",
      "action": "Get competitor keywords with the best position",
      "routing": {
        "request": {
          "url": "=/domains/siteCompetitors/keywordsBestPos",
          "body": {
            "mode": "={{$parameter.mode_bestposition}}",
            "page": "={{$parameter.page}}",
            "cpc_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.cpc_min}}",
            "kgr_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.kvi_min}}",
            "keywords": "={{$parameter.keywords_bestposition}}",
            "order_by": "={{$parameter.order_by_bestposition}}",
            "lineCount": "={{$parameter.lineCount}}",
            "volume_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.volume_max}}",
            "volume_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.volume_min}}",
            "competitors": "={{$parameter.competitors_bestposition}}",
            "cpc_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.cpc_keep_na}}",
            "kgr_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.kgr_keep_na}}",
            "kvi_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.kvi_keep_na}}",
            "allintitle_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.allintitle_min}}",
            "volume_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.volume_keep_na}}",
            "competition_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.competition_max}}",
            "competition_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.competition_min}}",
            "keyword_exclude": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.keyword_exclude}}",
            "keyword_include": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.keyword_include}}",
            "allintitle_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.allintitle_keep_na}}",
            "competition_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.competition_keep_na}}",
            "keyword_word_count_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.keyword_word_count_max}}",
            "keyword_word_count_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.keyword_word_count_min}}",
            "competitors_positions_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.competitors_positions_max}}",
            "competitors_positions_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.competitors_positions_min}}",
            "best_competitor_traffic_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.best_competitor_traffic_max}}",
            "best_competitor_traffic_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.best_competitor_traffic_min}}",
            "best_competitor_position_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.best_competitor_position_max}}",
            "best_competitor_position_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.best_competitor_position_min}}",
            "unique_competitors_count_max": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.unique_competitors_count_max}}",
            "unique_competitors_count_min": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.unique_competitors_count_min}}",
            "best_competitor_traffic_keep_na": "={{$parameter.additionalFields_GetCompetitorsKeywordsBestPosition.best_competitor_traffic_keep_na}}"
          },
          "method": "POST"
        }
      },
      "description": "Get the keywords of a competitor with the best positions",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Domain Categories Based on GMB Backlinks",
      "value": "GetDomainCategoriesbasedGMBBacklinks",
      "action": "Get domain categories based on gmb backlinks",
      "routing": {
        "request": {
          "url": "=/domains/gmbBacklinks/categories",
          "body": {
            "mode": "={{$parameter.mode}}",
            "input": "={{$parameter.input}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves the business categories associated with a given domain or URL based on GMB backlinks",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Domain Competitors",
      "value": "GetDomainCompetitors",
      "action": "Get domain competitors",
      "routing": {
        "request": {
          "url": "=/domains/siteCompetitors",
          "body": {
            "mode": "={{$parameter.mode}}",
            "page": "={{$parameter.page}}",
            "input": "={{$parameter.input}}",
            "lineCount": "={{$parameter.lineCount}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves a list of competitor domains for a given website",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Domain Data in Bulk",
      "value": "GetDomainDatainBulk",
      "action": "Get domain data in bulk",
      "routing": {
        "request": {
          "url": "=/domains/bulk",
          "body": {
            "mode": "={{$parameter.mode}}",
            "page": "={{$parameter.page}}",
            "order": "={{$parameter.additionalFields_GetDomainDatainBulk.order}}",
            "inputs": "={{$parameter.inputs}}",
            "order_by": "={{$parameter.order_by}}",
            "lineCount": "={{$parameter.lineCount}}",
            "total_top_3_max": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_3_max}}",
            "total_top_3_min": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_3_min}}",
            "total_top_10_max": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_10_max}}",
            "total_top_10_min": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_10_min}}",
            "total_top_50_max": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_50_max}}",
            "total_top_50_min": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_50_min}}",
            "total_top_100_max": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_100_max}}",
            "total_top_100_min": "={{$parameter.additionalFields_GetDomainDatainBulk.total_top_100_min}}",
            "total_traffic_max": "={{$parameter.additionalFields_GetDomainDatainBulk.total_traffic_max}}",
            "total_traffic_min": "={{$parameter.additionalFields_GetDomainDatainBulk.total_traffic_min}}",
            "unique_keywords_max": "={{$parameter.additionalFields_GetDomainDatainBulk.unique_keywords_max}}",
            "unique_keywords_min": "={{$parameter.additionalFields_GetDomainDatainBulk.unique_keywords_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves data for a list of provided domains or URLs",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Domain GMB Backlinks Map",
      "value": "GetDomainGMBBacklinksMap",
      "action": "Get domain gmb backlinks map",
      "routing": {
        "request": {
          "url": "=/domains/gmbBacklinks/map",
          "body": {
            "mode": "={{$parameter.mode}}",
            "input": "={{$parameter.input}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves the geographical locations of backlinks for a given domain or URL",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Domain Overview",
      "value": "GetDomainOverview",
      "action": "Get domain overview",
      "routing": {
        "request": {
          "url": "=/domains/overview",
          "body": {
            "lang": "={{$parameter.lang}}",
            "mode": "={{$parameter.mode}}",
            "input": "={{$parameter.input_domain}}",
            "requested_data": "={{$parameter.requested_data}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves an SEO overview for a domain or URL",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Domain Position History",
      "value": "GetDomainPositionHistory",
      "action": "Get domain position history",
      "routing": {
        "request": {
          "url": "=/domains/history",
          "body": {
            "mode": "={{$parameter.mode}}",
            "page": "={{$parameter.page}}",
            "input": "={{$parameter.input}}",
            "order": "={{$parameter.additionalFields_GetDomainPositionHistory.order}}",
            "cpc_max": "={{$parameter.additionalFields_GetDomainPositionHistory.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields_GetDomainPositionHistory.cpc_min}}",
            "date_to": "={{$parameter.date_to}}",
            "kgr_max": "={{$parameter.additionalFields_GetDomainPositionHistory.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields_GetDomainPositionHistory.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields_GetDomainPositionHistory.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields_GetDomainPositionHistory.kvi_min}}",
            "order_by": "={{$parameter.order_by_domain_history}}",
            "date_from": "={{$parameter.date_from}}",
            "lineCount": "={{$parameter.lineCount}}",
            "volume_max": "={{$parameter.additionalFields_GetDomainPositionHistory.volume_max}}",
            "volume_min": "={{$parameter.additionalFields_GetDomainPositionHistory.volume_min}}",
            "kvi_keep_na": "={{$parameter.additionalFields_GetDomainPositionHistory.kvi_keep_na}}",
            "still_there": "={{$parameter.additionalFields_GetDomainPositionHistory.still_there}}",
            "allintitle_max": "={{$parameter.additionalFields_GetDomainPositionHistory.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields_GetDomainPositionHistory.allintitle_min}}",
            "page_count_max": "={{$parameter.additionalFields_GetDomainPositionHistory.page_count_max}}",
            "page_count_min": "={{$parameter.additionalFields_GetDomainPositionHistory.page_count_min}}",
            "word_count_max": "={{$parameter.additionalFields_GetDomainPositionHistory.word_count_max}}",
            "word_count_min": "={{$parameter.additionalFields_GetDomainPositionHistory.word_count_min}}",
            "competition_max": "={{$parameter.additionalFields_GetDomainPositionHistory.competition_max}}",
            "competition_min": "={{$parameter.additionalFields_GetDomainPositionHistory.competition_min}}",
            "keyword_exclude": "={{$parameter.additionalFields_GetDomainPositionHistory.keyword_exclude}}",
            "keyword_include": "={{$parameter.additionalFields_GetDomainPositionHistory.keyword_include}}",
            "best_position_max": "={{$parameter.additionalFields_GetDomainPositionHistory.best_position_max}}",
            "best_position_min": "={{$parameter.additionalFields_GetDomainPositionHistory.best_position_min}}",
            "last_time_seen_max": "={{$parameter.additionalFields_GetDomainPositionHistory.last_time_seen_max}}",
            "last_time_seen_min": "={{$parameter.additionalFields_GetDomainPositionHistory.last_time_seen_min}}",
            "worst_position_max": "={{$parameter.additionalFields_GetDomainPositionHistory.worst_position_max}}",
            "worst_position_min": "={{$parameter.additionalFields_GetDomainPositionHistory.worst_position_min}}",
            "first_time_seen_max": "={{$parameter.additionalFields_GetDomainPositionHistory.first_time_seen_max}}",
            "first_time_seen_min": "={{$parameter.additionalFields_GetDomainPositionHistory.first_time_seen_min}}",
            "subdomain_count_max": "={{$parameter.additionalFields_GetDomainPositionHistory.subdomain_count_max}}",
            "subdomain_count_min": "={{$parameter.additionalFields_GetDomainPositionHistory.subdomain_count_min}}",
            "most_recent_position_max": "={{$parameter.additionalFields_GetDomainPositionHistory.most_recent_position_max}}",
            "most_recent_position_min": "={{$parameter.additionalFields_GetDomainPositionHistory.most_recent_position_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves the historical ranking positions of a specified domain or URL for various keywords",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Domain Top Pages",
      "value": "GetDomainTopPages",
      "action": "Get domains top pages",
      "routing": {
        "request": {
          "url": "=/domains/topPages",
          "body": {
            "mode": "={{$parameter.mode}}",
            "page": "={{$parameter.page}}",
            "input": "={{$parameter.input}}",
            "order": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.order}}",
            "order_by": "={{$parameter.order_by_domain_history}}",
            "lineCount": "={{$parameter.lineCount}}",
            "total_top_3_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_3_max}}",
            "total_top_3_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_3_min}}",
            "total_top_10_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_10_max}}",
            "total_top_10_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_10_min}}",
            "total_top_50_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_50_max}}",
            "total_top_50_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_50_min}}",
            "total_top_100_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_100_max}}",
            "total_top_100_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_100_min}}",
            "total_traffic_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_traffic_max}}",
            "total_traffic_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_traffic_min}}",
            "known_versions_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.known_versions_max}}",
            "known_versions_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.known_versions_min}}",
            "unique_keywords_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.unique_keywords_max}}",
            "unique_keywords_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.unique_keywords_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves top-performing pages of a domain or URL",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Expired Domains",
      "value": "GetExpiredDomains",
      "action": "Get expired domains",
      "routing": {
        "request": {
          "url": "=/domains/expired",
          "body": {
            "page": "={{$parameter.page}}",
            "order": "={{$parameter.additionalFields_GetExpiredDomains.order}}",
            "keyword": "={{$parameter.keyword_expired}}",
            "order_by": "={{$parameter.order_by_expired}}",
            "lineCount": "={{$parameter.lineCount}}",
            "fb_shares_max": "={{$parameter.additionalFields_GetExpiredDomains.fb_shares_max}}",
            "fb_shares_min": "={{$parameter.additionalFields_GetExpiredDomains.fb_shares_min}}",
            "firstseen_min": "={{$parameter.additionalFields_GetExpiredDomains.firstseen_min}}",
            "last_seen_max": "={{$parameter.additionalFields_GetExpiredDomains.last_seen_max}}",
            "last_seen_min": "={{$parameter.additionalFields_GetExpiredDomains.last_seen_min}}",
            "first_seen_max": "={{$parameter.additionalFields_GetExpiredDomains.first_seen_max}}",
            "fb_comments_max": "={{$parameter.additionalFields_GetExpiredDomains.fb_comments_max}}",
            "fb_comments_min": "={{$parameter.additionalFields_GetExpiredDomains.fb_comments_min}}",
            "total_pages_max": "={{$parameter.additionalFields_GetExpiredDomains.total_pages_max}}",
            "total_pages_min": "={{$parameter.additionalFields_GetExpiredDomains.total_pages_min}}",
            "total_domains_max": "={{$parameter.additionalFields_GetExpiredDomains.total_domains_max}}",
            "total_domains_min": "={{$parameter.additionalFields_GetExpiredDomains.total_domains_min}}",
            "total_traffic_max": "={{$parameter.additionalFields_GetExpiredDomains.total_traffic_max}}",
            "total_traffic_min": "={{$parameter.additionalFields_GetExpiredDomains.total_traffic_min}}",
            "matching_pages_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_pages_max}}",
            "matching_pages_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_pages_min}}",
            "pinterest_pins_max": "={{$parameter.additionalFields_GetExpiredDomains.pinterest_pins_max}}",
            "pinterest_pins_min": "={{$parameter.additionalFields_GetExpiredDomains.pinterest_pins_min}}",
            "total_keywords_max": "={{$parameter.additionalFields_GetExpiredDomains.total_keywords_max}}",
            "total_keywords_min": "={{$parameter.additionalFields_GetExpiredDomains.total_keywords_min}}",
            "root_domain_exclude": "={{$parameter.additionalFields_GetExpiredDomains.root_domain_exclude}}",
            "root_domain_include": "={{$parameter.additionalFields_GetExpiredDomains.root_domain_include}}",
            "matching_traffic_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_traffic_max}}",
            "matching_traffic_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_traffic_min}}",
            "matching_keywords_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_keywords_max}}",
            "matching_keywords_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_keywords_min}}",
            "referring_domains_max": "={{$parameter.additionalFields_GetExpiredDomains.referring_domains_max}}",
            "referring_domains_min": "={{$parameter.additionalFields_GetExpiredDomains.referring_domains_min}}",
            "last_time_available_max": "={{$parameter.additionalFields_GetExpiredDomains.last_time_available_max}}",
            "last_time_available_min": "={{$parameter.additionalFields_GetExpiredDomains.last_time_available_min}}",
            "total_top_3_traffic_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_3_traffic_max}}",
            "total_top_3_traffic_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_3_traffic_min}}",
            "first_time_available_max": "={{$parameter.additionalFields_GetExpiredDomains.first_time_available_max}}",
            "first_time_available_min": "={{$parameter.additionalFields_GetExpiredDomains.first_time_available_min}}",
            "total_top_10_traffic_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_10_traffic_max}}",
            "total_top_10_traffic_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_10_traffic_min}}",
            "total_top_50_traffic_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_50_traffic_max}}",
            "total_top_50_traffic_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_50_traffic_min}}",
            "total_top_100_traffic_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_100_traffic_max}}",
            "total_top_100_traffic_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_100_traffic_min}}",
            "total_top_3_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_3_positions_max}}",
            "total_top_3_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_3_positions_min}}",
            "total_top_10_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_10_positions_max}}",
            "total_top_10_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_10_positions_min}}",
            "total_top_50_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_50_positions_max}}",
            "total_top_50_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_50_positions_min}}",
            "total_top_100_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.total_top_100_positions_max}}",
            "total_top_100_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.total_top_100_positions_min}}",
            "matching_top_3_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_3_positions_max}}",
            "matching_top_3_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_3_positions_min}}",
            "matching_top_10_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_10_positions_max}}",
            "matching_top_10_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_10_positions_min}}",
            "matching_top_50_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_50_positions_max}}",
            "matching_top_50_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_50_positions_min}}",
            "matching_top_100_positions_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_100_positions_max}}",
            "matching_top_100_positions_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_top_100_positions_min}}",
            "matching_most_recent_position_max": "={{$parameter.additionalFields_GetExpiredDomains.matching_most_recent_position_max}}",
            "matching_most_recent_position_min": "={{$parameter.additionalFields_GetExpiredDomains.matching_most_recent_position_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves a list of (registar free) expired domains with SEO metrics",
      "resource": "siteExplorer"
    },
    {
      "name": "Get GMB Backlink",
      "value": "GetGMBBacklink",
      "action": "Get gmb backlink",
      "routing": {
        "request": {
          "url": "=/domains/gmbBacklinks",
          "body": {
            "mode": "={{$parameter.mode}}",
            "page": "={{$parameter.page}}",
            "input": "={{$parameter.input}}",
            "order": "={{$parameter.additionalFields_GetGMBBacklink.order}}",
            "order_by": "={{$parameter.order_by_backlink}}",
            "lineCount": "={{$parameter.lineCount}}",
            "is_claimed": "={{$parameter.additionalFields_GetGMBBacklink.is_claimed}}",
            "latitude_max": "={{$parameter.additionalFields_GetGMBBacklink.latitude_max}}",
            "latitude_min": "={{$parameter.additionalFields_GetGMBBacklink.latitude_min}}",
            "longitude_max": "={{$parameter.additionalFields_GetGMBBacklink.longitude_max}}",
            "longitude_min": "={{$parameter.additionalFields_GetGMBBacklink.longitude_min}}",
            "latitude_keep_na": "={{$parameter.additionalFields_GetGMBBacklink.latitude_keep_na}}",
            "rating_count_max": "={{$parameter.additionalFields_GetGMBBacklink.rating_count_max}}",
            "rating_count_min": "={{$parameter.additionalFields_GetGMBBacklink.rating_count_min}}",
            "rating_value_max": "={{$parameter.additionalFields_GetGMBBacklink.rating_value_max}}",
            "rating_value_min": "={{$parameter.additionalFields_GetGMBBacklink.rating_value_min}}",
            "longitude_keep_na": "={{$parameter.additionalFields_GetGMBBacklink.longitude_keep_na}}",
            "categories_exclude": "={{$parameter.additionalFields_GetGMBBacklink.categories_exclude}}",
            "categories_include": "={{$parameter.additionalFields_GetGMBBacklink.categories_include}}",
            "rating_count_keep_na": "={{$parameter.additionalFields_GetGMBBacklink.rating_count_keep_na}}",
            "rating_value_keep_na": "={{$parameter.additionalFields_GetGMBBacklink.rating_value_keep_na}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves GMB backlink data for a specified domain or URL",
      "resource": "siteExplorer"
    },
    {
      "name": "Get History of Domain Pages",
      "value": "GetHistoryofDomainPages",
      "action": "Get history of domain pages",
      "routing": {
        "request": {
          "url": "=/domains/pagesHistory",
          "body": {
            "mode": "={{$parameter.mode}}",
            "page": "={{$parameter.page}}",
            "input": "={{$parameter.input}}",
            "order": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.order}}",
            "date_to": "={{$parameter.date_to}}",
            "order_by": "={{$parameter.order_by_pagehistory}}",
            "date_from": "={{$parameter.date_from}}",
            "lineCount": "={{$parameter.lineCount}}",
            "total_top_3_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_3_max}}",
            "total_top_3_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_3_min}}",
            "total_top_10_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_10_max}}",
            "total_top_10_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_10_min}}",
            "total_top_50_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_50_max}}",
            "total_top_50_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_50_min}}",
            "total_top_100_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_100_max}}",
            "total_top_100_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_top_100_min}}",
            "total_traffic_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_traffic_max}}",
            "total_traffic_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.total_traffic_min}}",
            "known_versions_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.known_versions_max}}",
            "known_versions_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.known_versions_min}}",
            "unique_keywords_max": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.unique_keywords_max}}",
            "unique_keywords_min": "={{$parameter.additionalFields_GetDomainTopPagesGetHistoryofDomainPages.unique_keywords_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Fetches metrics for specific pages of a domain",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Keyword Data From an URL",
      "value": "GetKeywordDatafromURL",
      "action": "Get keyword data from an url",
      "routing": {
        "request": {
          "url": "=/domains/keywords",
          "body": {
            "mode": "={{$parameter.mode}}",
            "page": "={{$parameter.page}}",
            "input": "={{$parameter.input}}",
            "order": "={{$parameter.additionalFields_GetKeywordDatafromURL.order}}",
            "cpc_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.cpc_min}}",
            "kgr_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.kvi_min}}",
            "keywords": "={{$parameter.keywords_bestposition}}",
            "order_by": "={{$parameter.order_by_competitor_keyworddata}}",
            "lineCount": "={{$parameter.lineCount}}",
            "volume_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.volume_max}}",
            "volume_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.volume_min}}",
            "kvi_keep_na": "={{$parameter.additionalFields_GetKeywordDatafromURL.kvi_keep_na}}",
            "traffic_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.traffic_max}}",
            "traffic_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.traffic_min}}",
            "position_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.position_max}}",
            "position_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.position_min}}",
            "serp_date_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.serp_date_max}}",
            "serp_date_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.serp_date_min}}",
            "title_exclude": "={{$parameter.additionalFields_GetKeywordDatafromURL.title_exclude}}",
            "title_include": "={{$parameter.additionalFields_GetKeywordDatafromURL.title_include}}",
            "allintitle_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.allintitle_min}}",
            "competition_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.competition_max}}",
            "competition_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.competition_min}}",
            "keyword_exclude": "={{$parameter.additionalFields_GetKeywordDatafromURL.keyword_exclude}}",
            "keyword_include": "={{$parameter.additionalFields_GetKeywordDatafromURL.keyword_include}}",
            "title_word_count_max": "={{$parameter.additionalFields_GetKeywordDatafromURL.title_word_count_max}}",
            "title_word_count_min": "={{$parameter.additionalFields_GetKeywordDatafromURL.title_word_count_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves keyword data for a given URL or domain",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Ranking of Domain Keyword",
      "value": "GetRankingofDomainKeyword",
      "action": "Get ranking of domain keyword",
      "routing": {
        "request": {
          "url": "=/domains/positions",
          "body": {
            "mode": "={{$parameter.mode}}",
            "page": "={{$parameter.page}}",
            "input": "={{$parameter.input}}",
            "order": "={{$parameter.additionalFields_GetRankingofDomainKeyword.order}}",
            "cpc_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.cpc_max}}",
            "cpc_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.cpc_min}}",
            "kgr_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.kgr_max}}",
            "kgr_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.kgr_min}}",
            "kvi_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.kvi_max}}",
            "kvi_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.kvi_min}}",
            "order_by": "={{$parameter.order_by_ranking}}",
            "lineCount": "={{$parameter.lineCount}}",
            "volume_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.volume_max}}",
            "volume_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.volume_min}}",
            "kvi_keep_na": "={{$parameter.additionalFields_GetRankingofDomainKeyword.kvi_keep_na}}",
            "traffic_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.traffic_max}}",
            "traffic_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.traffic_min}}",
            "position_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.position_max}}",
            "position_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.position_min}}",
            "serp_date_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.serp_date_max}}",
            "serp_date_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.serp_date_min}}",
            "title_exclude": "={{$parameter.additionalFields_GetRankingofDomainKeyword.title_exclude}}",
            "title_include": "={{$parameter.additionalFields_GetRankingofDomainKeyword.title_include}}",
            "allintitle_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.allintitle_max}}",
            "allintitle_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.allintitle_min}}",
            "competition_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.competition_max}}",
            "competition_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.competition_min}}",
            "keyword_exclude": "={{$parameter.additionalFields_GetRankingofDomainKeyword.keyword_exclude}}",
            "keyword_include": "={{$parameter.additionalFields_GetRankingofDomainKeyword.keyword_include}}",
            "keyword_word_count_max": "={{$parameter.additionalFields_GetRankingofDomainKeyword.keyword_word_count_max}}",
            "keyword_word_count_min": "={{$parameter.additionalFields_GetRankingofDomainKeyword.keyword_word_count_min}}"
          },
          "method": "POST"
        }
      },
      "description": "Fetches a current domain rankings for a domain or URL",
      "resource": "siteExplorer"
    },
    {
      "name": "Get Visibility Trend of Domains",
      "value": "GetVisibilityTrendofDomains",
      "action": "Get visibility trend of domains",
      "routing": {
        "request": {
          "url": "=/domains/history/visibilityTrends",
          "body": {
            "mode": "={{$parameter.mode}}",
            "type": "={{$parameter.type}}",
            "input": "={{$parameter.input_visibility_bestkeyword}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves a visibility trend data for a given list of websites or URLs",
      "resource": "siteExplorer"
    },
    {
      "name": "Reveal Expired Domains",
      "value": "RevealExpiredDomains",
      "action": "Reveal expired domains",
      "routing": {
        "request": {
          "url": "=/domains/expired/reveal",
          "body": {
            "root_domain_keys": "={{$parameter.root_domain_keys.toInt()}}"
          },
          "method": "POST"
        }
      },
      "description": "Reveals expired root domains using the provided keys retrieved from the domains/expired endpoint",
      "resource": "siteExplorer"
    }
  ]

npm_readme:
  # n8n-nodes-haloscan

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

  _Haloscan is an API providing a suite of powerful tools for keyword research, competitor analysis, SERP tracking, expired domain discovery, and more._

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

  [Overview](#Overview)  
  [Authentication](#Authentication)  
  [Operations](#Operations)  
  [Usage](#Usage)  
  [Troubleshooting](#Troubleshooting)  
  [Resources](#Resources)  
  # **Custom App for Haloscan API**

  ## **Overview**

  This custom app integrates with the **Haloscan API**, providing a suite of powerful tools for keyword research, competitor analysis, SERP tracking, expired domain discovery, and more. Designed for **SEO professionals, marketers, and businesses**, this app streamlines data retrieval and analysis, allowing users to make data-driven decisions efficiently.

  ---

  ## **Authentication**

  To use the app, you must authenticate with your **Haloscan API Key**:

  1. Obtain your API key from your **Haloscan account**.
  2. Enter the API key in the app settings or provide it when prompted.
  3. Ensure the key has **sufficient credits** for API calls.

  ---

  ## **Operations**

  ### **User Credit & Account**
  - **Get User Credit** – Retrieves the remaining credit for the current user.

  ### **Keyword Research**
  - **Get Keywords Overview** – Retrieves an SEO overview for a keyword.
  - **Find Keywords Match** – Finds keyword variations based on a seed keyword.
  - **Find Similar Keywords** – Finds keywords similar to a given keyword.
  - **Get Keywords Highlights** – Identifies keyword highlights with high similarity, search volume, CPC, and competition metrics.
  - **Find Related Keyword** – Finds related keywords based on a seed keyword.
  - **Get Keywords Questions** – Retrieves popular question-based queries related to a keyword.
  - **Find Keywords Synonyms** – Finds keyword synonyms.
  - **Find Keywords** – Finds related keywords based on a seed keyword.
  - **Get Keywords Site Structure** – Analyzes keyword relationships and groups them based on shared statistics.
  - **Compare Keywords SERP** – Compares SERPs for a given keyword.
  - **Get Keywords Available Dates from SERP** – Retrieves a list of available dates for requested keyword in the SERP data.
  - **Get Keywords SERP Page Evolution** – Tracks the ranking history of a specific URL for a given keyword between two dates.
  - **Get Keywords Data (Bulk)** – Retrieves bulk keyword data.
  - **Scrap Keywords** – Submits a request to refresh keyword data.

  ### **Domain & URL Analysis**
  - **Get a Domain Overview** – Retrieves an SEO overview for a domain or URL.
  - **Get Ranking of Domain's Keyword** – Fetches current domain rankings for a domain or URL.
  - **Get a Domain's Top Pages** – Retrieves top-performing pages of a domain or URL.
  - **Get History of a Domain's Position** – Retrieves the historical ranking positions of a specified domain or URL for various keywords.
  - **Get History of a Domain's Pages** – Fetches historical keyword rankings, traffic, and visibility metrics for specific pages of a domain.
  - **Get Best Keywords from Page** – Retrieves the best-positioned keywords for the given pages.
  - **Get Keywords Data from URL** – Retrieves keyword data for a given URL or domain.
  - **Get Domains Data (in Bulk)** – Retrieves bulk domain data for a list of provided domains or URLs.

  ### **Competitor Analysis**
  - **Get Domains Competitors** – Retrieves a list of competitor domains for a given website.
  - **Compare Domain's Keywords With Competitors** – Compares keyword rankings between a given website and its competitors.
  - **Get Competitors Best Pages** – Retrieves the best-performing pages of competitor domains compared to a given website.

  ### **Visibility & Trends**
  - **Get Visibility Trends of Domains** – Retrieves visibility trend data for a given website or URL.

  ### **Expired Domains**
  - **Get Expired Domains** – Retrieves a list of expired domains with SEO metrics.
  - **Reveal Expired Domains** – Reveals expired root domains using the provided keys retrieved from the domains/expired endpoint.

  ### **Google My Business (GMB) Insights**
  - **Get GMB Backlinks** – Retrieves Google My Business (GMB) backlink data for a specified domain or URL.
  - **Get Domain's GMB Backlinks Map** – Retrieves the geographical locations of Google My Business (GMB) backlinks for a given domain or URL.
  - **Get Domain's Categories (based on GMB Backlinks)** – Retrieves the business categories associated with a given domain or URL based on GMB backlinks.

  ---

  ## **Usage**

  ### **1. Keyword Discovery**
  - Enter a seed keyword (e.g., `"digital marketing"`)
  - Retrieve **similar keywords**, **question-based keywords**, and **synonyms**  

  ### **2. Competitor Analysis**
  - Input a domain (e.g., `"example.com"`)
  - Get **competitor websites**, **keyword ranking comparisons**, and **top-performing competitor pages**  

  ### **3. SERP Tracking**
  - Enter a keyword (e.g., `"best SEO tools"`)
  - Compare **SERP rankings across two dates**
  - Analyze **position changes** for top URLs  

  ### **4. Expired Domains**
  - Search for **expired domains** related to a niche
  - Unlock **domain details** for purchase evaluation  

  ### **5. GMB Insights**
  - Retrieve **business listings** associated with a domain
  - Identify **backlinks and business categories**  

  ---

  ## **Troubleshooting**

  ### **1. API Key Issues**
  - **Problem:** API key not working.  
  - **Solution:** Ensure the key is **correct**, **active**, and has **sufficient credits**.

  ### **2. No Results Found**
  - **Problem:** A keyword or domain returns no data.  
  - **Solution:** Try a **broader query**, **check spelling**, or **increase line count**.

  ### **3. Expired Domain Data Not Revealed**
  - **Problem:** Expired domains show limited data.  
  - **Solution:** Use the **reveal expired domains** module to unlock details.

  ### **4. Rate Limit Exceeded**
  - **Problem:** Too many API calls in a short time.  
  - **Solution:** Space out requests or **upgrade your Haloscan API plan**.

  ---

  ## **Resources**
  For detailed API documentation, refer to:  
  🔗 **[https://tool.haloscan.com/sign-in](#)**

  ---

ai_documentation_summary:
  {"purpose":"Integrates the Haloscan API into n8n workflows to perform advanced SEO analysis, including keyword research, competitor tracking, SERP monitoring, and expired domain discovery.","capabilities":["Retrieve user credit and account information","Generate keyword variations, synonyms, and related questions","Analyze SERP rankings and track position history over time","Compare keyword performance between domains","Identify competitor domains and their top-performing pages","Retrieve visibility trends for specific domains","Discover and reveal expired domains with SEO metrics","Extract Google My Business backlinks and business categories"],"authentication":"API key required","commonUseCases":["Conducting comprehensive keyword research for content strategy","Monitoring competitor keyword rankings and SERP movements","Identifying expired domains for link building opportunities","Analyzing Google My Business backlink profiles and categories"],"limitations":["Requires an active Haloscan account with sufficient API credits","Some features like revealing expired domain details require additional steps or specific keys","May return no results if queries are too specific or contain spelling errors"],"relatedNodes":[]}


node_type: @easy8/n8n-nodes-easy8.easy8
package_name: @easy8/n8n-nodes-easy8
display_name: Easy8
description: Easy8 Operations
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: martinnovak
author_github_url: https://github.com/Easy8Com/n8n-nodes-easy8.git
npm_package_name: @easy8/n8n-nodes-easy8
npm_version: 0.1.0
community_fetched_at: 2026-07-14T14:40:34.036Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "issues",
      "options": [
        {
          "name": "Issue",
          "value": "issues"
        },
        {
          "name": "Lead",
          "value": "easy_leads"
        },
        {
          "name": "Opportunity",
          "value": "easy_crm_cases"
        },
        {
          "name": "Project",
          "value": "projects"
        },
        {
          "name": "Account",
          "value": "easy_contacts"
        },
        {
          "name": "Attendance",
          "value": "easy_attendances"
        },
        {
          "name": "Personal Contact",
          "value": "easy_personal_contacts"
        },
        {
          "name": "Time Entry",
          "value": "time_entries"
        },
        {
          "name": "User",
          "value": "users"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get-many",
      "options": [
        {
          "name": "Get One",
          "value": "get-one",
          "action": "Get one",
          "description": "Get a single entity"
        },
        {
          "name": "Get Many",
          "value": "get-many",
          "action": "Get many",
          "description": "Get multiple entities"
        },
        {
          "name": "Add Comment",
          "value": "add-comment",
          "action": "Add comment",
          "description": "Add a comment to entity"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create",
          "description": "Create entity"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update",
          "description": "Update entity"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "easy_leads",
            "issues",
            "easy_crm_cases",
            "easy_contacts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get-many",
      "options": [
        {
          "name": "Get One",
          "value": "get-one",
          "action": "Get one",
          "description": "Get a single attendance entity"
        },
        {
          "name": "Get Many",
          "value": "get-many",
          "action": "Get many",
          "description": "Get multiple attendance entities"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create",
          "description": "Create attendance entity"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update",
          "description": "Update attendance entity"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "easy_attendances"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get-many",
      "options": [
        {
          "name": "Get One",
          "value": "get-one",
          "action": "Get one",
          "description": "Get a single project"
        },
        {
          "name": "Get Many",
          "value": "get-many",
          "action": "Get many",
          "description": "Get multiple projects"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "projects"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get-many",
      "options": [
        {
          "name": "Get One",
          "value": "get-one",
          "action": "Get one",
          "description": "Get a single personal contact"
        },
        {
          "name": "Get Many",
          "value": "get-many",
          "action": "Get many",
          "description": "Get multiple personal contacts"
        },
        {
          "name": "Add Comment",
          "value": "add-comment",
          "action": "Add comment",
          "description": "Add comment to personal contact"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create",
          "description": "Create personal contact"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update",
          "description": "Update personal contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "easy_personal_contacts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get-many",
      "options": [
        {
          "name": "Get One",
          "value": "get-one",
          "action": "Get one",
          "description": "Get a single entity"
        },
        {
          "name": "Get Many",
          "value": "get-many",
          "action": "Get many",
          "description": "Get multiple entities"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create",
          "description": "Create entity"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update",
          "description": "Update entity"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "time_entries"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get-many",
      "options": [
        {
          "name": "Get One",
          "value": "get-one",
          "action": "Get one",
          "description": "Get a single user"
        },
        {
          "name": "Get Many",
          "value": "get-many",
          "action": "Get many",
          "description": "Get multiple user"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create",
          "description": "Create user"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update",
          "description": "Update user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "users"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get One",
      "value": "get-one",
      "action": "Get one",
      "description": "Get a single entity",
      "resource": "easy_leads"
    },
    {
      "name": "Get Many",
      "value": "get-many",
      "action": "Get many",
      "description": "Get multiple entities",
      "resource": "easy_leads"
    },
    {
      "name": "Add Comment",
      "value": "add-comment",
      "action": "Add comment",
      "description": "Add a comment to entity",
      "resource": "easy_leads"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "description": "Create entity",
      "resource": "easy_leads"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "description": "Update entity",
      "resource": "easy_leads"
    },
    {
      "name": "Get One",
      "value": "get-one",
      "action": "Get one",
      "description": "Get a single attendance entity",
      "resource": "easy_attendances"
    },
    {
      "name": "Get Many",
      "value": "get-many",
      "action": "Get many",
      "description": "Get multiple attendance entities",
      "resource": "easy_attendances"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "description": "Create attendance entity",
      "resource": "easy_attendances"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "description": "Update attendance entity",
      "resource": "easy_attendances"
    },
    {
      "name": "Get One",
      "value": "get-one",
      "action": "Get one",
      "description": "Get a single project",
      "resource": "projects"
    },
    {
      "name": "Get Many",
      "value": "get-many",
      "action": "Get many",
      "description": "Get multiple projects",
      "resource": "projects"
    },
    {
      "name": "Get One",
      "value": "get-one",
      "action": "Get one",
      "description": "Get a single personal contact",
      "resource": "easy_personal_contacts"
    },
    {
      "name": "Get Many",
      "value": "get-many",
      "action": "Get many",
      "description": "Get multiple personal contacts",
      "resource": "easy_personal_contacts"
    },
    {
      "name": "Add Comment",
      "value": "add-comment",
      "action": "Add comment",
      "description": "Add comment to personal contact",
      "resource": "easy_personal_contacts"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "description": "Create personal contact",
      "resource": "easy_personal_contacts"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "description": "Update personal contact",
      "resource": "easy_personal_contacts"
    },
    {
      "name": "Get One",
      "value": "get-one",
      "action": "Get one",
      "description": "Get a single entity",
      "resource": "time_entries"
    },
    {
      "name": "Get Many",
      "value": "get-many",
      "action": "Get many",
      "description": "Get multiple entities",
      "resource": "time_entries"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "description": "Create entity",
      "resource": "time_entries"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "description": "Update entity",
      "resource": "time_entries"
    },
    {
      "name": "Get One",
      "value": "get-one",
      "action": "Get one",
      "description": "Get a single user",
      "resource": "users"
    },
    {
      "name": "Get Many",
      "value": "get-many",
      "action": "Get many",
      "description": "Get multiple user",
      "resource": "users"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "description": "Create user",
      "resource": "users"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "description": "Update user",
      "resource": "users"
    }
  ]

npm_readme:
  # Easy8 credentials and node for n8n

  This repo contains n8n node for communication with Easy8.

  ## How to install

  ### ⚙️ Requirements

  To use our community node, you need to have the following requirements:

  - n8n 1.54.4 or newer

  ### 🛠️ Installation in n8n

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

  ### 🔑 Setup credentials

  You need to set up credentials for the Easy8 node.
  You can do this by going to the credentials section in n8n and adding a new credential of type "Easy8".

  In the newly created credential, you need to fill in domain, and user api key.

  The domain should be, for example, `https://instance.easyproject.com`.

  To find the API key, go to your Easy8 instance, click on your profile in the top right corner.

  ![Go to profile](images/cred-guide-1.png)

  Your profile window will open. Click on the "Edit" button.

  ![Profile window](images/cred-guide-2.png)

  Your profile edit page will open. Scroll down to the Preferences section. Here just copy the API access key.

  ![Preferences section with API key](images/cred-guide-3.png)

  Now, your credentials are ready to use.

  # Easy8 node

  The custom node is created to handle all aspects of Easy8 integration with n8n.
  Currently available operations and resources are:

  ## Easy8 Entities

  A list of all available entities in Easy8 node.

  - Accounts
  - Issues
  - Leads
  - Opportunities
  - Personal contacts
  - Users

  ## Accounts

  Account entity is used to manage company contacts. It has identifier `easy_contacts`

  **Operations**

  - **Get one** - returns a detailed view of a single entity. The entity is specified by its ID.
  - **Get many** - returns a list of entities. You should use easy query id to specify the filter.
  - **Add comment** - adds a comment to the entity.
  - **Create** - creates a new account.
    - Custom fields
    - Industry ID
    - Name (known as `firstname` in the entity schema)
    - Type ID
    - Account Manager ID
    - External Account Manager ID
    - Account Status ID
    - Account Level ID
    - Author ID
    - Account Opened
    - Account Closed
    - Customer Left Reason ID
    - Primary Billing Information (see below)
    - Contact Information (see below)
  - **Update** - updates some fields of the entity.
    - Custom fields
    - Industry ID
    - Name (known as `firstname` in the entity schema)
    - Type ID
    - Account Manager ID
    - External Account Manager ID
    - Account Status ID
    - Account Level ID
    - Author ID
    - Account Opened
    - Account Closed
    - Customer Left Reason ID
    - Primary Billing Information (see below)
    - Contact Information (see below)

  ### Primary Billing and Contact Information

  This is a complex field that contains information about the account's billing and contact details. The structure
  is the same for both cases.

  - Company Name
  - Street
  - City
  - Country Code
  - Country Division
  - Postal Code
  - Email
  - Telephone
  - VAT Number
  - VAT Rate
  - Bank Account Number
  - IBAN
  - Variable Symbol
  - SWIFT
  - BIC

  ## Attendance

  Attendance is used to track user attendance. The entity name is `easy_attendance`.

  **Operations**

  - **Get one** - returns a detailed view of a single attendance record. The entity is specified by its ID.
  - **Get many** - returns a list of attendance records. You should use easy query id to specify the filter.
  - **Create** - creates a new attendance record.
    - Arrival (required)
    - Departure
    - Description
    - Activity ID
  - **Update** - updates some fields of the attendance record.
    - Arrival
    - Departure
    - Description
    - Activity ID

  ## Issues

  Issues are mostly Redmine issues. The identifier is `issue`.

  **Operations**

  - **Get one** - returns a detailed view of a single entity. The entity is specified by its ID.
  - **Get many** - returns a list of entities. You should use easy query id to specify the filter.
  - **Add comment** - adds a comment to the entity.
  - **Create** - creates a new issue.
    - Subject (required)
    - Project ID (required)
    - Assigned To ID
    - Custom fields
    - Description
    - Done Ratio
    - Due Date
    - Estimated Hours
    - Is Private
    - Parent Issue ID
    - Priority ID
    - Start Date
    - Status ID
    - Tracker ID
  - **Update** - updates some fields of the entity.
    - Assigned To ID
    - Custom fields
    - Description
    - Done Ratio
    - Due Date
    - Estimated Hours
    - Is Private
    - Parent Issue ID
    - Priority ID
    - Project ID
    - Start Date
    - Subject
    - Tracker ID
    - Status ID
  - **Add Comment** - adds a comment to the issue.
    - Comment (required)
    - Private Note

  ## Leads

  Leads are CRM entities that refer to potential custom.
  The identifier is `easy_lead`.

  **Operations**

  - **Get one** - returns a detailed view of a single lead. The entity is specified by its ID.
  - **Get many** - returns a list of leads. You should use easy query id to specify the filter.
  - **Add comment** - adds a comment to the lead.
  - **Create** - creates a new lead.
    - Company Name
    - Description
    - Custom fields
  - **Update** - updates some fields of the leads.
    - Company Name
    - Description
    - Custom fields

  ## Opportunities

  Opportunities are CRM entities that represent a potential sale. The entity name is `easy_crm_case`.

  **Operations**

  - **Get one** - returns a detailed view of a single opportunity. The entity is specified by its ID.
  - **Get many** - returns a list of entities. You should use easy query id to specify the filter.
  - **Add comment** - adds a comment to the opportunity.
  - **Create** - creates a new opportunity.
    - Name (required)
    - Project ID (required)
    - Account ID (required)
    - Status ID
    - Assigned To ID
    - External Assigned To ID
    - Price
    - Contract Date
    - Custom fields
  - **Update** - updates some fields of the opportunity.
    - Name
    - Description
    - Project ID
    - Status ID
    - Assigned To ID
    - External Assigned To ID
    - Price
    - Contract Date
    - Custom fields

  ## Personal contacts

  Personal contacts are CRM entities that represent a person. The entity name is `easy_personal_contacts`.

  **Operations**

  - **Get one** - returns a detailed view of a single personal contact. The entity is specified by its ID.
  - **Get many** - returns a list of entities. You should use easy query id to specify the filter.
  - **Create** - creates a new personal contact.
    - Account ID (required or partner ID)
    - Partner ID (required or account ID)
    - First name (required)
    - Last name (required)
    - Email (required)
    - Job title
    - Custom fields
  - **Update** - updates some fields of the personal contact.
    - Account ID
    - Partner ID
    - First name
    - Last name
    - Email
    - Job title
    - Custom fields

  ## Projects

  Projects are used to manage project tasks. The entity name is `project`.

  **Operations**

  - **Get one** - returns a detailed view of a single project. The entity is specified by its ID.
  - **Get many** - returns a list of projects. You should use easy query id to specify the filter.

  ## Time entries

  Time entries are used to track time spent on issues. The entity name is `time_entry`.

  **Operations**

  - **Get one** - returns a detailed view of a single time entry. The entity is specified by its ID.
  - **Get many** - returns a list of time entries. You should use easy query id to specify the filter.
  - **Create** - creates a new time entry.
    - Hours (required)
    - Activity ID
    - Comment
    - Project ID
    - Spent On
    - User ID
    - Custom Fields
  - **Update** - updates some fields of the time entry.
    - Activity ID
    - Comment
    - Hours
    - Project ID
    - Spent On
    - User ID
    - Custom Fields

  ## Users

  Users are Easy8 users. The entity name is `user`.

  **Operations**

  - **Get one** - returns a detailed view of a single user. The entity is specified by its ID.
  - **Get many** - returns a list of entities. You should use easy query id to specify the filter.
  - **Create** - creates a new user
    - Login (required)
    - First name (required)
    - Last name (required)
    - Email (required)
    - Phone
    - Custom fields
  - **Update** - updates some fields of the user.
    - ID (required)
    - Login
    - First name
    - Last name
    - Email
    - Phone
    - Custom Fields

ai_documentation_summary:
  {"purpose":"Enables n8n workflows to interact with Easy8 CRM operations, allowing management of accounts, issues, leads, opportunities, attendance, and contacts.","capabilities":["Retrieve single or multiple records for all entities","Create new records for all entities","Update existing records for all entities","Add comments to accounts, issues, leads, and opportunities","Manage complex billing and contact information structures","Track user attendance with arrival/departure times","Support for custom fields across all entities"],"authentication":"API key required (domain and user API key)","commonUseCases":["Sync CRM data between Easy8 and other systems","Automate issue tracking and comment posting","Manage sales opportunities and leads","Track employee attendance records","Update account details and billing information"],"limitations":["Requires n8n version 1.54.4 or newer","Uses Easy8-specific query IDs for filtering lists","Some fields like 'Name' are mapped differently in the entity schema (e.g., firstname)"],"relatedNodes":[]}


node_type: n8n-nodes-fiwano.fiwano
package_name: n8n-nodes-fiwano
display_name: Fiwano
description: Interact with Fiwano — unified API for WhatsApp, Instagram & Facebook Messenger
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: rmnbb
author_github_url: https://github.com/RomanBabakin/
npm_package_name: n8n-nodes-fiwano
npm_version: 1.1.1
community_fetched_at: 2026-07-14T14:40:34.038Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Channel",
          "value": "channel"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Media",
          "value": "media"
        },
        {
          "name": "Message",
          "value": "message"
        },
        {
          "name": "Redirect URI",
          "value": "redirect"
        },
        {
          "name": "Subscription",
          "value": "subscription"
        },
        {
          "name": "Template",
          "value": "template"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a channel",
          "description": "Deactivate and remove a channel"
        },
        {
          "name": "Exchange OAuth Code",
          "value": "exchangeCode",
          "action": "Exchange an OAuth code for channel data",
          "description": "Exchange a one-time code from the OAuth redirect for channel data"
        },
        {
          "name": "Generate OAuth URL",
          "value": "setupUrl",
          "action": "Generate an OAuth setup URL",
          "description": "Generate a setup URL to connect a new channel (WhatsApp Embedded Signup or Meta OAuth; valid up to 60 min)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a channel",
          "description": "Retrieve details of a specific channel"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many channels",
          "description": "Retrieve all connected channels"
        },
        {
          "name": "Update Webhook",
          "value": "update",
          "action": "Update channel webhook settings",
          "description": "Update the webhook URL and/or secret for a channel"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "channel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send Media",
          "value": "sendMedia",
          "action": "Send a media message",
          "description": "Send an image, audio, video, or document via URL. Requires a Pro license."
        },
        {
          "name": "Send Template",
          "value": "sendTemplate",
          "action": "Send a WhatsApp template message",
          "description": "Send an approved WhatsApp template (Pro required; required outside the 24h window)"
        },
        {
          "name": "Send Text",
          "value": "send",
          "action": "Send a text message",
          "description": "Send a plain text message through any channel type"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a template",
          "description": "Create a new WhatsApp message template (Pro required; submitted to Meta for review)"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a template",
          "description": "Delete a WhatsApp message template (Pro required)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a template",
          "description": "Get details of a specific WhatsApp template (Pro required)"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many templates",
          "description": "List WhatsApp templates for a channel (Pro required)"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a template",
          "description": "Update an existing WhatsApp template (Pro required; re-submitted for review)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getProfile",
      "options": [
        {
          "name": "Get Profile",
          "value": "getProfile",
          "action": "Get sender profile",
          "description": "Fetch sender profile from Meta (Instagram & Facebook only)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add a redirect URI",
          "description": "Register an allowed OAuth redirect URI"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a redirect URI",
          "description": "Remove an allowed redirect URI"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many redirect URIs",
          "description": "List all allowed OAuth redirect URIs for your API key"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "redirect"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "download",
      "options": [
        {
          "name": "Download",
          "value": "download",
          "action": "Download a received media file",
          "description": "Download a media file received via webhook. Files expire after 60 minutes."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "media"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many subscriptions",
          "description": "Retrieve subscriptions and available channel slots"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "subscription"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a channel",
      "description": "Deactivate and remove a channel",
      "resource": "channel"
    },
    {
      "name": "Exchange OAuth Code",
      "value": "exchangeCode",
      "action": "Exchange an OAuth code for channel data",
      "description": "Exchange a one-time code from the OAuth redirect for channel data",
      "resource": "channel"
    },
    {
      "name": "Generate OAuth URL",
      "value": "setupUrl",
      "action": "Generate an OAuth setup URL",
      "description": "Generate a setup URL to connect a new channel (WhatsApp Embedded Signup or Meta OAuth; valid up to 60 min)",
      "resource": "channel"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a channel",
      "description": "Retrieve details of a specific channel",
      "resource": "channel"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many channels",
      "description": "Retrieve all connected channels",
      "resource": "channel"
    },
    {
      "name": "Update Webhook",
      "value": "update",
      "action": "Update channel webhook settings",
      "description": "Update the webhook URL and/or secret for a channel",
      "resource": "channel"
    },
    {
      "name": "Send Media",
      "value": "sendMedia",
      "action": "Send a media message",
      "description": "Send an image, audio, video, or document via URL. Requires a Pro license.",
      "resource": "message"
    },
    {
      "name": "Send Template",
      "value": "sendTemplate",
      "action": "Send a WhatsApp template message",
      "description": "Send an approved WhatsApp template (Pro required; required outside the 24h window)",
      "resource": "message"
    },
    {
      "name": "Send Text",
      "value": "send",
      "action": "Send a text message",
      "description": "Send a plain text message through any channel type",
      "resource": "message"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a template",
      "description": "Create a new WhatsApp message template (Pro required; submitted to Meta for review)",
      "resource": "template"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a template",
      "description": "Delete a WhatsApp message template (Pro required)",
      "resource": "template"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a template",
      "description": "Get details of a specific WhatsApp template (Pro required)",
      "resource": "template"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many templates",
      "description": "List WhatsApp templates for a channel (Pro required)",
      "resource": "template"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a template",
      "description": "Update an existing WhatsApp template (Pro required; re-submitted for review)",
      "resource": "template"
    },
    {
      "name": "Get Profile",
      "value": "getProfile",
      "action": "Get sender profile",
      "description": "Fetch sender profile from Meta (Instagram & Facebook only)",
      "resource": "contact"
    },
    {
      "name": "Add",
      "value": "add",
      "action": "Add a redirect URI",
      "description": "Register an allowed OAuth redirect URI",
      "resource": "redirect"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a redirect URI",
      "description": "Remove an allowed redirect URI",
      "resource": "redirect"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many redirect URIs",
      "description": "List all allowed OAuth redirect URIs for your API key",
      "resource": "redirect"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download a received media file",
      "description": "Download a media file received via webhook. Files expire after 60 minutes.",
      "resource": "media"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many subscriptions",
      "description": "Retrieve subscriptions and available channel slots",
      "resource": "subscription"
    }
  ]

npm_readme:
  # n8n-nodes-fiwano

  n8n verified community node for **[Fiwano](https://fiwano.com)** — a unified messaging API for **WhatsApp, Instagram DM, and Facebook Messenger**.

  ## What is Fiwano?

  Fiwano is a verified Meta Tech Provider that abstracts the complexity of WhatsApp Cloud API, Instagram Messaging API, and Facebook Messenger API into a single, consistent REST API. Connect your Meta-verified business accounts once via simple Facebook auth — no Meta developer portal, no app creation, no Meta app review.

  **Fiwano is a messaging API, not a full Meta platform API.** It does one thing well: receive inbound messages and send replies (plus WhatsApp templates) across WhatsApp, Instagram DM, and Messenger. It deliberately stays out of comments, posts, stories, ads, and page analytics — just conversations with people.

  Key benefits:
  - **Official Meta APIs only** — built on WhatsApp Cloud API, Instagram Messaging API and Facebook Messenger API. No browser automation, no unofficial client simulation, no account ban risk. Production-safe at any scale.
  - **One API for three channels** — identical request format across WhatsApp, Instagram DM, and Facebook Messenger
  - **Real-time webhooks** — incoming messages and delivery statuses delivered to your endpoint, HMAC-signed
  - **WhatsApp template management** — create, manage, and send approved templates directly from the API
  - **Secure by default** — tokens encrypted at rest, no message content stored on Fiwano's side

  Built for AI assistants, CRMs, helpdesks, and any product that needs conversational messaging at business scale.

  **[7-day free trial](https://fiwano.com/auth/login) — no credit card required.**

  ## License Tiers

  One license covers a slot bundle: **1 WhatsApp + 1 Instagram + 1 Facebook Messenger** channel, with unlimited messages.

  | Tier | Monthly | Capabilities |
  |------|---------|-------------|
  | Starter | $12 | Text messages in/out and delivery statuses |
  | Pro | $19 | Everything in Starter + inbound media and files, outbound media via HTTPS URL (signed URLs supported), WhatsApp template management and sending |

  New accounts start with a **7-day free trial on the Pro tier** (full functionality).

  ## Nodes

  | Node | Type | Description |
  |------|------|-------------|
  | **Fiwano** | Action | Send messages, manage channels, check subscriptions and available slots, WhatsApp templates, contact profile enrichment, redirect URIs |
  | **Fiwano Trigger** | Webhook Trigger | Receive incoming messages and delivery status webhooks |

  ### Action node — operations

  | Resource | Operations |
  |----------|-----------|
  | Message | Send Text, Send Media, Send Template (WhatsApp) |
  | Channel | Get Many, Get, Generate OAuth URL, Exchange OAuth Code, Update Webhook, Delete |
  | Media | Download (saves received file as binary data) |
  | Contact | Get Profile (Instagram, Facebook — enriches sender with name, profile picture, follower count) |
  | Template | Get Many, Get, Create, Update, Delete (WhatsApp only) |
  | Redirect URI | Get Many, Add, Delete |
  | Subscription | Get Many (subscriptions, assigned channels, available slots by channel type and tier) |

  ### Trigger node — events

  The trigger starts your workflow for any of these events:

  | Event | Channels |
  |-------|---------|
  | `message.received` | WhatsApp, Instagram, Facebook |
  | `message.delivered` | WhatsApp, Instagram, Facebook |
  | `message.read` | WhatsApp, Instagram, Facebook |
  | `message.sent` | WhatsApp |
  | `message.failed` | WhatsApp |

  Filter by event type in node settings. HMAC-SHA256 signature verification is built in.

  ---

  ## Installation

  Fiwano is [verified by n8n](https://n8n.io/integrations/fiwano/) and can be installed directly from the n8n editor by an instance owner or admin.

  ### n8n app (verified community node)

  1. Open the editor canvas and open the nodes panel with **+** or **N**.
  2. Search for **Fiwano**.
  3. Select **Fiwano** under **More from the community**.
  4. Click **Install**.
  5. Add the **Fiwano** or **Fiwano Trigger** node to your workflow.

  See n8n's [verified community node installation guide](https://docs.n8n.io/integrations/community-nodes/installation/verified-install/) for details. On n8n Cloud, installation may need to be enabled by the instance owner in the Cloud Admin Panel. On self-hosted n8n, the related community-node settings are controlled by environment variables.

  ### Manual install fallback

  Use manual npm installation only when the in-app verified-node installation is unavailable in your environment.

  #### Self-hosted npm


  ```bash
  mkdir -p ~/.n8n/nodes
  cd ~/.n8n/nodes
  npm install n8n-nodes-fiwano
  # Restart n8n
  ```

  ### Self-hosted Docker

  No custom image required — install Fiwano in-app via **Settings → Community Nodes** (or the nodes panel above). The package is stored in the n8n data volume, so keep `~/.n8n` (`/home/node/.n8n` in the official image) on a persistent volume and it survives restarts and upgrades.

  To bake it into a custom image instead, follow n8n's [community-node installation guide](https://docs.n8n.io/integrations/community-nodes/installation/).

  ---

  ## Credentials

  1. [Sign up at fiwano.com](https://fiwano.com/auth/login) and create an API key in **API Keys**
  2. In n8n: **Credentials → Add → Fiwano API** → paste the key (starts with `mip_live_`)
  3. *(Optional)* Set a **Webhook Secret** on the credential to reuse one HMAC secret across all workflows — the trigger and the **Exchange OAuth Code** / **Update Webhook** operations fall back to it when their own secret field is empty.

  All Fiwano action nodes use this credential. The **Fiwano Trigger** node works without credentials in manual mode (it only verifies the webhook signature you configure per-channel). Add the same credential to the trigger **only** if you want it to auto-register its webhook on your channels — see [Setting Up the Trigger](#setting-up-the-trigger-webhooks).

  ---

  ## Connecting a Channel

  Two ways to connect a channel — pick based on **whose** channel it is:

  - **Your own channels** → the [Fiwano portal](https://fiwano.com) UI (no code). Simplest when you just need your own WhatsApp / Instagram / Facebook in your automation.
  - **Your customers' channels** → the API (the nodes below, or the [Connect a Channel workflow](#example-workflows)). This embeds a "connect your channel" step into your own product, so an external client authorizes their own Meta account through *your* interface — they never need a Fiwano account.

  The API flow is Facebook OAuth, run once per channel (WhatsApp number / Instagram account / Facebook Page):

  1. Add a **Fiwano** node → Resource: **Channel** → Operation: **Generate OAuth URL**
     - Select channel type, provide your redirect URI (must be registered via **Redirect URI → Add**)
     - Run the node → copy the `setup_url` from the output
  2. Open that URL in a browser and authorize the page(s)
  3. Add another **Fiwano** node → **Channel → Exchange OAuth Code**
     - Paste the `code` from the redirect URL query parameter — it is single-use and short-lived, so exchange it promptly
     - Optionally set `webhook_url` and `webhook_secret` in Additional Fields
  4. The response contains `channel_id` — save it for all subsequent nodes

  Alternatively, manage everything from the [Fiwano portal](https://fiwano.com) UI.

  ---

  ## Setting Up the Trigger (Webhooks)

  The **Fiwano Trigger** node starts a workflow when a message arrives on your channel. There are two ways to wire it up.

  ### Option A — Automatic setup (recommended)

  Let the trigger register its own webhook on your channel(s).

  1. Add **Fiwano Trigger** and add your **Fiwano API** credential to it (needed for the auto modes — they error at activation if it's missing)
  2. Set **Webhook Auto-Setup**:
     - **All Active Channels** — wire every connected channel (WhatsApp + Instagram + Facebook) that isn't already pointing elsewhere to this one trigger. One flow, three platforms.
     - **Specific Channel** — register on a single **Channel ID** (takes it over even if it already has a webhook).
  3. Choose **Event Types** (these become each channel's `webhook_events`)
  4. *(Recommended)* Set a **Webhook Secret** to verify incoming signatures — preferably on the **credential** (reused everywhere; see [Credentials](#credentials)). The trigger's own Webhook Secret field overrides it.
  5. **Save and activate** the workflow — the trigger PATCHes the channel(s) with its webhook URL, events, and secret. Deactivating clears the webhook URL again (in "All" mode, only on channels still pointing at this trigger).

  Auto-setup requires n8n's **Production URL** to use HTTPS and not point to
  `localhost`, `127.0.0.0/8`, or `::1`. If n8n resolves an HTTP or loopback
  Production URL, activation stops before changing any Fiwano channel and tells
  you to configure `WEBHOOK_URL`, restart n8n, or use Manual setup. A domain that
  merely contains the word `localhost` (for example `localhost.example.com`) is
  not treated as localhost.

  Official Fiwano nodes identify their API calls with a non-authentication client
  marker so channel webhook changes made by auto-setup can be distinguished from
  Portal and custom API changes in the Fiwano audit log. API-key authentication is
  unchanged.

  ### Option B — Manual setup

  Set **Webhook Auto-Setup** to **Manual** (no credential needed on the trigger).

  1. Create a workflow, add **Fiwano Trigger**, choose event types (default: `message.received`)
  2. **Save and activate** the workflow — n8n assigns a permanent webhook URL
  3. Open the **Fiwano Trigger** node and copy its **Production URL** (format: `https://your-n8n.example.com/webhook/<uuid>`)
  4. In a **Fiwano** node → **Channel → Update Webhook**, set the fields below, then execute the node once:
     - `channel_id` — your channel
     - `webhook_url` — the Production URL from step 3
     - Leave `webhook_secret` empty to auto-generate one, or provide your own
  5. The response includes `webhook_secret` — copy it into the **Webhook Secret** field in the Trigger node
  6. Re-save the workflow

  > **n8n must be publicly accessible.** Fiwano delivers webhooks over the internet. Local `localhost` won't work — use a reverse proxy, ngrok, or n8n Cloud.

  > **Event filter vs. channel subscription.** The trigger's **Event Types** filter is applied on the n8n side. In automatic setup it is also used as the channel's `webhook_events`; in manual setup make sure the events you enable on the channel match what the trigger expects.

  > **When auto-setup runs.** Only on workflow **activation / deactivation** (and when n8n restarts active workflows) — never per message, so it adds no per-message overhead.
  >
  > - **Non-destructive, and silent about it.** "All Active Channels" only wires channels that aren't already pointing somewhere else; a channel wired to another URL is left alone — **and the workflow still activates without an error**. So if one channel isn't responding, check whether its webhook points elsewhere. To take a channel over deliberately, clear its webhook or use **Specific Channel**.
  > - **Deactivating removes the webhook** from the channels pointing at this trigger — it clears the webhook URL only, it does not delete the channel, messages, or any data. Fiwano keeps storing inbound messages while deactivated but won't relay them; reactivate to resume.
  > - **Clean up before removing.** Deactivate the workflow (don't just delete it, and don't remove the credential first) so the trigger can clear the webhook. If cleanup can't run, a channel keeps pointing at an inactive n8n URL and Fiwano will log delivery failures and email you until you clear it (via **Update Webhook** or the portal).
  > - Connect a new channel after activating? Re-activate the workflow so it gets wired.

  ### Webhook Payload Structure

  Every event from Fiwano follows the same top-level shape:

  ```json
  {
    "event": "message.received",
    "channel_id": "a1b2c3d4e5f67890",
    "channel_type": "whatsapp",
    "timestamp": "2025-01-15T10:30:00Z",
    "data": { ... }
  }
  ```

  Key fields available in expressions after the trigger:

  | Expression | Value |
  |---|---|
  | `{{ $json.channel_id }}` | Channel that received the message |
  | `{{ $json.channel_type }}` | `whatsapp` / `instagram` / `facebook` |
  | `{{ $json.data.from }}` | Sender ID — use as `recipient` when replying |
  | `{{ $json.data.from_name }}` | Sender name (WhatsApp only; `null` on Instagram/Facebook) |
  | `{{ $json.data.text }}` | Message text (for `type: text` messages) |
  | `{{ $json.data.type }}` | `text`, `image`, `audio`, `video`, `document`, `sticker`, or `unsupported` |
  | `{{ $json.data.media.media_id }}` | ID to download file via `GET /api/v1/media/{media_id}` (Pro license) |
  | `{{ $json.data.media.voice }}` | `true` for WhatsApp voice messages (boolean, WA only; omitted for IG/FB) |
  | `{{ $json.data.media.download_url }}` | Authenticated download URL — fetch with your `X-API-Key`. `null` if download from Meta failed. **Cannot be used directly as `media_url` for outbound sends** — re-host the bytes first. |
  | `{{ $json.data.media.mime_type }}` | MIME type of the received file |
  | `{{ $json.data.media.file_size }}` | File size in bytes |
  | `{{ $json.data.media.filename }}` | Original filename (documents only; `null` otherwise) |
  | `{{ $json.data.media.duration_ms }}` | Duration in ms (audio/video only; `null` otherwise) |
  | `{{ $json.data.media.expires_at }}` | ISO 8601 expiry timestamp — file deleted after this time |
  | `{{ $json.data.caption }}` | Caption text attached to the media (WhatsApp) |
  | `{{ $json.data.upgrade_required }}` | `"pro"` if channel lacks a Pro license for this message |

  ---

  ## Sending Messages

  ### Text message

  ```
  Resource: Message → Operation: Send Text
  Channel ID: <channel_id>
  Recipient: {{ $('Fiwano Trigger').item.json.data.from }}
  Text: Hello!
  ```

  ### WhatsApp template

  Outside the 24-hour conversation window, WhatsApp requires pre-approved templates.

  ```
  Resource: Message → Operation: Send Template
  Channel ID: <wa_channel_id>
  Recipient: <phone_without_plus>
  Template Name: order_confirmation
  Language: en_US
  Variables: {"body": ["John", "ORD-456"]}
  ```

  Variable format:
  - **Positional** (numbered `{{1}}`, `{{2}}`): `{"body": ["val1", "val2"], "header": ["val"], "buttons": [{"index": 0, "value": "abc"}]}`
  - **Named** (custom keys): `{"body": {"customer_name": "John"}}`
  - Leave empty if the template has no variables

  ### Media message (image, audio, video, document)

  Send a media file via HTTPS URL. **Requires a Pro license** on the channel's billing plan.

  ```
  Resource: Message → Operation: Send Media
  Channel ID: <channel_id>
  Recipient: {{ $('Fiwano Trigger').item.json.data.from }}
  Media Type: image
  Media URL: https://my-bucket.s3.amazonaws.com/photo.jpg?X-Amz-Signature=...
  Additional Fields → Caption: Check this out!
  ```

  Meta fetches the file directly from `Media URL` — Fiwano does not download or store it.

  **For non-public content, use a signed URL** — S3/GCS/R2 presigned, Azure SAS, or HMAC-signed URL on your own server. Set expiry to ≥ 5 minutes. Public URLs are accessible to anyone who learns them.

  URL validation: HTTPS only, max 2048 chars, no credentials in URL (`user:pass@`), no private/loopback IPs. Violations return HTTP 422.

  Supported types per channel:

  | Media Type | WhatsApp | Instagram | Facebook |
  |------------|----------|-----------|----------|
  | image | ✓ | ✓ | ✓ |
  | audio | ✓ | ✓ | ✓ |
  | video | ✓ | ✓ | ✓ |
  | document | ✓ | ✓ | ✓ (as file) |

  **Handling errors.** On Meta-side failure the response carries `success: false` and `error_code` (Meta error code) — branch on it in your workflow:

  | `error_code` | What it means | What to do |
  |---|---|---|
  | `131052` | Meta could not download from URL | URL unreachable, expired signature, or wrong Content-Type — verify URL works in a fresh request |
  | `131053` | Format/size unsupported, or Meta rate-limited your hosting provider's network | Retry; if persistent, use AWS S3 / GCS / Cloudflare R2 |
  | `131047`, `131057` | Outside 24h window (WhatsApp) | Switch to Send Template |
  | `190`, `200`, `10` | Token issue | Reconnect the channel |

  > Channels without a Pro license return HTTP 402. Upgrade at [fiwano.com/billing](https://fiwano.com/billing).

  ---

  ## Enriching Sender Profile (Instagram & Facebook)

  Instagram and Facebook webhooks do not include the sender's name. Use **Contact → Get Profile** immediately after a Fiwano Trigger to fetch it:

  - **Instagram:** returns `username`, `name`, `profile_pic`, `follower_count`, `is_verified_user`
  - **Facebook:** returns `first_name`, `last_name`, `profile_pic`
  - Results are cached 5 minutes on Fiwano's side
  - Not applicable for WhatsApp (name is always present in `data.from_name`)

  ---

  ## Common Patterns

  **Reply to same channel and sender:**
  ```
  channel_id: {{ $json.channel_id }}
  recipient:  {{ $json.data.from }}
  ```

  **Only process text messages:**
  `IF → $json.data.type === 'text'`

  **Get sender name on Instagram/Facebook:**
  Add **Contact → Get Profile** (Channel ID: `$json.channel_id`, User ID: `$json.data.from`) immediately after the trigger.

  **Filter by channel type:**
  `IF → $json.channel_type === 'whatsapp'`

  ---

  ## Example Workflows

  Two ready-made flows live in the [`workflows/`](./workflows/) directory. They assemble the pieces above (credential → channel → trigger → send), so you can import one and skip the manual wiring.

  | File | Description |
  |------|-------------|
  | `fiwano-connect-channels.json` | **Connect channels via the API** *(optional)*. Only needed if you onboard channels **programmatically** — e.g. connecting your own clients' channels. If connecting from the [Fiwano portal](https://fiwano.com) UI is enough for you, you don't need this. Connects one channel at a time: pick a channel type, generate a Meta setup link, and a webhook callback auto-exchanges the returned code for a `channel_id` — no copy-pasting codes. |
  | `fiwano-universal-auto-responder.json` | **Auto-reply to every message.** One trigger answers **every** message on WhatsApp, Instagram and Facebook — echoes text, and replies to attachments with file details. Includes a sticky recipe for a full media echo. **Needs at least one connected channel** — connect in the [portal](https://fiwano.com), or with the workflow above. |

  **Import (works on any n8n, including Cloud):** create a new workflow → **⋮ menu → Import from File** → select the `.json`.

  **After importing, finish setup before the workflow will run:**
  1. Add your **Fiwano API** credential to the nodes that use it (see [Credentials](#credentials)).
  2. For `fiwano-connect-channels.json`, add the OAuth-callback node's **Production URL** to your whitelisted redirect URIs (**Redirect URI → Add**, or in the [portal](https://fiwano.com)).
  3. **Activate** the workflow — the trigger and the OAuth-callback webhook only fire while the workflow is active.

  On **self-hosted** n8n you can also import from the command line, run on the machine where n8n is installed (the `--input` path is relative to your current directory; the workflow is imported **inactive** — activate it in the UI afterwards):
  ```bash
  n8n import:workflow --input=workflows/fiwano-universal-auto-responder.json
  ```

  ---

  ## Links

  - [fiwano.com](https://fiwano.com) — product page & free trial
  - [API Documentation](https://fiwano.com/documentation)
  - [Fiwano Cookbook](https://github.com/fiwano-com/fiwano-cookbook) — step-by-step guide for integrating the API directly in code (handy for AI coding agents)
  - [Portal](https://fiwano.com/auth/login)

  ## License

  MIT — © Roman Babakin / [rmnbb.com](https://rmnbb.com)

ai_documentation_summary:
  {"purpose":"Interact with Fiwano's unified API to send messages, manage channels, and handle webhooks for WhatsApp, Instagram DM, and Facebook Messenger.","capabilities":["Send text messages","Send media files","Send WhatsApp templates","Manage messaging channels (WhatsApp, Instagram, Facebook)","Create, update, and delete WhatsApp templates","Enrich contact profiles with name and follower data","Manage redirect URIs","Receive incoming messages via webhook","Track message delivery and read statuses","Download inbound media files"],"authentication":"API key required (mip_live_ prefix)","commonUseCases":["Unified messaging across WhatsApp, Instagram, and Facebook","AI chatbot integration with Meta platforms","Customer support automation","Marketing campaign execution via templates"],"limitations":["Requires Meta-verified business accounts connected via Facebook OAuth","One license covers only one slot bundle (1 WhatsApp + 1 Instagram + 1 Facebook channel)","Trigger node requires manual webhook signature configuration per channel"],"relatedNodes":["n8n-nodes-webhook","n8n-nodes-credentials"]}


node_type: n8n-nodes-fiwano.fiwanoTrigger
package_name: n8n-nodes-fiwano
display_name: Fiwano Trigger
description: Receive webhook events from Fiwano (incoming messages, delivery status, etc.)
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: rmnbb
author_github_url: https://github.com/RomanBabakin/
npm_package_name: n8n-nodes-fiwano
npm_version: 1.1.1
community_fetched_at: 2026-07-14T14:40:34.040Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-fiwano

  n8n verified community node for **[Fiwano](https://fiwano.com)** — a unified messaging API for **WhatsApp, Instagram DM, and Facebook Messenger**.

  ## What is Fiwano?

  Fiwano is a verified Meta Tech Provider that abstracts the complexity of WhatsApp Cloud API, Instagram Messaging API, and Facebook Messenger API into a single, consistent REST API. Connect your Meta-verified business accounts once via simple Facebook auth — no Meta developer portal, no app creation, no Meta app review.

  **Fiwano is a messaging API, not a full Meta platform API.** It does one thing well: receive inbound messages and send replies (plus WhatsApp templates) across WhatsApp, Instagram DM, and Messenger. It deliberately stays out of comments, posts, stories, ads, and page analytics — just conversations with people.

  Key benefits:
  - **Official Meta APIs only** — built on WhatsApp Cloud API, Instagram Messaging API and Facebook Messenger API. No browser automation, no unofficial client simulation, no account ban risk. Production-safe at any scale.
  - **One API for three channels** — identical request format across WhatsApp, Instagram DM, and Facebook Messenger
  - **Real-time webhooks** — incoming messages and delivery statuses delivered to your endpoint, HMAC-signed
  - **WhatsApp template management** — create, manage, and send approved templates directly from the API
  - **Secure by default** — tokens encrypted at rest, no message content stored on Fiwano's side

  Built for AI assistants, CRMs, helpdesks, and any product that needs conversational messaging at business scale.

  **[7-day free trial](https://fiwano.com/auth/login) — no credit card required.**

  ## License Tiers

  One license covers a slot bundle: **1 WhatsApp + 1 Instagram + 1 Facebook Messenger** channel, with unlimited messages.

  | Tier | Monthly | Capabilities |
  |------|---------|-------------|
  | Starter | $12 | Text messages in/out and delivery statuses |
  | Pro | $19 | Everything in Starter + inbound media and files, outbound media via HTTPS URL (signed URLs supported), WhatsApp template management and sending |

  New accounts start with a **7-day free trial on the Pro tier** (full functionality).

  ## Nodes

  | Node | Type | Description |
  |------|------|-------------|
  | **Fiwano** | Action | Send messages, manage channels, check subscriptions and available slots, WhatsApp templates, contact profile enrichment, redirect URIs |
  | **Fiwano Trigger** | Webhook Trigger | Receive incoming messages and delivery status webhooks |

  ### Action node — operations

  | Resource | Operations |
  |----------|-----------|
  | Message | Send Text, Send Media, Send Template (WhatsApp) |
  | Channel | Get Many, Get, Generate OAuth URL, Exchange OAuth Code, Update Webhook, Delete |
  | Media | Download (saves received file as binary data) |
  | Contact | Get Profile (Instagram, Facebook — enriches sender with name, profile picture, follower count) |
  | Template | Get Many, Get, Create, Update, Delete (WhatsApp only) |
  | Redirect URI | Get Many, Add, Delete |
  | Subscription | Get Many (subscriptions, assigned channels, available slots by channel type and tier) |

  ### Trigger node — events

  The trigger starts your workflow for any of these events:

  | Event | Channels |
  |-------|---------|
  | `message.received` | WhatsApp, Instagram, Facebook |
  | `message.delivered` | WhatsApp, Instagram, Facebook |
  | `message.read` | WhatsApp, Instagram, Facebook |
  | `message.sent` | WhatsApp |
  | `message.failed` | WhatsApp |

  Filter by event type in node settings. HMAC-SHA256 signature verification is built in.

  ---

  ## Installation

  Fiwano is [verified by n8n](https://n8n.io/integrations/fiwano/) and can be installed directly from the n8n editor by an instance owner or admin.

  ### n8n app (verified community node)

  1. Open the editor canvas and open the nodes panel with **+** or **N**.
  2. Search for **Fiwano**.
  3. Select **Fiwano** under **More from the community**.
  4. Click **Install**.
  5. Add the **Fiwano** or **Fiwano Trigger** node to your workflow.

  See n8n's [verified community node installation guide](https://docs.n8n.io/integrations/community-nodes/installation/verified-install/) for details. On n8n Cloud, installation may need to be enabled by the instance owner in the Cloud Admin Panel. On self-hosted n8n, the related community-node settings are controlled by environment variables.

  ### Manual install fallback

  Use manual npm installation only when the in-app verified-node installation is unavailable in your environment.

  #### Self-hosted npm


  ```bash
  mkdir -p ~/.n8n/nodes
  cd ~/.n8n/nodes
  npm install n8n-nodes-fiwano
  # Restart n8n
  ```

  ### Self-hosted Docker

  No custom image required — install Fiwano in-app via **Settings → Community Nodes** (or the nodes panel above). The package is stored in the n8n data volume, so keep `~/.n8n` (`/home/node/.n8n` in the official image) on a persistent volume and it survives restarts and upgrades.

  To bake it into a custom image instead, follow n8n's [community-node installation guide](https://docs.n8n.io/integrations/community-nodes/installation/).

  ---

  ## Credentials

  1. [Sign up at fiwano.com](https://fiwano.com/auth/login) and create an API key in **API Keys**
  2. In n8n: **Credentials → Add → Fiwano API** → paste the key (starts with `mip_live_`)
  3. *(Optional)* Set a **Webhook Secret** on the credential to reuse one HMAC secret across all workflows — the trigger and the **Exchange OAuth Code** / **Update Webhook** operations fall back to it when their own secret field is empty.

  All Fiwano action nodes use this credential. The **Fiwano Trigger** node works without credentials in manual mode (it only verifies the webhook signature you configure per-channel). Add the same credential to the trigger **only** if you want it to auto-register its webhook on your channels — see [Setting Up the Trigger](#setting-up-the-trigger-webhooks).

  ---

  ## Connecting a Channel

  Two ways to connect a channel — pick based on **whose** channel it is:

  - **Your own channels** → the [Fiwano portal](https://fiwano.com) UI (no code). Simplest when you just need your own WhatsApp / Instagram / Facebook in your automation.
  - **Your customers' channels** → the API (the nodes below, or the [Connect a Channel workflow](#example-workflows)). This embeds a "connect your channel" step into your own product, so an external client authorizes their own Meta account through *your* interface — they never need a Fiwano account.

  The API flow is Facebook OAuth, run once per channel (WhatsApp number / Instagram account / Facebook Page):

  1. Add a **Fiwano** node → Resource: **Channel** → Operation: **Generate OAuth URL**
     - Select channel type, provide your redirect URI (must be registered via **Redirect URI → Add**)
     - Run the node → copy the `setup_url` from the output
  2. Open that URL in a browser and authorize the page(s)
  3. Add another **Fiwano** node → **Channel → Exchange OAuth Code**
     - Paste the `code` from the redirect URL query parameter — it is single-use and short-lived, so exchange it promptly
     - Optionally set `webhook_url` and `webhook_secret` in Additional Fields
  4. The response contains `channel_id` — save it for all subsequent nodes

  Alternatively, manage everything from the [Fiwano portal](https://fiwano.com) UI.

  ---

  ## Setting Up the Trigger (Webhooks)

  The **Fiwano Trigger** node starts a workflow when a message arrives on your channel. There are two ways to wire it up.

  ### Option A — Automatic setup (recommended)

  Let the trigger register its own webhook on your channel(s).

  1. Add **Fiwano Trigger** and add your **Fiwano API** credential to it (needed for the auto modes — they error at activation if it's missing)
  2. Set **Webhook Auto-Setup**:
     - **All Active Channels** — wire every connected channel (WhatsApp + Instagram + Facebook) that isn't already pointing elsewhere to this one trigger. One flow, three platforms.
     - **Specific Channel** — register on a single **Channel ID** (takes it over even if it already has a webhook).
  3. Choose **Event Types** (these become each channel's `webhook_events`)
  4. *(Recommended)* Set a **Webhook Secret** to verify incoming signatures — preferably on the **credential** (reused everywhere; see [Credentials](#credentials)). The trigger's own Webhook Secret field overrides it.
  5. **Save and activate** the workflow — the trigger PATCHes the channel(s) with its webhook URL, events, and secret. Deactivating clears the webhook URL again (in "All" mode, only on channels still pointing at this trigger).

  Auto-setup requires n8n's **Production URL** to use HTTPS and not point to
  `localhost`, `127.0.0.0/8`, or `::1`. If n8n resolves an HTTP or loopback
  Production URL, activation stops before changing any Fiwano channel and tells
  you to configure `WEBHOOK_URL`, restart n8n, or use Manual setup. A domain that
  merely contains the word `localhost` (for example `localhost.example.com`) is
  not treated as localhost.

  Official Fiwano nodes identify their API calls with a non-authentication client
  marker so channel webhook changes made by auto-setup can be distinguished from
  Portal and custom API changes in the Fiwano audit log. API-key authentication is
  unchanged.

  ### Option B — Manual setup

  Set **Webhook Auto-Setup** to **Manual** (no credential needed on the trigger).

  1. Create a workflow, add **Fiwano Trigger**, choose event types (default: `message.received`)
  2. **Save and activate** the workflow — n8n assigns a permanent webhook URL
  3. Open the **Fiwano Trigger** node and copy its **Production URL** (format: `https://your-n8n.example.com/webhook/<uuid>`)
  4. In a **Fiwano** node → **Channel → Update Webhook**, set the fields below, then execute the node once:
     - `channel_id` — your channel
     - `webhook_url` — the Production URL from step 3
     - Leave `webhook_secret` empty to auto-generate one, or provide your own
  5. The response includes `webhook_secret` — copy it into the **Webhook Secret** field in the Trigger node
  6. Re-save the workflow

  > **n8n must be publicly accessible.** Fiwano delivers webhooks over the internet. Local `localhost` won't work — use a reverse proxy, ngrok, or n8n Cloud.

  > **Event filter vs. channel subscription.** The trigger's **Event Types** filter is applied on the n8n side. In automatic setup it is also used as the channel's `webhook_events`; in manual setup make sure the events you enable on the channel match what the trigger expects.

  > **When auto-setup runs.** Only on workflow **activation / deactivation** (and when n8n restarts active workflows) — never per message, so it adds no per-message overhead.
  >
  > - **Non-destructive, and silent about it.** "All Active Channels" only wires channels that aren't already pointing somewhere else; a channel wired to another URL is left alone — **and the workflow still activates without an error**. So if one channel isn't responding, check whether its webhook points elsewhere. To take a channel over deliberately, clear its webhook or use **Specific Channel**.
  > - **Deactivating removes the webhook** from the channels pointing at this trigger — it clears the webhook URL only, it does not delete the channel, messages, or any data. Fiwano keeps storing inbound messages while deactivated but won't relay them; reactivate to resume.
  > - **Clean up before removing.** Deactivate the workflow (don't just delete it, and don't remove the credential first) so the trigger can clear the webhook. If cleanup can't run, a channel keeps pointing at an inactive n8n URL and Fiwano will log delivery failures and email you until you clear it (via **Update Webhook** or the portal).
  > - Connect a new channel after activating? Re-activate the workflow so it gets wired.

  ### Webhook Payload Structure

  Every event from Fiwano follows the same top-level shape:

  ```json
  {
    "event": "message.received",
    "channel_id": "a1b2c3d4e5f67890",
    "channel_type": "whatsapp",
    "timestamp": "2025-01-15T10:30:00Z",
    "data": { ... }
  }
  ```

  Key fields available in expressions after the trigger:

  | Expression | Value |
  |---|---|
  | `{{ $json.channel_id }}` | Channel that received the message |
  | `{{ $json.channel_type }}` | `whatsapp` / `instagram` / `facebook` |
  | `{{ $json.data.from }}` | Sender ID — use as `recipient` when replying |
  | `{{ $json.data.from_name }}` | Sender name (WhatsApp only; `null` on Instagram/Facebook) |
  | `{{ $json.data.text }}` | Message text (for `type: text` messages) |
  | `{{ $json.data.type }}` | `text`, `image`, `audio`, `video`, `document`, `sticker`, or `unsupported` |
  | `{{ $json.data.media.media_id }}` | ID to download file via `GET /api/v1/media/{media_id}` (Pro license) |
  | `{{ $json.data.media.voice }}` | `true` for WhatsApp voice messages (boolean, WA only; omitted for IG/FB) |
  | `{{ $json.data.media.download_url }}` | Authenticated download URL — fetch with your `X-API-Key`. `null` if download from Meta failed. **Cannot be used directly as `media_url` for outbound sends** — re-host the bytes first. |
  | `{{ $json.data.media.mime_type }}` | MIME type of the received file |
  | `{{ $json.data.media.file_size }}` | File size in bytes |
  | `{{ $json.data.media.filename }}` | Original filename (documents only; `null` otherwise) |
  | `{{ $json.data.media.duration_ms }}` | Duration in ms (audio/video only; `null` otherwise) |
  | `{{ $json.data.media.expires_at }}` | ISO 8601 expiry timestamp — file deleted after this time |
  | `{{ $json.data.caption }}` | Caption text attached to the media (WhatsApp) |
  | `{{ $json.data.upgrade_required }}` | `"pro"` if channel lacks a Pro license for this message |

  ---

  ## Sending Messages

  ### Text message

  ```
  Resource: Message → Operation: Send Text
  Channel ID: <channel_id>
  Recipient: {{ $('Fiwano Trigger').item.json.data.from }}
  Text: Hello!
  ```

  ### WhatsApp template

  Outside the 24-hour conversation window, WhatsApp requires pre-approved templates.

  ```
  Resource: Message → Operation: Send Template
  Channel ID: <wa_channel_id>
  Recipient: <phone_without_plus>
  Template Name: order_confirmation
  Language: en_US
  Variables: {"body": ["John", "ORD-456"]}
  ```

  Variable format:
  - **Positional** (numbered `{{1}}`, `{{2}}`): `{"body": ["val1", "val2"], "header": ["val"], "buttons": [{"index": 0, "value": "abc"}]}`
  - **Named** (custom keys): `{"body": {"customer_name": "John"}}`
  - Leave empty if the template has no variables

  ### Media message (image, audio, video, document)

  Send a media file via HTTPS URL. **Requires a Pro license** on the channel's billing plan.

  ```
  Resource: Message → Operation: Send Media
  Channel ID: <channel_id>
  Recipient: {{ $('Fiwano Trigger').item.json.data.from }}
  Media Type: image
  Media URL: https://my-bucket.s3.amazonaws.com/photo.jpg?X-Amz-Signature=...
  Additional Fields → Caption: Check this out!
  ```

  Meta fetches the file directly from `Media URL` — Fiwano does not download or store it.

  **For non-public content, use a signed URL** — S3/GCS/R2 presigned, Azure SAS, or HMAC-signed URL on your own server. Set expiry to ≥ 5 minutes. Public URLs are accessible to anyone who learns them.

  URL validation: HTTPS only, max 2048 chars, no credentials in URL (`user:pass@`), no private/loopback IPs. Violations return HTTP 422.

  Supported types per channel:

  | Media Type | WhatsApp | Instagram | Facebook |
  |------------|----------|-----------|----------|
  | image | ✓ | ✓ | ✓ |
  | audio | ✓ | ✓ | ✓ |
  | video | ✓ | ✓ | ✓ |
  | document | ✓ | ✓ | ✓ (as file) |

  **Handling errors.** On Meta-side failure the response carries `success: false` and `error_code` (Meta error code) — branch on it in your workflow:

  | `error_code` | What it means | What to do |
  |---|---|---|
  | `131052` | Meta could not download from URL | URL unreachable, expired signature, or wrong Content-Type — verify URL works in a fresh request |
  | `131053` | Format/size unsupported, or Meta rate-limited your hosting provider's network | Retry; if persistent, use AWS S3 / GCS / Cloudflare R2 |
  | `131047`, `131057` | Outside 24h window (WhatsApp) | Switch to Send Template |
  | `190`, `200`, `10` | Token issue | Reconnect the channel |

  > Channels without a Pro license return HTTP 402. Upgrade at [fiwano.com/billing](https://fiwano.com/billing).

  ---

  ## Enriching Sender Profile (Instagram & Facebook)

  Instagram and Facebook webhooks do not include the sender's name. Use **Contact → Get Profile** immediately after a Fiwano Trigger to fetch it:

  - **Instagram:** returns `username`, `name`, `profile_pic`, `follower_count`, `is_verified_user`
  - **Facebook:** returns `first_name`, `last_name`, `profile_pic`
  - Results are cached 5 minutes on Fiwano's side
  - Not applicable for WhatsApp (name is always present in `data.from_name`)

  ---

  ## Common Patterns

  **Reply to same channel and sender:**
  ```
  channel_id: {{ $json.channel_id }}
  recipient:  {{ $json.data.from }}
  ```

  **Only process text messages:**
  `IF → $json.data.type === 'text'`

  **Get sender name on Instagram/Facebook:**
  Add **Contact → Get Profile** (Channel ID: `$json.channel_id`, User ID: `$json.data.from`) immediately after the trigger.

  **Filter by channel type:**
  `IF → $json.channel_type === 'whatsapp'`

  ---

  ## Example Workflows

  Two ready-made flows live in the [`workflows/`](./workflows/) directory. They assemble the pieces above (credential → channel → trigger → send), so you can import one and skip the manual wiring.

  | File | Description |
  |------|-------------|
  | `fiwano-connect-channels.json` | **Connect channels via the API** *(optional)*. Only needed if you onboard channels **programmatically** — e.g. connecting your own clients' channels. If connecting from the [Fiwano portal](https://fiwano.com) UI is enough for you, you don't need this. Connects one channel at a time: pick a channel type, generate a Meta setup link, and a webhook callback auto-exchanges the returned code for a `channel_id` — no copy-pasting codes. |
  | `fiwano-universal-auto-responder.json` | **Auto-reply to every message.** One trigger answers **every** message on WhatsApp, Instagram and Facebook — echoes text, and replies to attachments with file details. Includes a sticky recipe for a full media echo. **Needs at least one connected channel** — connect in the [portal](https://fiwano.com), or with the workflow above. |

  **Import (works on any n8n, including Cloud):** create a new workflow → **⋮ menu → Import from File** → select the `.json`.

  **After importing, finish setup before the workflow will run:**
  1. Add your **Fiwano API** credential to the nodes that use it (see [Credentials](#credentials)).
  2. For `fiwano-connect-channels.json`, add the OAuth-callback node's **Production URL** to your whitelisted redirect URIs (**Redirect URI → Add**, or in the [portal](https://fiwano.com)).
  3. **Activate** the workflow — the trigger and the OAuth-callback webhook only fire while the workflow is active.

  On **self-hosted** n8n you can also import from the command line, run on the machine where n8n is installed (the `--input` path is relative to your current directory; the workflow is imported **inactive** — activate it in the UI afterwards):
  ```bash
  n8n import:workflow --input=workflows/fiwano-universal-auto-responder.json
  ```

  ---

  ## Links

  - [fiwano.com](https://fiwano.com) — product page & free trial
  - [API Documentation](https://fiwano.com/documentation)
  - [Fiwano Cookbook](https://github.com/fiwano-com/fiwano-cookbook) — step-by-step guide for integrating the API directly in code (handy for AI coding agents)
  - [Portal](https://fiwano.com/auth/login)

  ## License

  MIT — © Roman Babakin / [rmnbb.com](https://rmnbb.com)

ai_documentation_summary:
  {"purpose":"Receives real-time webhook events from Fiwano for incoming messages and delivery statuses across WhatsApp, Instagram DM, and Facebook Messenger channels.","capabilities":["Triggers on message.received events","Triggers on message.delivered events","Triggers on message.read events","Triggers on message.sent events","Triggers on message.failed events","HMAC-SHA256 signature verification for webhook security","Event filtering by type in node settings","Supports all three Meta channels (WhatsApp, Instagram, Facebook)"],"authentication":"None (uses HMAC signature verification configured per-channel)","commonUseCases":["Echo bots that reply to incoming messages","Customer support automation workflows","CRM integration for lead capture via messaging","Delivery status tracking and notifications","Multi-channel conversational AI assistants"],"limitations":["Requires Fiwano account and channel setup via Facebook OAuth before receiving events","Webhook URL and secret must be configured in the Fiwano portal or via Action nodes before the trigger can receive signed events","Only supports official Meta APIs (no unofficial client simulation)"],"relatedNodes":["Fiwano","Webhook"]}


node_type: n8n-nodes-tribecrm.tribeCrm
package_name: n8n-nodes-tribecrm
display_name: Tribe CRM
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: johann.norsa
author_github_url: https://github.com/efficy-sa/
npm_package_name: n8n-nodes-tribecrm
npm_version: 0.2.1
community_fetched_at: 2026-07-14T14:40:34.041Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  Manage persons, organizations, contacts, leads, sales opportunities, tasks, appointments, and invoices in Tribe CRM

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "person",
      "options": [
        {
          "name": "Appointment",
          "value": "appointment"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Customer",
          "value": "customer"
        },
        {
          "name": "Employee",
          "value": "employee"
        },
        {
          "name": "Invoice",
          "value": "invoice"
        },
        {
          "name": "Lead",
          "value": "lead"
        },
        {
          "name": "Organization",
          "value": "organization"
        },
        {
          "name": "Person",
          "value": "person"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "Sales Opportunity",
          "value": "salesOpportunity"
        },
        {
          "name": "Task",
          "value": "task"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an appointment",
          "routing": {
            "request": {
              "url": "/Activity_Appointment",
              "method": "POST"
            }
          },
          "description": "Create a new appointment in Tribe CRM"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many appointments",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "value"
                  }
                }
              ]
            },
            "request": {
              "url": "/Activity_Appointment",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of appointments"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "appointment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "routing": {
            "request": {
              "url": "/Relationship_Person_Contact_Standard",
              "method": "POST"
            }
          },
          "description": "Create a contact person relationship between a person and an organization"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contacts",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "value"
                  }
                }
              ]
            },
            "request": {
              "url": "/Relationship_Person_Contact_Standard",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of contact person relationships"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a customer",
          "routing": {
            "request": {
              "url": "/Relationship_Organization_CommercialRelationship_Customer",
              "method": "POST"
            }
          },
          "description": "Create a new customer relationship"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many customers",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "value"
                  }
                }
              ]
            },
            "request": {
              "url": "/Relationship_Organization_CommercialRelationship_Customer",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of customer relationships"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a customer",
          "routing": {
            "request": {
              "url": "/Relationship_Organization_CommercialRelationship_Customer",
              "method": "POST"
            }
          },
          "description": "Update an existing customer relationship by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Current",
          "value": "getCurrent",
          "action": "Get the current employee",
          "routing": {
            "request": {
              "url": "/GetCurrentEmployee()",
              "method": "GET"
            }
          },
          "description": "Retrieve the employee that corresponds to the authenticated service account"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many employees",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "value"
                  }
                }
              ]
            },
            "request": {
              "url": "/Relationship_Person_Contact_Employee",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of many employees"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "employee"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many invoices",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "value"
                  }
                }
              ]
            },
            "request": {
              "url": "/Activity_Invoice",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of invoices"
        },
        {
          "name": "Update Phase",
          "value": "updatePhase",
          "action": "Update the phase of an invoice",
          "routing": {
            "request": {
              "url": "/Activity_Invoice",
              "method": "POST"
            }
          },
          "description": "Change the phase (status) of an invoice"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a lead",
          "routing": {
            "request": {
              "url": "/Relationship_Organization_CommercialRelationship_Lead",
              "method": "POST"
            }
          },
          "description": "Create a new lead relationship"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many leads",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "value"
                  }
                }
              ]
            },
            "request": {
              "url": "/Relationship_Organization_CommercialRelationship_Lead",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of lead relationships"
        },
        {
          "name": "Upgrade to Customer",
          "value": "upgradeToCustomer",
          "action": "Upgrade a lead to customer",
          "routing": {
            "request": {
              "url": "/Relationship_Organization_CommercialRelationship_Lead",
              "method": "POST"
            }
          },
          "description": "Convert an existing lead into a customer relationship"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lead"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an organization",
          "routing": {
            "request": {
              "url": "/Relation_Organization",
              "method": "POST"
            }
          },
          "description": "Create a new organization in Tribe CRM"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an organization",
          "routing": {
            "request": {
              "url": "=/Relation_Organization({{$parameter['organizationId']}})",
              "method": "DELETE"
            }
          },
          "description": "Delete an organization by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many organizations",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "value"
                  }
                }
              ]
            },
            "request": {
              "url": "/Relation_Organization",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of organizations"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an organization",
          "routing": {
            "request": {
              "url": "/Relation_Organization",
              "method": "POST"
            }
          },
          "description": "Update an existing organization by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "organization"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a person",
          "routing": {
            "request": {
              "url": "/Relation_Person",
              "method": "POST"
            }
          },
          "description": "Create a new person in Tribe CRM"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a person",
          "routing": {
            "request": {
              "url": "=/Relation_Person({{$parameter['personId']}})",
              "method": "DELETE"
            }
          },
          "description": "Delete a person by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many persons",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "value"
                  }
                }
              ]
            },
            "request": {
              "url": "/Relation_Person",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of persons"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a person",
          "routing": {
            "request": {
              "url": "/Relation_Person",
              "method": "POST"
            }
          },
          "description": "Update an existing person by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "person"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many products",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "value"
                  }
                }
              ]
            },
            "request": {
              "url": "/Product",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of products"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a sales opportunity",
          "routing": {
            "request": {
              "url": "/Activity_SalesOpportunity",
              "method": "POST"
            }
          },
          "description": "Create a new sales opportunity"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many sales opportunities",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "value"
                  }
                }
              ]
            },
            "request": {
              "url": "/Activity_SalesOpportunity",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of sales opportunities"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a sales opportunity",
          "routing": {
            "request": {
              "url": "/Activity_SalesOpportunity",
              "method": "POST"
            }
          },
          "description": "Update an existing sales opportunity by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "salesOpportunity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task",
          "routing": {
            "request": {
              "url": "/Activity_Task",
              "method": "POST"
            }
          },
          "description": "Create a new task in Tribe CRM"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create an appointment",
      "routing": {
        "request": {
          "url": "/Activity_Appointment",
          "method": "POST"
        }
      },
      "description": "Create a new appointment in Tribe CRM",
      "resource": "appointment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many appointments",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "value"
              }
            }
          ]
        },
        "request": {
          "url": "/Activity_Appointment",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of appointments",
      "resource": "appointment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "routing": {
        "request": {
          "url": "/Relationship_Person_Contact_Standard",
          "method": "POST"
        }
      },
      "description": "Create a contact person relationship between a person and an organization",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contacts",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "value"
              }
            }
          ]
        },
        "request": {
          "url": "/Relationship_Person_Contact_Standard",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of contact person relationships",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a customer",
      "routing": {
        "request": {
          "url": "/Relationship_Organization_CommercialRelationship_Customer",
          "method": "POST"
        }
      },
      "description": "Create a new customer relationship",
      "resource": "customer"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many customers",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "value"
              }
            }
          ]
        },
        "request": {
          "url": "/Relationship_Organization_CommercialRelationship_Customer",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of customer relationships",
      "resource": "customer"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a customer",
      "routing": {
        "request": {
          "url": "/Relationship_Organization_CommercialRelationship_Customer",
          "method": "POST"
        }
      },
      "description": "Update an existing customer relationship by ID",
      "resource": "customer"
    },
    {
      "name": "Get Current",
      "value": "getCurrent",
      "action": "Get the current employee",
      "routing": {
        "request": {
          "url": "/GetCurrentEmployee()",
          "method": "GET"
        }
      },
      "description": "Retrieve the employee that corresponds to the authenticated service account",
      "resource": "employee"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many employees",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "value"
              }
            }
          ]
        },
        "request": {
          "url": "/Relationship_Person_Contact_Employee",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of many employees",
      "resource": "employee"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many invoices",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "value"
              }
            }
          ]
        },
        "request": {
          "url": "/Activity_Invoice",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of invoices",
      "resource": "invoice"
    },
    {
      "name": "Update Phase",
      "value": "updatePhase",
      "action": "Update the phase of an invoice",
      "routing": {
        "request": {
          "url": "/Activity_Invoice",
          "method": "POST"
        }
      },
      "description": "Change the phase (status) of an invoice",
      "resource": "invoice"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a lead",
      "routing": {
        "request": {
          "url": "/Relationship_Organization_CommercialRelationship_Lead",
          "method": "POST"
        }
      },
      "description": "Create a new lead relationship",
      "resource": "lead"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many leads",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "value"
              }
            }
          ]
        },
        "request": {
          "url": "/Relationship_Organization_CommercialRelationship_Lead",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of lead relationships",
      "resource": "lead"
    },
    {
      "name": "Upgrade to Customer",
      "value": "upgradeToCustomer",
      "action": "Upgrade a lead to customer",
      "routing": {
        "request": {
          "url": "/Relationship_Organization_CommercialRelationship_Lead",
          "method": "POST"
        }
      },
      "description": "Convert an existing lead into a customer relationship",
      "resource": "lead"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an organization",
      "routing": {
        "request": {
          "url": "/Relation_Organization",
          "method": "POST"
        }
      },
      "description": "Create a new organization in Tribe CRM",
      "resource": "organization"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an organization",
      "routing": {
        "request": {
          "url": "=/Relation_Organization({{$parameter['organizationId']}})",
          "method": "DELETE"
        }
      },
      "description": "Delete an organization by ID",
      "resource": "organization"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many organizations",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "value"
              }
            }
          ]
        },
        "request": {
          "url": "/Relation_Organization",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of organizations",
      "resource": "organization"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an organization",
      "routing": {
        "request": {
          "url": "/Relation_Organization",
          "method": "POST"
        }
      },
      "description": "Update an existing organization by ID",
      "resource": "organization"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a person",
      "routing": {
        "request": {
          "url": "/Relation_Person",
          "method": "POST"
        }
      },
      "description": "Create a new person in Tribe CRM",
      "resource": "person"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a person",
      "routing": {
        "request": {
          "url": "=/Relation_Person({{$parameter['personId']}})",
          "method": "DELETE"
        }
      },
      "description": "Delete a person by ID",
      "resource": "person"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many persons",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "value"
              }
            }
          ]
        },
        "request": {
          "url": "/Relation_Person",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of persons",
      "resource": "person"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a person",
      "routing": {
        "request": {
          "url": "/Relation_Person",
          "method": "POST"
        }
      },
      "description": "Update an existing person by ID",
      "resource": "person"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many products",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "value"
              }
            }
          ]
        },
        "request": {
          "url": "/Product",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of products",
      "resource": "product"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a sales opportunity",
      "routing": {
        "request": {
          "url": "/Activity_SalesOpportunity",
          "method": "POST"
        }
      },
      "description": "Create a new sales opportunity",
      "resource": "salesOpportunity"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many sales opportunities",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "value"
              }
            }
          ]
        },
        "request": {
          "url": "/Activity_SalesOpportunity",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of sales opportunities",
      "resource": "salesOpportunity"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a sales opportunity",
      "routing": {
        "request": {
          "url": "/Activity_SalesOpportunity",
          "method": "POST"
        }
      },
      "description": "Update an existing sales opportunity by ID",
      "resource": "salesOpportunity"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "routing": {
        "request": {
          "url": "/Activity_Task",
          "method": "POST"
        }
      },
      "description": "Create a new task in Tribe CRM",
      "resource": "task"
    }
  ]

npm_readme:
  # n8n-nodes-tribecrm

  This is an [n8n](https://n8n.io/) community node for **[Tribe CRM](https://www.tribecrm.nl/)**.

  Tribe CRM is a Dutch CRM platform that helps businesses manage their relationships, sales pipeline, tasks, and activities. This node lets you interact with the Tribe CRM API directly from your n8n workflows.

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

  ---

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Tribe CRM API documentation (Postman)](https://www.postman.com/tribecrm/tribe-crm-client-api/overview)

  ---

  ## Supported Resources & Operations

  | Resource | Operations |
  |---|---|
  | **Appointment** | Create, Get Many |
  | **Contact** | Create, Get Many |
  | **Customer** | Create, Get Many, Update |
  | **Employee** | Get Current, Get Many |
  | **Invoice** | Get Many, Update Phase | ⚠️ Requires Billing module |
  | **Lead** | Create, Get Many, Upgrade to Customer |
  | **Organization** | Create, Delete, Get Many, Update |
  | **Person** | Create, Delete, Get Many, Update |
  | **Product** | Get Many |
  | **Sales Opportunity** | Create, Get Many, Update |
  | **Task** | Create |

  All **Get Many** operations support standard OData query parameters: `$filter`, `$select`, `$expand`, `$orderby`, `$top` (limit), and `$skip` (pagination).

  ---

  ## Credentials

  This node uses **OAuth2 Client Credentials** (service account / machine-to-machine flow). No user login is required.

  You will need:

  1. A **Client ID** and **Client Secret** — created in the Tribe CRM API Configuration page (Settings → API → Applications)
  2. The **Access Token URL** for your environment:
     - Production: `https://auth.tribecrm.nl/oauth2/token`
     - Staging: `https://auth-staging.tribecrm.nl/oauth2/token`
  3. The **API Base URL** for your environment:
     - Production: `https://api.tribecrm.nl`
     - Staging: `https://api-staging.tribecrm.nl`

  ### Setup

  1. In n8n, go to **Credentials → New**
  2. Search for **Tribe CRM OAuth2 API**
  3. Fill in the Access Token URL, Client ID, Client Secret, and API Base URL
  4. Click **Save** — n8n will automatically fetch and refresh tokens

  ---

  ## Installation

  ### n8n Cloud / self-hosted (GUI)

  1. Go to **Settings → Community Nodes**
  2. Enter `n8n-nodes-tribecrm` and install

  ### Self-hosted (npm)

  ```bash
  npm install n8n-nodes-tribecrm
  ```

  ---

  ## Example: Sync a new lead from a form submission

  ```
  Webhook → Tribe CRM (Create Person) → Tribe CRM (Create Lead)
  ```

  1. Receive form data via Webhook node
  2. Create a Person in Tribe CRM with the contact details
  3. Create a Lead linked to the new person's organisation

  ---

  ## Compatibility

  - Requires n8n **1.0.0** or later
  - Uses the Tribe CRM OData API (`/v1/odata/`) and Webhooks API (`/v1/webhooks/`)

  ---

  ## Author

  **Johann Norsa** — [Efficy](https://www.efficy.com/)
  [johann.norsa@efficy.com](mailto:johann.norsa@efficy.com)

  ---

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables direct interaction with the Tribe CRM API to manage CRM entities such as persons, organizations, leads, opportunities, tasks, and invoices within automated workflows.","capabilities":["Create appointments, contacts, customers, employees, invoices, leads, organizations, persons, products, sales opportunities, and tasks","Retrieve multiple records using OData query parameters ($filter, $select, $expand, $orderby, $top, $skip)","Update customers, organizations, persons, sales opportunities, and invoices","Delete organizations and persons","Upgrade leads to customers","Update invoice phases (requires Billing module)","Get current and many employees"],"authentication":"OAuth2 Client Credentials (service account/machine-to-machine flow)","commonUseCases":["Syncing new leads from web forms into Tribe CRM","Automating sales pipeline updates based on external triggers","Creating and managing customer records and associated contacts","Generating and updating invoices from workflow events"],"limitations":["Invoice phase updates require the Billing module to be enabled in Tribe CRM","Task creation is limited to creating tasks only (no update/delete operations mentioned)"],"relatedNodes":["n8n-nodes-webhook","n8n-nodes-ocr"]}


node_type: n8n-nodes-condoc.conDoc
package_name: n8n-nodes-condoc
display_name: ConDoc
description: Interact with the ConDoc OCR External API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: pirsquare.auto
author_github_url: https://github.com/Pi-R-SQUARE-Co-ltd/
npm_package_name: n8n-nodes-condoc
npm_version: 0.4.3
community_fetched_at: 2026-07-14T14:40:34.042Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "ocr",
      "options": [
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "OCR",
          "value": "ocr"
        },
        {
          "name": "Simple OCR",
          "value": "simpleOcr"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "process",
      "options": [
        {
          "name": "Process",
          "value": "process",
          "action": "Process file with simple OCR",
          "description": "Upload file with auto project creation and OCR processing"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "simpleOcr"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload File",
          "value": "upload",
          "action": "Upload a file for OCR processing",
          "description": "Upload a file for OCR processing"
        },
        {
          "name": "Get Job Status",
          "value": "getJobStatus",
          "action": "Get OCR job status",
          "description": "Get the status and results of an OCR job"
        },
        {
          "name": "Get Multiple Job Status",
          "value": "getBatchStatus",
          "action": "Get multiple OCR job status",
          "description": "Get status of multiple OCR jobs in a single request"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ocr"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List documents",
          "description": "List documents (paginated)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a document",
          "description": "Get a document with OCR results"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Process",
      "value": "process",
      "action": "Process file with simple OCR",
      "description": "Upload file with auto project creation and OCR processing",
      "resource": "simpleOcr"
    },
    {
      "name": "Upload File",
      "value": "upload",
      "action": "Upload a file for OCR processing",
      "description": "Upload a file for OCR processing",
      "resource": "ocr"
    },
    {
      "name": "Get Job Status",
      "value": "getJobStatus",
      "action": "Get OCR job status",
      "description": "Get the status and results of an OCR job",
      "resource": "ocr"
    },
    {
      "name": "Get Multiple Job Status",
      "value": "getBatchStatus",
      "action": "Get multiple OCR job status",
      "description": "Get status of multiple OCR jobs in a single request",
      "resource": "ocr"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List documents",
      "description": "List documents (paginated)",
      "resource": "document"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a document",
      "description": "Get a document with OCR results",
      "resource": "document"
    }
  ]

npm_readme:
  # n8n-nodes-condoc

  <img src="nodes/ConDoc/condoc.png" alt="ConDoc" width="120" />

  This is an n8n community node for the [ConDoc](https://condoc.ai) platform — a multi-tenant document processing and OCR solution built for Thai businesses.

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

  ## Features

  Automate your document processing pipeline with 21 API operations across 9 resources:

  | Resource | Operations | Description |
  |----------|-----------|-------------|
  | **OCR** | Upload File, Get Job Status | Upload documents for OCR processing and poll results |
  | **Document** | List, Get, Delete | Manage processed documents and retrieve OCR results |
  | **Credit** | Get Balance | Check workspace credit balance |
  | **Usage** | Get Summary, Get Daily | Monitor API usage and analytics |
  | **Project** | Create, List, Get, Update, Delete | Manage projects within your workspace |
  | **Project Settings** | Get, Update | Configure webhooks, processing mode, and more |
  | **Project Definition** | Get, Update | Manage project schema definitions |
  | **Project Fixed Data** | Get, Update | Manage custom field data for projects |
  | **Project Field Mapping** | Get, Update | Configure field mapping rules |

  ### Supported File Types

  PDF, JPG, PNG, HEIC, and more — up to 100MB and 50 pages per document.

  ## Prerequisites

  - An active [ConDoc](https://condoc.ai) account
  - A ConDoc API key (generate from your workspace settings)
  - n8n version 1.0.0 or later

  ## Installation

  ### In n8n (Recommended)

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

  ### Manual Installation

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

  Then restart n8n.

  ## Authentication

  This node uses API Key authentication via the `X-API-Key` header.

  1. In ConDoc, go to your workspace settings and create an API key
  2. In n8n, create a new **ConDoc API** credential
  3. Enter your **Base URL** (e.g., `https://n8n.condoc.ai`) and **API Key**

  The credential will be automatically tested against the ConDoc API.

  ## Usage Examples

  ### Example 1: Upload and Process a Document

  1. **Read Binary File** — Read a PDF/image file
  2. **ConDoc (OCR > Upload File)** — Upload the file for processing
  3. **Wait** — Wait for processing to complete
  4. **ConDoc (OCR > Get Job Status)** — Retrieve OCR results

  ### Example 2: List and Export Documents

  1. **ConDoc (Document > List)** — List all documents in a project
  2. **Loop** — Iterate through documents
  3. **ConDoc (Document > Get)** — Get OCR results for each document
  4. **Spreadsheet File** — Export results to Excel/CSV

  ### Example 3: Monitor Credits and Usage

  1. **Schedule Trigger** — Run daily
  2. **ConDoc (Credit > Get Balance)** — Check remaining credits
  3. **ConDoc (Usage > Get Daily)** — Get daily usage stats
  4. **IF** — Check if credits are low
  5. **Send Email / Slack** — Send alert notification

  ## API Rate Limiting

  API requests are rate-limited per API key (default: 60 requests/minute). Rate limits can be configured by your workspace administrator.

  ## Resources

  - [ConDoc Website](https://condoc.ai)
  - [ConDoc API Documentation](https://docs.condoc.ai)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Interact with the ConDoc OCR External API to automate document processing, extraction, and management workflows for Thai businesses.","capabilities":["Upload files for OCR processing","Get OCR job status and results","List, retrieve, and delete processed documents","Check workspace credit balance","Monitor API usage and daily analytics","Create, list, update, and delete projects","Configure project settings (webhooks, processing mode)","Manage project schema definitions","Handle custom field data for projects","Configure field mapping rules"],"authentication":"API Key required via X-API-Key header","commonUseCases":["Automated document digitization and data extraction","Batch processing of invoices and receipts","Monitoring API credits and usage limits","Automated alerts for low credit balances"],"limitations":["File size limit of 100MB per document","Maximum of 50 pages per document","Default API rate limit of 60 requests per minute","Specific file format support (PDF, JPG, PNG, HEIC)"],"relatedNodes":["Spreadsheet File","Read Binary File","Wait","Loop","Schedule Trigger"]}


node_type: n8n-nodes-2captcha-official.twoCaptcha
package_name: n8n-nodes-2captcha-official
display_name: 2Captcha
description: Bypass captchas natively using 2Captcha API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: 2captcha_com
author_github_url: https://github.com/2captchar/n8n-nodes-2captcha.git
npm_package_name: n8n-nodes-2captcha-official
npm_version: 1.0.16
community_fetched_at: 2026-07-14T14:40:34.043Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "captcha",
      "options": [
        {
          "name": "Captcha",
          "value": "captcha"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "turnstile",
      "options": [
        {
          "name": "Cloudflare Turnstile",
          "value": "turnstile",
          "action": "Cloudflare turnstile a captcha"
        },
        {
          "name": "Normal (Image To Text)",
          "value": "normal",
          "action": "Normal image to text a captcha"
        },
        {
          "name": "ReCAPTCHA Enterprise",
          "value": "recaptchaEnterprise",
          "action": "Recaptcha enterprise a captcha"
        },
        {
          "name": "ReCAPTCHA V2",
          "value": "recaptchaV2",
          "action": "Recaptcha v2 a captcha"
        },
        {
          "name": "ReCAPTCHA V3",
          "value": "recaptchaV3",
          "action": "Recaptcha v3 a captcha"
        }
      ],
      "displayName": "Captcha Type",
      "displayOptions": {
        "show": {
          "resource": [
            "captcha"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Cloudflare Turnstile",
      "value": "turnstile",
      "action": "Cloudflare turnstile a captcha",
      "resource": "captcha"
    },
    {
      "name": "Normal (Image To Text)",
      "value": "normal",
      "action": "Normal image to text a captcha",
      "resource": "captcha"
    },
    {
      "name": "ReCAPTCHA Enterprise",
      "value": "recaptchaEnterprise",
      "action": "Recaptcha enterprise a captcha",
      "resource": "captcha"
    },
    {
      "name": "ReCAPTCHA V2",
      "value": "recaptchaV2",
      "action": "Recaptcha v2 a captcha",
      "resource": "captcha"
    },
    {
      "name": "ReCAPTCHA V3",
      "value": "recaptchaV3",
      "action": "Recaptcha v3 a captcha",
      "resource": "captcha"
    }
  ]

npm_readme:
  # n8n-nodes-2captcha

  An n8n community node to automate solving and bypassing the most complex captchas using the [2Captcha.com](https://2captcha.com/auth/register?utm_source=n8n&utm_medium=community_node) API.

  Designed for web scraping, automation experts, and developers dealing with strict anti-bot systems. The node handles the full submit/poll cycle under the hood — pass the target parameters and get the bypass token back in a single node.

  ## Features

  The node has a dynamic UI: pick a captcha type and only the fields required for that type are shown.

  Currently supported:

  - **Cloudflare Turnstile**
  - **reCAPTCHA v2**
  - **reCAPTCHA v3**
  - **reCAPTCHA Enterprise**
  - **Normal Captcha** (Image-to-Text via Base64)

  No need to build complex `Wait` or `HTTP Request` loops — task creation and result polling are handled automatically.

  ## Prerequisites

  - An active [n8n](https://n8n.io/) installation (self-hosted or Cloud).
  - A 2Captcha account and an API key. Get one by registering at [2Captcha](https://2captcha.com/auth/register?utm_source=n8n&utm_medium=community_node).

  ## Installation

  Install directly from the n8n UI:

  1. Go to **Settings → Community Nodes**.
  2. Click **Install**.
  3. Enter `n8n-nodes-2captcha-official` as the package name.
  4. Accept the risks prompt and click **Install**.

  For Docker-based installations you can also add the package to your `package.json` or install it via the terminal inside the n8n container.

  ## Credentials

  1. In your workflow, add the **2Captcha** node.
  2. Open the **Credential** dropdown and choose **Create New**.
  3. Paste your 2Captcha API key and save.

  The credential is verified against `POST https://api.2captcha.com/getBalance`, so a successful save also confirms the key works and the account has balance.

  ## Usage

  1. Select a **Captcha Type** (Turnstile, reCAPTCHA v2/v3/Enterprise, or Normal).
  2. Fill in the dynamic fields:
     - Token-based captchas need **Page URL** and **Site Key / App ID**.
     - reCAPTCHA v3 and Enterprise also accept an **Action** (and v3 accepts **Min Score**).
     - Normal captcha requires the image as a **Base64** string.
  3. Run the node. The solved token is returned on the `token` field of the output JSON, ready to be plugged into a subsequent HTTP Request, Puppeteer/Playwright step, or any other node.

  ### Example output

  ```json
  {
    "success": true,
    "taskId": "7392817492",
    "token": "0.xxxxx_valid_bypass_token_xxxxx",
    "type": "turnstile"
  }
  ```

  ## Resources

  - [2Captcha API documentation](https://2captcha.com/api-docs)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Automates solving and bypassing complex captchas (including Cloudflare Turnstile and reCAPTCHA) using the 2Captcha API within n8n workflows.","capabilities":["Solve Cloudflare Turnstile captchas","Solve reCAPTCHA v2","Solve reCAPTCHA v3","Solve reCAPTCHA Enterprise","Solve Normal Image-to-Text captchas via Base64","Automatically handle task submission and result polling","Return bypass tokens for use in subsequent HTTP or browser automation steps"],"authentication":"API key required","commonUseCases":["Web scraping automation","Bypassing anti-bot systems","Automated form filling with captcha protection","Testing website accessibility against bot detection"],"limitations":["Requires an active 2Captcha account with sufficient balance","Support is limited to the specific captcha types listed (Turnstile, reCAPTCHA v2/3/Enterprise, Normal)","Normal captcha type requires manual conversion of images to Base64 strings"],"relatedNodes":["n8n-nodes-http","n8n-nodes-puppeteer","n8n-nodes-playwright"]}


node_type: n8n-nodes-plus-tard.plusTard
package_name: n8n-nodes-plus-tard
display_name: Plus Tard
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: boreales
author_github_url: https://github.com/boreales/
npm_package_name: n8n-nodes-plus-tard
npm_version: 1.0.4
community_fetched_at: 2026-07-14T14:40:34.044Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  Schedule and manage social media posts across multiple platforms with Plus Tard - supporting Twitter/X, Facebook, Instagram, LinkedIn, TikTok, Bluesky, and Threads

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Media",
          "value": "media",
          "description": "Upload images and videos for use in your social media posts"
        },
        {
          "name": "Post",
          "value": "posts",
          "description": "Create, schedule, and manage social media posts across multiple platforms (Twitter/X, Facebook, Instagram, LinkedIn, TikTok, Bluesky, Threads)"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a scheduled post",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/post",
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "posts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload a media file",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/media",
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "media"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a scheduled post",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/post",
          "method": "POST"
        }
      },
      "resource": "posts"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload a media file",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/media",
          "method": "POST"
        }
      },
      "resource": "media"
    }
  ]

npm_readme:
  # n8n-nodes-plus-tard

  This is an n8n community node for [Plus Tard](https://plus-tard.com) — a social media scheduling platform. It lets you schedule and manage posts across multiple platforms directly from your n8n workflows.

  ## Supported Platforms

  - Twitter/X
  - Facebook
  - Instagram
  - LinkedIn
  - TikTok
  - Bluesky
  - Threads
  - Google

  ## Installation

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

  ## Authentication

  1. Log in to your [Plus Tard](https://plus-tard.com) account.
  2. Generate an API key from your account settings.
  3. In n8n, create a new **Plus Tard API** credential and paste your API key.

  ## Operations

  ### Post

  - **Create** — Schedule a new social media post. Select target platforms and pages, set the text content, attach media, and choose when to publish. Supports platform-specific options like Twitter thread mode and TikTok privacy settings.

  ### Media

  - **Upload** — Upload an image or video file for use in posts. Use the **Read Binary File** node before this operation to load the file into n8n.

  ## Usage Example

  1. Add a **Read Binary File** node to load an image.
  2. Add a **Plus Tard** node with the **Media → Upload** operation to upload it.
  3. Add another **Plus Tard** node with the **Post → Create** operation, referencing the uploaded media URL and setting your desired schedule.

  ## Resources

  - [Plus Tard website](https://plus-tard.com)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables users to schedule and manage social media posts across multiple platforms (including Twitter/X, Facebook, Instagram, LinkedIn, TikTok, Bluesky, Threads, and Google) directly from n8n workflows.","capabilities":["Schedule new social media posts","Select target platforms and pages","Set post text content","Attach media to posts","Choose publish timing","Configure platform-specific options (e.g., Twitter thread mode, TikTok privacy settings)","Upload images or videos for use in posts"],"authentication":"API key required","commonUseCases":["Automated social media posting from n8n workflows","Cross-platform content scheduling","Dynamic media uploads for social posts"],"limitations":[],"relatedNodes":["Read Binary File"]}


node_type: n8n-nodes-recurpost.recurPost
package_name: n8n-nodes-recurpost
display_name: RecurPost
description: Schedule and automate social media posts with RecurPost
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: recurpost
author_github_url: https://github.com/dinwal/recurpost-n8n.git
npm_package_name: n8n-nodes-recurpost
npm_version: 1.2.0
community_fetched_at: 2026-07-14T14:40:34.045Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "post",
      "options": [
        {
          "name": "AI Content",
          "value": "aiContent"
        },
        {
          "name": "Library",
          "value": "library"
        },
        {
          "name": "Post",
          "value": "post"
        },
        {
          "name": "Social Account",
          "value": "socialAccount"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateText",
      "options": [
        {
          "name": "Generate Image",
          "value": "generateImage",
          "action": "Generate image",
          "description": "Generate an image using AI"
        },
        {
          "name": "Generate Text",
          "value": "generateText",
          "action": "Generate text content",
          "description": "Generate post content using AI"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiContent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addContent",
      "options": [
        {
          "name": "Add Content",
          "value": "addContent",
          "action": "Add content to library",
          "description": "Add content to a library for recurring posts"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many libraries",
          "description": "Get many libraries"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "library"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "schedule",
      "options": [
        {
          "name": "Schedule",
          "value": "schedule",
          "action": "Schedule a post",
          "description": "Schedule a post to social media accounts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "post"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Connection URLs",
          "value": "getConnectionUrls",
          "action": "Get connection links",
          "description": "Get URLs to connect new social media accounts"
        },
        {
          "name": "Get History",
          "value": "getHistory",
          "action": "Get posting history",
          "description": "Get posting history for a social media account"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many social accounts",
          "description": "Get many connected social media accounts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "socialAccount"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Image",
      "value": "generateImage",
      "action": "Generate image",
      "description": "Generate an image using AI",
      "resource": "aiContent"
    },
    {
      "name": "Generate Text",
      "value": "generateText",
      "action": "Generate text content",
      "description": "Generate post content using AI",
      "resource": "aiContent"
    },
    {
      "name": "Add Content",
      "value": "addContent",
      "action": "Add content to library",
      "description": "Add content to a library for recurring posts",
      "resource": "library"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many libraries",
      "description": "Get many libraries",
      "resource": "library"
    },
    {
      "name": "Schedule",
      "value": "schedule",
      "action": "Schedule a post",
      "description": "Schedule a post to social media accounts",
      "resource": "post"
    },
    {
      "name": "Get Connection URLs",
      "value": "getConnectionUrls",
      "action": "Get connection links",
      "description": "Get URLs to connect new social media accounts",
      "resource": "socialAccount"
    },
    {
      "name": "Get History",
      "value": "getHistory",
      "action": "Get posting history",
      "description": "Get posting history for a social media account",
      "resource": "socialAccount"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many social accounts",
      "description": "Get many connected social media accounts",
      "resource": "socialAccount"
    }
  ]

npm_readme:
  # n8n-nodes-recurpost

  This is an n8n community node for [RecurPost](https://recurpost.com) - the social media scheduling tool that helps you automate and recycle your content.

  ## Features

  - **Schedule Posts** - Post to multiple social media accounts instantly or at a scheduled time
  - **Multiple Images** - Attach several images to a single post or library item (carousel/gallery)
  - **Per-Platform Customization** - Override the message and set platform-specific options for Facebook, Instagram, LinkedIn, Pinterest, Google Business, YouTube, TikTok, Threads, Bluesky and Twitter/X
  - **Manage Libraries** - Add content to your recurring content libraries, with go-live / expiry dates and top-of-queue
  - **Get Social Accounts** - Retrieve list of connected social media accounts
  - **Posting History** - Pull posting history for an account, optionally over a date range
  - **AI Content Generation** - Generate post text (with multi-turn conversation) and images using AI

  ## Installation

  ### In n8n Desktop or Self-hosted

  1. Go to **Settings** > **Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-recurpost` and click **Install**

  ### Manual Installation

  ```bash
  npm install n8n-nodes-recurpost
  ```

  ## Credentials

  You'll need your RecurPost API credentials:

  1. Log in to your RecurPost account
  2. Go to **Account Settings**
  3. Find your **API Key**
  4. Use your account email and API key to authenticate in n8n

  ## Operations

  ### Post

  | Operation | Description |
  |-----------|-------------|
  | Schedule | Schedule a post to one or more social media accounts (sent to each account separately) |

  **Schedule Type:**
  - **Post Now** - Publish immediately
  - **Schedule for Later** - Set a specific date and time

  **Media & General Options:**
  - Image URLs (add multiple for a carousel/gallery)
  - Video URL
  - Link URL
  - First Comment (default, applied to all platforms)
  - Host Images on RecurPost (turn off to pass original image URLs straight through)

  **Per-Platform Options** (apply to both Schedule and Add Content):
  - **Per-Platform Message Overrides** - a custom message for any of the 10 supported networks
  - **Facebook** - post type (feed/reel/story), first comment
  - **Instagram** - post type, share reel to feed, first comment
  - **LinkedIn** - document URL + title (document carousel), first comment
  - **Pinterest** - pin title
  - **Google Business** - CTA + URL, offer title/dates/coupon/terms/redeem link
  - **YouTube** - title, category, privacy, tags, thumbnail, made-for-kids
  - **TikTok** - privacy, allow comments/duet/stitches, branded content flags

  ### Library

  | Operation | Description |
  |-----------|-------------|
  | Add Content | Add content to a library for recurring posts |
  | Get All | Retrieve all your content libraries |

  **Add Content** supports all the media and per-platform options above, plus:
  - Go Live Date (keep as draft until)
  - Stop Recurring Date (expire after)
  - Top of Queue

  ### Social Account

  | Operation | Description |
  |-----------|-------------|
  | Get All | Get all connected social media accounts |
  | Get Connection URLs | Get URLs to connect new social media accounts |
  | Get History | Get posting history for a specific social account (optional start/end date range and video-update filter) |

  ### AI Content

  | Operation | Description |
  |-----------|-------------|
  | Generate Text | Generate post content using AI (supports multi-turn conversation via session ID, chat progress and chat history) |
  | Generate Image | Generate an image using AI |

  ## Example Workflow

  ### Schedule a Post from RSS Feed

  1. **RSS Feed Read** node - Get new articles
  2. **RecurPost** node - Schedule post with article title and link
  3. Connect to multiple social accounts

  ### Add Blog Posts to Library

  1. **Webhook** node - Receive new blog post notification
  2. **RecurPost** node - Add content to a recurring library
  3. Content will be automatically recycled

  ## Support

  - [RecurPost Help Center](https://help.recurpost.com)
  - [n8n Community](https://community.n8n.io)

  ## License

  MIT

  ## Links

  - [RecurPost Website](https://recurpost.com)
  - [n8n Website](https://n8n.io)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

ai_documentation_summary:
  {"purpose":"The RecurPost node enables users to schedule, automate, and recycle social media posts across multiple platforms using the RecurPost API. It also supports managing content libraries and generating AI-driven post text and images.","capabilities":["Schedule posts to multiple social media accounts instantly","Schedule posts for a specific date and time","Add posts to a posting queue","Manage recurring content libraries (add and retrieve)","Retrieve connected social media accounts","Get connection URLs for new social accounts","Retrieve posting history for specific accounts","Generate post text using AI","Generate images using AI"],"authentication":"API key required (Account email and API key)","commonUseCases":["Automatically schedule blog posts to social media from an RSS feed","Create a library of evergreen content that recycles automatically","Generate social media captions and images using AI before scheduling","Manage and monitor posting history across multiple social accounts"],"limitations":[],"relatedNodes":["RSS Feed Read","Webhook"]}


node_type: n8n-nodes-deepkeep.deepKeep
package_name: n8n-nodes-deepkeep
display_name: DeepKeep
description: Interact with the DeepKeep AI Firewall API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: dk-gil
author_github_url: https://github.com/Deepkeepai/
npm_package_name: n8n-nodes-deepkeep
npm_version: 0.1.7
community_fetched_at: 2026-07-14T14:40:34.048Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "firewallConversation",
      "options": [
        {
          "name": "Firewall Conversation",
          "value": "firewallConversation"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "checkInput",
      "options": [
        {
          "name": "Check Input",
          "value": "checkInput",
          "action": "Check prompt against defined guardrails",
          "description": "Check prompt against defined guardrails"
        },
        {
          "name": "Create Conversation",
          "value": "createConversation",
          "action": "Create a new conversation in a firewall",
          "description": "Create a new conversation in a firewall"
        },
        {
          "name": "Make API Call",
          "value": "makeApiCall",
          "action": "Perform an arbitrary authorized API call",
          "description": "Performs an arbitrary authorized API call"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "firewallConversation"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Check Input",
      "value": "checkInput",
      "action": "Check prompt against defined guardrails",
      "description": "Check prompt against defined guardrails",
      "resource": "firewallConversation"
    },
    {
      "name": "Create Conversation",
      "value": "createConversation",
      "action": "Create a new conversation in a firewall",
      "description": "Create a new conversation in a firewall",
      "resource": "firewallConversation"
    },
    {
      "name": "Make API Call",
      "value": "makeApiCall",
      "action": "Perform an arbitrary authorized API call",
      "description": "Performs an arbitrary authorized API call",
      "resource": "firewallConversation"
    }
  ]

npm_readme:
  # n8n-nodes-deepkeep

  An [n8n](https://n8n.io) community node for the [DeepKeep](https://deepkeep.ai) AI Firewall API.

  Use it in your workflows to check LLM inputs and outputs against DeepKeep guardrails, create firewall conversations, and make arbitrary authorized calls to any DeepKeep API endpoint.

  ## Installation

  ### Via the n8n UI (self-hosted or Cloud once verified)

  In your n8n instance, go to **Settings → Community Nodes → Install**, paste `n8n-nodes-deepkeep`, and click **Install**.

  ### Manually (self-hosted)

  From your n8n root directory:

  ```bash
  npm install n8n-nodes-deepkeep
  ```

  Make sure `N8N_COMMUNITY_PACKAGES_ENABLED=true` (default in recent versions), then restart n8n.

  ## Credentials

  Create a **DeepKeep API** credential with:

  | Field       | Value                                                                 |
  | ----------- | --------------------------------------------------------------------- |
  | Subdomain   | Your DeepKeep environment subdomain (e.g. `acme`). The base URL becomes `https://api.<subdomain>.deepkeep.ai`. |
  | API Key     | Your DeepKeep API key. Sent as the `X-API-Key` header on every request. |

  The credential is tested against `GET /health`.

  ## Operations

  All operations live under the **Firewall Conversation** resource.

  ### Check input

  Checks a prompt against the guardrails defined on a firewall.

  - **Firewall** — select from the list of firewalls in your DeepKeep workspace (populated dynamically).
  - **Conversation ID** — existing conversation to append the check to.
  - **Content** — the text to check.
  - **Return Full Response (Enable Logs)** — when `false`, the API returns only the first violation; when `true`, it returns all violations. Default: `true`.

  Returns the wrapped response `{ results: ... }` to mirror the Make.com module.

  ### Create conversation

  Starts a new conversation on a firewall. Returns the raw response from the API (including the new conversation ID).

  - **Firewall** — select from the list.

  ### Make API call

  An escape hatch that lets you call any DeepKeep endpoint with the configured credentials.

  - **URL** — path relative to the API base (e.g. `v2/firewalls/search`).
  - **Method** — `GET`, `POST`, `PUT`, `PATCH`, `DELETE`.
  - **Headers** — optional key/value rows. `Content-Type: application/json` is included by default.
  - **Query Parameters** — optional key/value rows.
  - **Body** — raw request body (usually JSON).

  Returns `{ statusCode, headers, body }`. `body` is parsed as JSON when possible, otherwise passed through as a string. Non-2xx responses are returned in the envelope rather than thrown.

  ## Local development

  See the sibling `n8n-deepkeep/` folder in the source repository for a Docker Compose setup that runs n8n locally with this package mounted as a custom node.

  ## License

  [MIT](./LICENSE)

  ## Support

  - DeepKeep documentation: https://deepkeep.ai
  - Issues: please file on this repository
  - Contact: contact@deepkeep.ai

ai_documentation_summary:
  {"purpose":"Interact with the DeepKeep AI Firewall API to check LLM inputs and outputs against guardrails, manage firewall conversations, and make arbitrary authorized API calls.","capabilities":["Check prompt content against defined guardrails","Create new firewall conversations","Make arbitrary HTTP calls to any DeepKeep API endpoint (GET, POST, PUT, PATCH, DELETE)","Return full violation logs or single violation based on configuration","Support custom headers, query parameters, and request bodies"],"authentication":"API key required","commonUseCases":["Real-time content safety filtering for LLM outputs","Automated guardrail compliance monitoring","Custom API integration with DeepKeep firewall services"],"limitations":["All operations are scoped under the 'Firewall Conversation' resource","Non-2xx API responses are returned in the response envelope rather than throwing errors"],"relatedNodes":[]}


node_type: @webdataforms/n8n-nodes-web-data-forms.webDataFormsTrigger
package_name: @webdataforms/n8n-nodes-web-data-forms
display_name: Web Data Forms Trigger
description: Handle Web Data Forms webhooks
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: amolam
author_github_url: https://github.com/Web-Data-Forms/n8n-nodes-web-data-forms.git
npm_package_name: @webdataforms/n8n-nodes-web-data-forms
npm_version: 1.0.2
community_fetched_at: 2026-07-14T14:40:34.049Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-web-data-forms

  This is an n8n community node. It lets you use [Web Data Forms](https://webdataforms.com) in your n8n workflows.

  The deepest n8n integration for any forms platform. Go beyond simple webhooks with full-lifecycle triggers, submission management, and deep submission/form workflow CRUD operations. Web Data Forms is a powerful front-end for automations and AI workflows. It enables users to build smart, branded forms and automate complex processes with integrated form workflows and visual reporting.

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

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

  ## Installation

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

  ## Operations

  ### Submission

  - **Create**: Create a new submission for a specific Data Template.
  - **Find**: Retrieve a single submission by its unique submission number.
  - **Search**: Search for submissions based on specific field values.
  - **Update**: Update existing submission data.

  ### Workflow

  - **Update**: Modify the workflow state of a submission, including status, priority, type, and assignee, and add internal comments.

  ### Triggers

  - **New Submission**: Triggers a workflow when a new form is submitted.
  - **Workflow Updated**: Triggers a workflow when a submission's workflow state (e.g., status or priority) is changed.

  ## Credentials

  To use this node, you will need to authenticate with your Web Data Forms account.

  ### Prerequisites

  1.  Sign up for a [Web Data Forms](https://webdataforms.com/pricing) account.
  2.  Log in to your [Web Data Forms account](https://webapp.webdataforms.com).
  3.  Retreive your Group ID and API Key (details below).

  ### Authentication

  You will need the following information to set up your credentials:

  - **API Key**: Your unique API key found in the Web Data Forms Group->Information page.
  - **Group ID**: Your specific Group identifier found in in the Web Data Forms Group->Information page.

  ## Important Note

  Automation must be enabled for the particluar Data Template (form) that you want to use on n8n. To enable automation for a Data Template please navigate to the Data Templates page, find the appropriate Data Template, click on the 'Details / Modify' button, set Automation to Enabled and finally click the 'Update' button to save changes.

  ## Compatibility

  - Minimum n8n version: 1.0.0
  - Tested against n8n version: 1.x

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Web Data Forms Website](https://webdataforms.com)
  - [API Documentation](https://documenter.getpostman.com/view/32580100/2sB3WtrJLA)
  - [Web Data Forms Tutorials](https://webdataforms.com/blog/tutorials)
  - [Web Data Forms Support](https://dotzcom.atlassian.net/servicedesk/customer/portal/1)

ai_documentation_summary:
  {"purpose":"This n8n community node enables deep integration with Web Data Forms, allowing users to create, search, update, and manage form submissions and workflows through full-lifecycle triggers and CRUD operations.","capabilities":["Create new form submissions","Retrieve single submissions by ID","Search submissions by field values","Update existing submission data","Modify submission workflow state (status, priority, type, assignee)","Add internal comments to submissions","Trigger on new form submissions","Trigger on workflow state changes"],"authentication":"API key required (along with Group ID)","commonUseCases":["Automate responses when new form submissions are received","Route submissions based on workflow state changes","Update submission status or priority programmatically","Search and filter historical form data"],"limitations":["Automation must be manually enabled for each specific Data Template (form) in the Web Data Forms interface before it can be used with n8n"],"relatedNodes":[]}


node_type: @webdataforms/n8n-nodes-web-data-forms.webDataForms
package_name: @webdataforms/n8n-nodes-web-data-forms
display_name: Web Data Forms
description: Interact with the Web Data Forms API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: amolam
author_github_url: https://github.com/Web-Data-Forms/n8n-nodes-web-data-forms.git
npm_package_name: @webdataforms/n8n-nodes-web-data-forms
npm_version: 1.0.2
community_fetched_at: 2026-07-14T14:40:34.050Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "submission",
      "options": [
        {
          "name": "Submission",
          "value": "submission"
        },
        {
          "name": "Workflow",
          "value": "workflow"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a submission",
          "routing": {
            "send": {
              "type": "body",
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=https://api.webdataforms.com/automations/data-template-submissions/groups/<groupId>/data-templates/{{$parameter.dataTemplateId}}",
              "method": "POST"
            }
          },
          "description": "Create a new submission"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find a submission",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=https://api.webdataforms.com/automations/data-template-submissions/{{$parameter.submissionNumber}}/groups/<groupId>/data-templates/{{$parameter.dataTemplateId}}",
              "method": "GET"
            }
          },
          "description": "Find a submission by number"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search submissions",
          "routing": {
            "send": {
              "type": "query",
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null,
                null
              ]
            },
            "request": {
              "qs": {
                "detailed": "true",
                "page-size": "={{$parameter.limit}}"
              },
              "url": "=https://api.webdataforms.com/automations/data-template-submissions/groups/<groupId>/data-templates/{{$parameter.dataTemplateId}}",
              "method": "GET"
            }
          },
          "description": "Search submissions by field value"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a submission",
          "routing": {
            "send": {
              "type": "body",
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=https://api.webdataforms.com/automations/data-template-submissions/{{$parameter.submissionNumber}}/groups/<groupId>/data-templates/{{$parameter.dataTemplateId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing submission"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "submission"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "update",
      "options": [
        {
          "name": "Update",
          "value": "update",
          "action": "Update a workflow",
          "routing": {
            "send": {
              "type": "body",
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=https://api.webdataforms.com/automations/data-template-submissions/{{$parameter.submissionNumber}}/groups/<groupId>/data-templates/{{$parameter.dataTemplateId}}/workflow",
              "method": "POST"
            }
          },
          "description": "Update workflow state of a submission"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workflow"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a submission",
      "routing": {
        "send": {
          "type": "body",
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=https://api.webdataforms.com/automations/data-template-submissions/groups/<groupId>/data-templates/{{$parameter.dataTemplateId}}",
          "method": "POST"
        }
      },
      "description": "Create a new submission",
      "resource": "submission"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find a submission",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=https://api.webdataforms.com/automations/data-template-submissions/{{$parameter.submissionNumber}}/groups/<groupId>/data-templates/{{$parameter.dataTemplateId}}",
          "method": "GET"
        }
      },
      "description": "Find a submission by number",
      "resource": "submission"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search submissions",
      "routing": {
        "send": {
          "type": "query",
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null,
            null
          ]
        },
        "request": {
          "qs": {
            "detailed": "true",
            "page-size": "={{$parameter.limit}}"
          },
          "url": "=https://api.webdataforms.com/automations/data-template-submissions/groups/<groupId>/data-templates/{{$parameter.dataTemplateId}}",
          "method": "GET"
        }
      },
      "description": "Search submissions by field value",
      "resource": "submission"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a submission",
      "routing": {
        "send": {
          "type": "body",
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=https://api.webdataforms.com/automations/data-template-submissions/{{$parameter.submissionNumber}}/groups/<groupId>/data-templates/{{$parameter.dataTemplateId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing submission",
      "resource": "submission"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a workflow",
      "routing": {
        "send": {
          "type": "body",
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=https://api.webdataforms.com/automations/data-template-submissions/{{$parameter.submissionNumber}}/groups/<groupId>/data-templates/{{$parameter.dataTemplateId}}/workflow",
          "method": "POST"
        }
      },
      "description": "Update workflow state of a submission",
      "resource": "workflow"
    }
  ]

npm_readme:
  # n8n-nodes-web-data-forms

  This is an n8n community node. It lets you use [Web Data Forms](https://webdataforms.com) in your n8n workflows.

  The deepest n8n integration for any forms platform. Go beyond simple webhooks with full-lifecycle triggers, submission management, and deep submission/form workflow CRUD operations. Web Data Forms is a powerful front-end for automations and AI workflows. It enables users to build smart, branded forms and automate complex processes with integrated form workflows and visual reporting.

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

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

  ## Installation

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

  ## Operations

  ### Submission

  - **Create**: Create a new submission for a specific Data Template.
  - **Find**: Retrieve a single submission by its unique submission number.
  - **Search**: Search for submissions based on specific field values.
  - **Update**: Update existing submission data.

  ### Workflow

  - **Update**: Modify the workflow state of a submission, including status, priority, type, and assignee, and add internal comments.

  ### Triggers

  - **New Submission**: Triggers a workflow when a new form is submitted.
  - **Workflow Updated**: Triggers a workflow when a submission's workflow state (e.g., status or priority) is changed.

  ## Credentials

  To use this node, you will need to authenticate with your Web Data Forms account.

  ### Prerequisites

  1.  Sign up for a [Web Data Forms](https://webdataforms.com/pricing) account.
  2.  Log in to your [Web Data Forms account](https://webapp.webdataforms.com).
  3.  Retreive your Group ID and API Key (details below).

  ### Authentication

  You will need the following information to set up your credentials:

  - **API Key**: Your unique API key found in the Web Data Forms Group->Information page.
  - **Group ID**: Your specific Group identifier found in in the Web Data Forms Group->Information page.

  ## Important Note

  Automation must be enabled for the particluar Data Template (form) that you want to use on n8n. To enable automation for a Data Template please navigate to the Data Templates page, find the appropriate Data Template, click on the 'Details / Modify' button, set Automation to Enabled and finally click the 'Update' button to save changes.

  ## Compatibility

  - Minimum n8n version: 1.0.0
  - Tested against n8n version: 1.x

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Web Data Forms Website](https://webdataforms.com)
  - [API Documentation](https://documenter.getpostman.com/view/32580100/2sB3WtrJLA)
  - [Web Data Forms Tutorials](https://webdataforms.com/blog/tutorials)
  - [Web Data Forms Support](https://dotzcom.atlassian.net/servicedesk/customer/portal/1)

ai_documentation_summary:
  {"purpose":"Interact with the Web Data Forms API to manage form submissions, workflows, and triggers within n8n workflows.","capabilities":["Create new form submissions","Retrieve specific submissions by ID","Search submissions by field values","Update existing submission data","Modify submission workflow state (status, priority, type, assignee)","Add internal comments to submissions","Trigger workflows on new form submissions","Trigger workflows on workflow state changes"],"authentication":"API key required (along with Group ID)","commonUseCases":["Automate responses when forms are submitted","Route submissions based on workflow state changes","Update submission status and assignees dynamically","Search and filter historical form data"],"limitations":["Automation must be manually enabled for each Data Template (form) before use"],"relatedNodes":[]}


