Workflow: develop a modular n8n workflow that supports Wait Splitout Create Webhook
Integrations: aggregate, code, executeWorkflow, executeWorkflowTrigger, executionData, filter, googleDrive, googleSheets, httpRequest, if, manualTrigger, removeDuplicates, set, splitInBatches, splitOut, stickyNote, switch, wait

{"nodes": [{"id": "2498bb93-176f-458c-acee-f541859df770", "name": "When clicking \u2018Test workflow\u2019", "type": "n8n-nodes-base.manualTrigger", "position": [2460, 2820], "parameters": {}, "typeVersion": 1}, {"id": "c08bcf84-9336-44f9-b452-0c9469f18f48", "name": "Web Search For API Schema", "type": "n8n-nodes-base.httpRequest", "onError": "continueRegularOutput", "position": [3100, 3820], "parameters": {"url": "https://api.apify.com/v2/acts/serping~fast-google-search-results-scraper/run-sync-get-dataset-items", "method": "POST", "options": {}, "sendBody": true, "authentication": "genericCredentialType", "bodyParameters": {"parameters": [{"name": "searchTerms", "value": "={{\n[\n  `site:${$json.data.url.replace(/^http[s]:\\/\\//, '').replace(/\\/$/, '').replace('www.', '')} \"${$json.data.service}\" api developer (intext:reference OR intext:resource) (-inurl:support OR -inurl:help) (inurl:api OR intitle:api) -filetype:pdf`\n]\n}}"}, {"name": "resultsPerPage", "value": "={{ 10 }}"}]}, "genericAuthType": "httpHeaderAuth"}, "typeVersion": 4.2}, {"id": "d5b19e3a-acd0-4b06-8d77-42de1f797dba", "name": "Scrape Webpage Contents", "type": "n8n-nodes-base.httpRequest", "position": [3940, 3720], "parameters": {"url": "https://api.apify.com/v2/acts/apify~web-scraper/run-sync-get-dataset-items", "options": {"batching": {"batch": {"batchSize": 2, "batchInterval": 30000}}}, "jsonBody": "={\n  \"startUrls\": [\n    {\n      \"url\": \"{{ $json.source.link }}\",\n      \"method\": \"GET\"\n    }\n  ],\n  \"breakpointLocation\": \"NONE\",\n  \"browserLog\": false,\n  \"closeCookieModals\": false,\n  \"debugLog\": false,\n  \"downloadCss\": false,\n  \"downloadMedia\": false,\n  \"excludes\": [\n    {\n      \"glob\": \"/**/*.{png,jpg,jpeg,pdf}\"\n    }\n  ],\n  \"headless\": true,\n  \"ignoreCorsAndCsp\": false,\n  \"ignoreSslErrors\": false,\n  \n  \"injectJQuery\": true,\n  \"keepUrlFragments\": false,\n  \"linkSelector\": \"a[href]\",\n  \"maxCrawlingDepth\": 1,\n  \"maxPagesPerCrawl\": 1,\n  \"maxRequestRetries\": 1,\n  \"maxResultsPerCrawl\": 1,\n  \"pageFunction\": \"// The function accepts a single argument: the \\\"context\\\" object.\\n// For a complete list of its properties and functions,\\n// see https://apify.com/apify/web-scraper#page-function \\nasync function pageFunction(context) {\\n\\n    await new Promise(res => { setTimeout(res, 6000) });\\n    // This statement works as a breakpoint when you're trying to debug your code. Works only with Run mode: DEVELOPMENT!\\n    // debugger; \\n\\n    // jQuery is handy for finding DOM elements and extracting data from them.\\n    // To use it, make sure to enable the \\\"Inject jQuery\\\" option.\\n    const $ = context.jQuery;\\n    const title = $('title').first().text();\\n\\n    // Clone the body to avoid modifying the original content\\n    const bodyClone = $('body').clone();\\n    bodyClone.find('iframe, img, script, style, object, embed, noscript, svg, video, audio').remove();\\n    const body = bodyClone.html();\\n\\n    // Return an object with the data extracted from the page.\\n    // It will be stored to the resulting dataset.\\n    return {\\n        url: context.request.url,\\n        title,\\n        body\\n    };\\n}\",\n  \"postNavigationHooks\": \"// We need to return array of (possibly async) functions here.\\n// The functions accept a single argument: the \\\"crawlingContext\\\" object.\\n[\\n    async (crawlingContext) => {\\n        // ...\\n    },\\n]\",\n  \"preNavigationHooks\": \"// We need to return array of (possibly async) functions here.\\n// The functions accept two arguments: the \\\"crawlingContext\\\" object\\n// and \\\"gotoOptions\\\".\\n[\\n    async (crawlingContext, gotoOptions) => {\\n        // ...\\n    },\\n]\\n\",\n  \"proxyConfiguration\": {\n    \"useApifyProxy\": true\n  },\n  \"runMode\": \"PRODUCTION\",\n  \n  \"useChrome\": false,\n  \"waitUntil\": [\n    \"domcontentloaded\"\n  ],\n  \"globs\": [],\n  \"pseudoUrls\": [],\n  \"proxyRotation\": \"RECOMMENDED\",\n  \"maxConcurrency\": 50,\n  \"pageLoadTimeoutSecs\": 60,\n  \"pageFunctionTimeoutSecs\": 60,\n  \"maxScrollHeightPixels\": 5000,\n  \"customData\": {}\n}", "sendBody": true, "sendQuery": true, "specifyBody": "json", "authentication": "genericCredentialType", "genericAuthType": "httpQueryAuth", "queryParameters": {"parameters": [{"name": "memory", "value": "2048"}]}}, "typeVersion": 4.2}, {"id": "5853ba7e-4068-4792-be5c-b8cf81ee89cb", "name": "Results to List", "type": "n8n-nodes-base.splitOut", "position": [3460, 3720], "parameters": {"options": {}, "fieldToSplitOut": "origin_search.results"}, "typeVersion": 1}, {"id": "8ed2e8ec-b2e3-474b-b19d-f38b518f274b", "name": "Recursive Character Text Splitter1", "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter", "position": [5800, 4020], "parameters": {"options": {}, "chunkSize": 4000}, "typeVersion": 1}, {"id": "e2a8137b-7da3-4032-bca2-c14465356f02", "name": "Content Chunking @ 50k Chars", "type": "n8n-nodes-base.set", "position": [5380, 3740], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "7753a4f4-3ec2-4c05-81df-3d5e8979a478", "name": "=data", "type": "array", "value": "={{ new Array(Math.round($json.content.length / Math.min($json.content.length, 50000))).fill('').map((_,idx) => $json.content.substring(idx * 50000, idx * 50000 + 50000)) }}"}, {"id": "7973bcb4-f239-4619-85fc-c76e20386375", "name": "service", "type": "string", "value": "={{ $json.service }}"}, {"id": "b46e44bc-ad01-4cf0-8b07-25eeb1fb5874", "name": "url", "type": "string", "value": "={{ $json.url }}"}]}}, "typeVersion": 3.3}, {"id": "6ef5866a-d992-4472-9221-27efbec8e7be", "name": "Split Out Chunks", "type": "n8n-nodes-base.splitOut", "position": [5540, 3740], "parameters": {"include": "allOtherFields", "options": {}, "fieldToSplitOut": "data"}, "typeVersion": 1}, {"id": "5e43b4d8-cebf-43ed-866d-0b4cb2997853", "name": "Default Data Loader", "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", "position": [5800, 3900], "parameters": {"options": {"metadata": {"metadataValues": [{"name": "service", "value": "={{ $json.service }}"}, {"name": "url", "value": "={{ $json.url }}"}]}}, "jsonData": "={{ $json.data }}", "jsonMode": "expressionData"}, "typeVersion": 1}, {"id": "d4b34767-be50-44ee-b778-18842034c276", "name": "Set Embedding Variables", "type": "n8n-nodes-base.set", "position": [4980, 3580], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "4008ae44-7998-4a6f-88c9-686f8b02e92b", "name": "content", "type": "string", "value": "={{ $json.body }}"}, {"id": "f7381ac6-ef40-463c-ad2b-df2c31d3e828", "name": "service", "type": "string", "value": "={{ $('EventRouter').first().json.data.service }}"}, {"id": "7eae99fd-75c7-4974-a128-641b8ada0cc2", "name": "url", "type": "string", "value": "={{ $json.url }}"}]}}, "typeVersion": 3.4}, {"id": "109b6c3a-9b16-40cc-9186-5045df387b52", "name": "Execute Workflow Trigger", "type": "n8n-nodes-base.executeWorkflowTrigger", "position": [2420, 4200], "parameters": {}, "typeVersion": 1}, {"id": "31556ff2-6358-4bd4-8ec4-2797d993256e", "name": "Execution Data", "type": "n8n-nodes-base.executionData", "position": [2620, 4200], "parameters": {"dataToSave": {"values": [{"key": "eventType", "value": "={{ $json.eventType }}"}, {"key": "executedById", "value": "={{ $json.executedById }}"}, {"key": "service", "value": "={{ $json.data.service }}"}]}}, "typeVersion": 1}, {"id": "b65b3d4d-f667-4f8f-a06f-847c3d7b83e0", "name": "EventRouter", "type": "n8n-nodes-base.switch", "position": [2800, 4200], "parameters": {"rules": {"values": [{"outputKey": "research", "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"operator": {"type": "string", "operation": "equals"}, "leftValue": "={{ $json.eventType }}", "rightValue": "research"}]}, "renameOutput": true}, {"outputKey": "extraction", "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "5418515e-ef6a-42e0-aeb9-8d0d35b898ca", "operator": {"name": "filter.operator.equals", "type": "string", "operation": "equals"}, "leftValue": "={{ $json.eventType }}", "rightValue": "extract"}]}, "renameOutput": true}, {"outputKey": "generate", "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "0135165e-d211-44f3-92a4-a91858a57d99", "operator": {"name": "filter.operator.equals", "type": "string", "operation": "equals"}, "leftValue": "={{ $json.eventType }}", "rightValue": "generate"}]}, "renameOutput": true}]}, "options": {}}, "typeVersion": 3.2}, {"id": "541f7d9b-c8ff-44dc-8618-8550dbf0b951", "name": "Google Gemini Chat Model", "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", "position": [4460, 3740], "parameters": {"options": {}, "modelName": "models/gemini-1.5-flash-latest"}, "typeVersion": 1}, {"id": "617d6139-8417-4ecb-8f7c-558cd1c38ac3", "name": "Successful Runs", "type": "n8n-nodes-base.filter", "position": [4100, 3720], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "cac77cce-0a5c-469e-ba80-9fb026f04b18", "operator": {"type": "string", "operation": "exists", "singleValue": true}, "leftValue": "={{ $json.body }}", "rightValue": ""}]}}, "typeVersion": 2.2, "alwaysOutputData": true}, {"id": "1115db69-b414-46cd-a9a1-565ae98cbd91", "name": "For Each Document...", "type": "n8n-nodes-base.splitInBatches", "position": [5180, 3580], "parameters": {"options": {}}, "typeVersion": 3}, {"id": "3f0e3764-2479-4d74-aca8-c3e830eac423", "name": "Embeddings Google Gemini", "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini", "position": [5680, 3900], "parameters": {"modelName": "models/text-embedding-004"}, "typeVersion": 1}, {"id": "87d42766-d1a2-406d-b01c-044fd2fc8910", "name": "Has API Documentation?", "type": "@n8n/n8n-nodes-langchain.textClassifier", "position": [4460, 3580], "parameters": {"options": {"fallback": "discard"}, "inputText": "={{\n$json.body\n  .replaceAll('\\n', '')\n  .substring(0, 40000)\n}}", "categories": {"categories": [{"category": "contains_api_schema_documentation", "description": "True if this document contains REST API schema documentation or definitions"}]}}, "typeVersion": 1, "alwaysOutputData": true}, {"id": "55939b49-d91c-42a1-9770-48cbe4008c9a", "name": "Store Document Embeddings", "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant", "position": [5700, 3740], "parameters": {"mode": "insert", "options": {}, "qdrantCollection": {"__rl": true, "mode": "id", "value": "={{ $('EventRouter').first().json.data.collection }}"}}, "typeVersion": 1}, {"id": "3e1da749-b8b9-42cb-818b-eabf4b114abb", "name": "Embeddings Google Gemini1", "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini", "position": [3700, 4520], "parameters": {"modelName": "models/text-embedding-004"}, "typeVersion": 1}, {"id": "be0906d4-351f-4b3b-9f32-8e5ee68083c5", "name": "Google Gemini Chat Model1", "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", "position": [4600, 4240], "parameters": {"options": {}, "modelName": "models/gemini-1.5-pro-002"}, "typeVersion": 1}, {"id": "886415d5-c888-4b97-9fb5-02e6a14df4cc", "name": "Extract API Operations", "type": "@n8n/n8n-nodes-langchain.informationExtractor", "position": [4600, 4100], "parameters": {"text": "={{ $json.documents }}", "options": {"systemPromptTemplate": "=You have been given an extract of a webpage which should contain a list of web/REST api operations.\nStep 1. Extract all REST (eg. GET,POST,PUT,DELETE) API operation endpoints from the page content and generate appropriate labels for the resource, operation, description, method for each.\n* \"resource\" refers to the API group, for example: \"/v1/api/indicators/list\" and \"/v1/api/indicators/create\" will both have the resource name of \"indicators\". Use the following template \"<domain>\" eg. \"entities\", \"posts\", \"credentials\".\n* \"operation\" refers to the action performed, use the following template \"<verb> <entity>\" eg. \"List entities\", \"Create post\", \"Update credentials\"\n* only use one HTTP verb for \"method\"\n* \"description\" should be limited to one sentence.\n* Examples of API urls: \"/api/\", \"/api/v1/\", \"/v1/api\". API urls should not end with \"htm\" or html\".\n* Extract a maximum of 15 endpoints.\n* If the page content contains no api operations, return an empty array."}, "schemaType": "manual", "inputSchema": "{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"resource\": { \"type\": \"string\" },\n      \"operation\": { \"type\": \"string\" },\n      \"description\": { \"type\": \"string\" },\n      \"url\": { \"type\": \"string\" },\n      \"method\": { \"type\": \"string\" },\n      \"documentation_url\": { \"type\": \"string\" }\n    }\n  }\n}"}, "typeVersion": 1}, {"id": "76470e34-7c1f-44ce-81e2-047dcca3fa32", "name": "Search in Relevant Docs", "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant", "position": [3700, 4380], "parameters": {"mode": "load", "topK": 5, "prompt": "={{ $json.query }}", "options": {"searchFilterJson": "={{\n{\n  \"must\": [\n    {\n      \"key\": \"metadata.service\",\n      \"match\": {\n        \"value\": $('EventRouter').first().json.data.service\n      }\n    }\n  ]\n}\n}}"}, "qdrantCollection": {"__rl": true, "mode": "id", "value": "={{ $('EventRouter').first().json.data.collection }}"}}, "typeVersion": 1}, {"id": "49ca6a35-5b89-4ed5-bbab-250e09b4222f", "name": "Wait", "type": "n8n-nodes-base.wait", "position": [3780, 3160], "webhookId": "e9ad3ef0-7403-4e65-b0a4-4afdfb0cbc6d", "parameters": {"amount": 0}, "typeVersion": 1.1}, {"id": "800cb05b-f5d1-47c8-869e-921915929f34", "name": "Remove Dupes", "type": "n8n-nodes-base.removeDuplicates", "position": [3780, 3720], "parameters": {"compare": "selectedFields", "options": {}, "fieldsToCompare": "source.link"}, "typeVersion": 2}, {"id": "d8203c40-aa0b-44b9-8dfd-aea250c8d109", "name": "Filter Results", "type": "n8n-nodes-base.filter", "position": [3620, 3720], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "42872456-411b-4d86-a9dd-b907d001ea1c", "operator": {"name": "filter.operator.equals", "type": "string", "operation": "equals"}, "leftValue": "={{ $json.type }}", "rightValue": "normal"}]}}, "typeVersion": 2.2}, {"id": "5714dc09-fd67-4285-9434-ac97cd80dec1", "name": "Research", "type": "n8n-nodes-base.executeWorkflow", "onError": "continueErrorOutput", "position": [3460, 2980], "parameters": {"mode": "each", "options": {"waitForSubWorkflow": true}, "workflowId": {"__rl": true, "mode": "id", "value": "={{ $workflow.id }}"}}, "typeVersion": 1.1}, {"id": "2a2d3271-b0b6-4a1a-94e1-9b01399ba88f", "name": "Has Results?", "type": "n8n-nodes-base.if", "position": [3280, 3820], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "1223d607-45a8-44b1-b510-56fdbe013eba", "operator": {"type": "array", "operation": "exists", "singleValue": true}, "leftValue": "={{ $jmespath($json, 'origin_search.results') }}", "rightValue": ""}]}}, "typeVersion": 2.2}, {"id": "b953082c-2d37-4549-80a7-d60535b8580e", "name": "Response Empty", "type": "n8n-nodes-base.set", "position": [3460, 3900], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "5bb23ce9-eb72-4868-9344-9e5d3952cc52", "name": "response", "type": "string", "value": "no web results"}]}}, "executeOnce": true, "typeVersion": 3.4}, {"id": "41e9c328-d145-4b71-93bb-e2c448a14be0", "name": "Response OK", "type": "n8n-nodes-base.set", "position": [5380, 3580], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "79598789-4468-4565-828f-fedc48be15c3", "name": "response", "type": "string", "value": "ok"}]}}, "executeOnce": true, "typeVersion": 3.4}, {"id": "5d0a7556-def9-4c70-8828-40b4d22904de", "name": "Combine Docs", "type": "n8n-nodes-base.aggregate", "position": [4020, 4380], "parameters": {"options": {}, "aggregate": "aggregateAllItemData"}, "typeVersion": 1}, {"id": "39bd90b4-e0f5-49b0-b4a7-55a3ae8eccb2", "name": "Template to List", "type": "n8n-nodes-base.splitOut", "position": [3280, 4200], "parameters": {"options": {"destinationFieldName": "query"}, "fieldToSplitOut": "queries"}, "typeVersion": 1}, {"id": "51a1da10-5ad0-4bac-9bec-55b5af3da702", "name": "Query Templates", "type": "n8n-nodes-base.set", "position": [3100, 4200], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "e2a02550-8f53-4f8d-bb83-68ee3606736e", "name": "queries", "type": "array", "value": "=[\n\"What are the core functionalities, essential features, or primary use cases of {{ $json.data.service }}?\",\n\"Is there an API overview or API categories for {{ $json.data.service }}? What main APIs are listed or mentioned?\",\n\"What industry does  {{ $json.data.service }} operate in? What is the most important of the services in the industry? Return the important service as the function.\",\n\"What REST apis (GET, POST, DELETE, PATCH) and/or operations can you identify for {{ $json.data.service }}?\",\n\"Does {{ $json.data.service }} have any CURL examples? If you can, identify one such example and explain what it does.\"\n]"}]}}, "executeOnce": true, "typeVersion": 3.3}, {"id": "414091b7-114b-4fc3-9755-2f87cfef239e", "name": "Google Gemini Chat Model2", "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", "position": [3700, 4240], "parameters": {"options": {}, "modelName": "models/gemini-1.5-pro-002"}, "typeVersion": 1}, {"id": "1f0f45ff-3bc9-4786-92e1-319244d020c0", "name": "For Each Template...", "type": "n8n-nodes-base.splitInBatches", "position": [3460, 4200], "parameters": {"options": {}}, "typeVersion": 3}, {"id": "2e577e62-7f89-4c99-b540-ce8c44f19a55", "name": "Query & Docs", "type": "n8n-nodes-base.set", "position": [4180, 4380], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "fdaea3de-3c9a-4f26-b7dc-769e534006a9", "name": "query", "type": "string", "value": "={{ $('For Each Template...').item.json.query }}"}, {"id": "88198374-d2f9-4ae7-b262-d3b2e630e0ac", "name": "documents", "type": "string", "value": "={{ $json.data.map(item => item.document.pageContent.replaceAll('\\n', ' ')).join('\\n---\\n') }}"}]}}, "typeVersion": 3.4}, {"id": "548d51fd-9740-4b4c-9c81-db62d2b31053", "name": "Identify Service Products", "type": "@n8n/n8n-nodes-langchain.informationExtractor", "position": [3700, 4100], "parameters": {"text": "={{ $json.query }}", "options": {"systemPromptTemplate": "=Use the following document to answer the user's question:\n```\n{{ $json.documents.replace(/[\\{\\}]/g, '') }}\n```"}, "attributes": {"attributes": [{"name": "product_or_solution", "required": true, "description": "A product or solution offered by the service"}, {"name": "description", "required": true, "description": "description of what the product or solution of the service does"}]}}, "typeVersion": 1}, {"id": "aa7041e9-4ac8-47f9-b98e-cf57873922bb", "name": "Extract API Templates", "type": "n8n-nodes-base.set", "position": [4180, 4200], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "e2a02550-8f53-4f8d-bb83-68ee3606736e", "name": "query", "type": "string", "value": "=I'm interested in {{ $json.output.product_or_solution }} apis which {{ $json.output.description }} What are the GET, POST, PATCH and/or DELETE endpoints of the {{ $json.output.product_or_solution }} api?"}]}}, "typeVersion": 3.3}, {"id": "e2b371c1-52af-4e57-877c-6933ba84e2d5", "name": "Embeddings Google Gemini2", "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini", "position": [4600, 4520], "parameters": {"modelName": "models/text-embedding-004"}, "typeVersion": 1}, {"id": "d808c591-34e2-455f-96b1-3689d950608d", "name": "Search in Relevant Docs1", "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant", "position": [4600, 4380], "parameters": {"mode": "load", "topK": 20, "prompt": "={{ $json.query }}", "options": {"searchFilterJson": "={{\n{\n  \"must\": [\n    {\n      \"key\": \"metadata.service\",\n      \"match\": {\n        \"value\": $('EventRouter').first().json.data.service\n      }\n    }\n  ]\n}\n}}"}, "qdrantCollection": {"__rl": true, "mode": "id", "value": "={{ $('EventRouter').first().json.data.collection }}"}}, "typeVersion": 1}, {"id": "222bde31-57fa-46c4-a23b-ec2d1b3c7e2d", "name": "Combine Docs1", "type": "n8n-nodes-base.aggregate", "position": [4920, 4380], "parameters": {"options": {}, "aggregate": "aggregateAllItemData"}, "typeVersion": 1}, {"id": "57677d83-a79a-4b71-9977-ee2324f5d593", "name": "Query & Docs1", "type": "n8n-nodes-base.set", "position": [5080, 4380], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "fdaea3de-3c9a-4f26-b7dc-769e534006a9", "name": "query", "type": "string", "value": "={{ $('For Each Template...1').item.json.query }}"}, {"id": "88198374-d2f9-4ae7-b262-d3b2e630e0ac", "name": "documents", "type": "string", "value": "={{\n$json.data\n  .map(item =>\n`url: ${item.document.metadata.url}\ncontent: ${item.document.pageContent}`\n  )\n  .join('\\n---\\n')\n  .replaceAll('\\n\\n', '\\n')\n}}"}]}}, "typeVersion": 3.4}, {"id": "124c3b07-3210-4190-8865-e18017fc9e6c", "name": "For Each Template...1", "type": "n8n-nodes-base.splitInBatches", "position": [4380, 4200], "parameters": {"options": {}}, "typeVersion": 3}, {"id": "8ea4a5da-c471-4201-a08b-9c18ed08ddc7", "name": "Merge Lists", "type": "n8n-nodes-base.code", "position": [4920, 4200], "parameters": {"jsCode": "return $input.all().flatMap(input => input.json.output) || [];"}, "typeVersion": 2, "alwaysOutputData": true}, {"id": "0e38cd3c-c843-4f6d-bdb6-901a8c12acbf", "name": "Remove Duplicates", "type": "n8n-nodes-base.removeDuplicates", "position": [5280, 4200], "parameters": {"compare": "selectedFields", "options": {}, "fieldsToCompare": "method, url"}, "typeVersion": 2}, {"id": "8f127f7a-e351-4b30-82dd-1f785be4a765", "name": "Append Row", "type": "n8n-nodes-base.googleSheets", "position": [5440, 4200], "parameters": {"columns": {"value": {"url": "={{ $json.url }}", "method": "={{ $json.method }}", "service": "={{ $('EventRouter').first().json.data.service }}", "resource": "={{ $json.resource }}", "operation": "={{ $json.operation }}", "description": "={{ $json.description }}", "documentation_url": "={{ $json.documentation_url }}"}, "schema": [{"id": "service", "type": "string", "display": true, "required": false, "displayName": "service", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "resource", "type": "string", "display": true, "required": false, "displayName": "resource", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "operation", "type": "string", "display": true, "required": false, "displayName": "operation", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "description", "type": "string", "display": true, "required": false, "displayName": "description", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "url", "type": "string", "display": true, "required": false, "displayName": "url", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "method", "type": "string", "display": true, "required": false, "displayName": "method", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "documentation_url", "type": "string", "display": true, "required": false, "displayName": "documentation_url", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": []}, "options": {"useAppend": true}, "operation": "append", "sheetName": {"__rl": true, "mode": "list", "value": 1042334767, "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=1042334767", "cachedResultName": "Extracted API Operations"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "typeVersion": 4.5}, {"id": "d9f490e2-320e-4dc1-af8f-ac7f6a61568d", "name": "Response OK1", "type": "n8n-nodes-base.set", "position": [5600, 4200], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "79598789-4468-4565-828f-fedc48be15c3", "name": "response", "type": "string", "value": "ok"}]}}, "executeOnce": true, "typeVersion": 3.4}, {"id": "7780b6ee-0fde-40bb-aef6-e67b883645e1", "name": "Has Operations?", "type": "n8n-nodes-base.if", "position": [5080, 4200], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "a95420a7-6265-4ea3-9c01-82c2d7aeb4f8", "operator": {"type": "object", "operation": "notEmpty", "singleValue": true}, "leftValue": "={{ $input.first().json }}", "rightValue": ""}]}}, "typeVersion": 2.2}, {"id": "6589673d-984d-4a1e-a655-1bc19d2b154e", "name": "Response Empty1", "type": "n8n-nodes-base.set", "position": [5280, 4380], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "5bb23ce9-eb72-4868-9344-9e5d3952cc52", "name": "response", "type": "string", "value": "no api operations found"}]}}, "executeOnce": true, "typeVersion": 3.4}, {"id": "c5dc3eac-a3a5-481d-a8bc-8b653d88143d", "name": "Research Pending", "type": "n8n-nodes-base.googleSheets", "position": [3180, 2980], "parameters": {"columns": {"value": {"row_number": "={{ $('For Each Research...').item.json.row_number }}", "Stage 1 - Research": "=pending"}, "schema": [{"id": "Service", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Service", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Website", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Website", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 1 - Research", "type": "string", "display": true, "required": false, "displayName": "Stage 1 - Research", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 2 - Extraction", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 2 - Extraction", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 3 - Output File", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 3 - Output File", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "row_number", "type": "string", "display": true, "removed": false, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["row_number"]}, "options": {}, "operation": "update", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "typeVersion": 4.5}, {"id": "39bceadb-6c3b-4b52-82b9-bdcecd9a164a", "name": "Research Result", "type": "n8n-nodes-base.googleSheets", "position": [3620, 2980], "parameters": {"columns": {"value": {"row_number": "={{ $('For Each Research...').item.json.row_number }}", "Stage 1 - Research": "={{ $json.response }}"}, "schema": [{"id": "Service", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Service", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Website", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Website", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 1 - Research", "type": "string", "display": true, "required": false, "displayName": "Stage 1 - Research", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 2 - Extraction", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 2 - Extraction", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 3 - Output File", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 3 - Output File", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "row_number", "type": "string", "display": true, "removed": false, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["row_number"]}, "options": {}, "operation": "update", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "typeVersion": 4.5}, {"id": "0bd07f31-1c51-45aa-8316-b658aa214293", "name": "Research Error", "type": "n8n-nodes-base.googleSheets", "position": [3620, 3160], "parameters": {"columns": {"value": {"row_number": "={{ $('For Each Research...').item.json.row_number }}", "Stage 1 - Research": "=error"}, "schema": [{"id": "Service", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Service", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Website", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Website", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 1 - Research", "type": "string", "display": true, "required": false, "displayName": "Stage 1 - Research", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 2 - Extraction", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 2 - Extraction", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 3 - Output File", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 3 - Output File", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "row_number", "type": "string", "display": true, "removed": false, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["row_number"]}, "options": {}, "operation": "update", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "typeVersion": 4.5}, {"id": "0385784f-95ef-46c3-82c4-50fcf7146736", "name": "Extract Pending", "type": "n8n-nodes-base.googleSheets", "position": [4160, 2980], "parameters": {"columns": {"value": {"row_number": "={{ $('For Each Extract...').item.json.row_number }}", "Stage 2 - Extraction": "pending"}, "schema": [{"id": "Service", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Service", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Website", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Website", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 1 - Research", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 1 - Research", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 2 - Extraction", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Stage 2 - Extraction", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 3 - Output File", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 3 - Output File", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "row_number", "type": "string", "display": true, "removed": false, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["row_number"]}, "options": {}, "operation": "update", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "executeOnce": false, "typeVersion": 4.5}, {"id": "21c1e982-25a6-4a00-b8d3-6c299c452106", "name": "Research Event", "type": "n8n-nodes-base.set", "position": [3320, 2980], "parameters": {"mode": "raw", "options": {}, "jsonOutput": "={{\n{\n  \"eventType\": \"research\",\n  \"createdAt\": $now.toISO(),\n  \"executedById\": $execution.id,\n  \"data\": {\n    \"row_number\": $('For Each Research...').item.json.row_number,\n    \"service\": $('For Each Research...').item.json.Service,\n    \"url\": $('For Each Research...').item.json.Website,\n    \"collection\": \"api_schema_crawler_and_extractor\"\n  }\n}\n}}"}, "typeVersion": 3.4}, {"id": "c83f99f1-e28f-4c15-aff8-da25bb5dfe3b", "name": "Extract Event", "type": "n8n-nodes-base.set", "position": [4300, 2980], "parameters": {"mode": "raw", "options": {}, "jsonOutput": "={{\n{\n  \"eventType\": \"extract\",\n  \"createdAt\": $now.toISO(),\n  \"executedById\": $execution.id,\n  \"data\": {\n    \"row_number\": $('For Each Extract...').item.json.row_number,\n    \"service\": $('For Each Extract...').item.json.Service,\n    \"url\": $('For Each Extract...').item.json.Website,\n    \"collection\": \"api_schema_crawler_and_extractor\"\n  }\n}\n}}"}, "typeVersion": 3.4}, {"id": "88c3caec-75f7-47a1-9b50-1246c457c2b4", "name": "Extract", "type": "n8n-nodes-base.executeWorkflow", "onError": "continueErrorOutput", "position": [4440, 2980], "parameters": {"mode": "each", "options": {"waitForSubWorkflow": true}, "workflowId": {"__rl": true, "mode": "id", "value": "={{ $workflow.id }}"}}, "typeVersion": 1.1}, {"id": "2342b7ff-b00d-439a-a859-63fd0a6bac3a", "name": "Extract Result", "type": "n8n-nodes-base.googleSheets", "position": [4600, 2980], "parameters": {"columns": {"value": {"row_number": "={{ $('For Each Extract...').item.json.row_number }}", "Stage 2 - Extraction": "={{ $json.response }}"}, "schema": [{"id": "Service", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Service", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Website", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Website", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 1 - Research", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 1 - Research", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 2 - Extraction", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Stage 2 - Extraction", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 3 - Output File", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 3 - Output File", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "row_number", "type": "string", "display": true, "removed": false, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["row_number"]}, "options": {}, "operation": "update", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "typeVersion": 4.5}, {"id": "d4c423c9-1d6a-4a69-9302-92ec79734d61", "name": "Extract Error", "type": "n8n-nodes-base.googleSheets", "position": [4600, 3160], "parameters": {"columns": {"value": {"row_number": "={{ $('For Each Extract...').item.json.row_number }}", "Stage 2 - Extraction": "error"}, "schema": [{"id": "Service", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Service", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Website", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Website", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 1 - Research", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 1 - Research", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 2 - Extraction", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Stage 2 - Extraction", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 3 - Output File", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 3 - Output File", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "row_number", "type": "string", "display": true, "removed": false, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["row_number"]}, "options": {}, "operation": "update", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "typeVersion": 4.5}, {"id": "f64254d6-4493-4aaf-8160-35e8ff4fdc34", "name": "Get API Operations", "type": "n8n-nodes-base.googleSheets", "position": [3100, 4740], "parameters": {"options": {}, "filtersUI": {"values": [{"lookupValue": "={{ $json.data.service }}", "lookupColumn": "service"}]}, "sheetName": {"__rl": true, "mode": "list", "value": 1042334767, "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=1042334767", "cachedResultName": "Extracted API Operations"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "typeVersion": 4.5}, {"id": "fa748b63-3d2b-4cf3-b1fb-1bd953e5054b", "name": "Contruct JSON Schema", "type": "n8n-nodes-base.code", "position": [3280, 4740], "parameters": {"jsCode": "const service = {\n  documentation_url: $('EventRouter').first().json.data.url,\n  endpoints: [],\n};\n\nconst resources = Array.from(new Set($input.all().map(item => item.json.resource.toLowerCase().trim())));\n\nfor (const resource of resources) {\n  const resourceLabel = resource.replace('api', '').trim();\n  if (!resourceLabel) continue;\n  const endpoint = {\n    resource: resourceLabel[0].toUpperCase() + resourceLabel.substring(1, resourceLabel.length)\n  };\n  const operations = $input.all()\n    .filter(item => item.json.resource.toLowerCase().trim() === resource)\n    .map(item => item.json);\n  endpoint.operations = operations.map(op => ({\n    \"operation\": op.operation[0].toUpperCase() + op.operation.substring(1, op.operation.length),\n    \"description\": op.description.match(/(^[^\\.]+.)/)[0],\n    \"ApiUrl\": op.url,\n    \"method\": op.method.toUpperCase(),\n    \"method_documentation_url\": op.documentation_url || ''\n  }));\n  service.endpoints.push(endpoint);\n}\n\nreturn service;"}, "typeVersion": 2}, {"id": "e60b7ccb-baa2-4095-8425-0e20bcdbfdd2", "name": "Upload to Drive", "type": "n8n-nodes-base.googleDrive", "position": [3640, 4740], "parameters": {"name": "={{ $json.filename }}", "content": "={{ $json.data }}", "driveId": {"__rl": true, "mode": "list", "value": "My Drive"}, "options": {}, "folderId": {"__rl": true, "mode": "list", "value": "149rBJYv9RKQx-vQO2qKUGfUzxk_J4lfw", "cachedResultUrl": "https://drive.google.com/drive/folders/149rBJYv9RKQx-vQO2qKUGfUzxk_J4lfw", "cachedResultName": "63. API Schema Extractor Remake"}, "operation": "createFromText"}, "typeVersion": 3}, {"id": "f90546e6-3610-4198-87fc-96d7e2b6bc57", "name": "Set Upload Fields", "type": "n8n-nodes-base.set", "position": [3460, 4740], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "3c7d4946-c385-4aff-93ec-ae0850964099", "name": "filename", "type": "string", "value": "={{\n  $('EventRouter').first().json.data.service\n    .replace(/\\W+/, '_')\n    .toLowerCase()\n}}_api_operations_{{ $now.format('yyyyMMddhhmmss') }}.json"}, {"id": "4a7a9fae-7267-4ef6-ae33-ac4cd9777ee9", "name": "data", "type": "string", "value": "={{ JSON.stringify($json, null, 4) }}"}]}}, "typeVersion": 3.4}, {"id": "c814b48d-2005-4150-a481-956f0b9506a5", "name": "Response OK2", "type": "n8n-nodes-base.set", "position": [3820, 4740], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "79598789-4468-4565-828f-fedc48be15c3", "name": "response", "type": "object", "value": "={{\n({\n  id: $json.id,\n  filename: $('Set Upload Fields').item.json.filename\n}).toJsonString()\n}}"}]}}, "executeOnce": true, "typeVersion": 3.4}, {"id": "4b1efa99-e8c8-49f5-8db8-916b8dde838d", "name": "Generate Event", "type": "n8n-nodes-base.set", "position": [5300, 2980], "parameters": {"mode": "raw", "options": {}, "jsonOutput": "={{\n{\n  \"eventType\": \"generate\",\n  \"createdAt\": $now.toISO(),\n  \"executedById\": $execution.id,\n  \"data\": {\n    \"row_number\": $('For Each Generate...').item.json.row_number,\n    \"service\": $('For Each Generate...').item.json.Service,\n    \"url\": $('For Each Generate...').item.json.Website,\n    \"collection\": \"api_schema_crawler_and_extractor\"\n  }\n}\n}}"}, "typeVersion": 3.4}, {"id": "49b82a1a-d51e-4caf-b7ab-8d27d0585b60", "name": "Generate Pending", "type": "n8n-nodes-base.googleSheets", "position": [5160, 2980], "parameters": {"columns": {"value": {"row_number": "={{ $('For Each Generate...').item.json.row_number }}", "Stage 3 - Output File": "pending"}, "schema": [{"id": "Service", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Service", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Website", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Website", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 1 - Research", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 1 - Research", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 2 - Extraction", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 2 - Extraction", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 3 - Output File", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Stage 3 - Output File", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "row_number", "type": "string", "display": true, "removed": false, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["row_number"]}, "options": {}, "operation": "update", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "executeOnce": false, "typeVersion": 4.5}, {"id": "7d1a937c-49cc-40d7-b2ca-d315c5efca93", "name": "Generate", "type": "n8n-nodes-base.executeWorkflow", "onError": "continueErrorOutput", "position": [5440, 2980], "parameters": {"mode": "each", "options": {"waitForSubWorkflow": true}, "workflowId": {"__rl": true, "mode": "id", "value": "={{ $workflow.id }}"}}, "typeVersion": 1.1}, {"id": "f35d843d-6c40-4725-b73f-8ca1a8e219bb", "name": "Generate Error", "type": "n8n-nodes-base.googleSheets", "position": [5600, 3160], "parameters": {"columns": {"value": {"row_number": "={{ $('For Each Generate...').item.json.row_number }}", "Stage 3 - Output File": "error"}, "schema": [{"id": "Service", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Service", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Website", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Website", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 1 - Research", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 1 - Research", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 2 - Extraction", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 2 - Extraction", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 3 - Output File", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Stage 3 - Output File", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "row_number", "type": "string", "display": true, "removed": false, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["row_number"]}, "options": {}, "operation": "update", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "typeVersion": 4.5}, {"id": "e2f1f8e8-6852-4f19-98ec-85d9bd42729c", "name": "Generate Result", "type": "n8n-nodes-base.googleSheets", "position": [5600, 2980], "parameters": {"columns": {"value": {"row_number": "={{ $('For Each Generate...').item.json.row_number }}", "Output Destination": "={{ $json.response.filename }}", "Stage 3 - Output File": "ok"}, "schema": [{"id": "Service", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Service", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Website", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Website", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 1 - Research", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 1 - Research", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 2 - Extraction", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Stage 2 - Extraction", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Stage 3 - Output File", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Stage 3 - Output File", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Output Destination", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Output Destination", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "row_number", "type": "string", "display": true, "removed": false, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["row_number"]}, "options": {}, "operation": "update", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "typeVersion": 4.5}, {"id": "00c5b05b-fd70-4d58-8fc6-4e9b8d689a43", "name": "Get All Extract", "type": "n8n-nodes-base.googleSheets", "position": [3620, 2820], "parameters": {"options": {}, "filtersUI": {"values": [{"lookupValue": "=ok", "lookupColumn": "Stage 1 - Research"}, {"lookupValue": "={{ \"\" }}", "lookupColumn": "Stage 2 - Extraction"}]}, "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "executeOnce": true, "typeVersion": 4.5, "alwaysOutputData": true}, {"id": "c477ea01-028d-4e69-b772-adb8c03d1522", "name": "Get All Research", "type": "n8n-nodes-base.googleSheets", "position": [2640, 2820], "parameters": {"options": {}, "filtersUI": {"values": [{"lookupValue": "={{ \"\" }}", "lookupColumn": "Stage 1 - Research"}]}, "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "aALuyzBGGfmdBzrU", "name": "Google Sheets account 2"}}, "typeVersion": 4.5, "alwaysOutputData": true}, {"id": "60ba84c1-40cf-492f-bf52-c9edf5925646", "name": "For Each Research...", "type": "n8n-nodes-base.splitInBatches", "position": [3020, 2820], "parameters": {"options": {}}, "typeVersion": 3}, {"id": "5365cd1a-c7f8-40fb-84b3-9e5306ecf462", "name": "For Each Extract...", "type": "n8n-nodes-base.splitInBatches", "position": [4000, 2820], "parameters": {"options": {}}, "typeVersion": 3}, {"id": "d7a0743f-5f83-4c9b-b11c-85e2df3a4ecc", "name": "Wait1", "type": "n8n-nodes-base.wait", "position": [4780, 3160], "webhookId": "e9ad3ef0-7403-4e65-b0a4-4afdfb0cbc6d", "parameters": {"amount": 0}, "typeVersion": 1.1}, {"id": "ec09ac70-5e05-463c-9d30-027e691a36b4", "name": "All Research Done?", "type": "n8n-nodes-base.if", "position": [2800, 2820], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "8d4b0159-af18-445e-a9ee-bd7952d8e0bd", "operator": {"type": "object", "operation": "empty", "singleValue": true}, "leftValue": "={{ $input.first().json }}", "rightValue": ""}]}}, "typeVersion": 2.2}, {"id": "cd892e11-b4de-42f1-bab9-4bd783494c8a", "name": "All Extract Done?", "type": "n8n-nodes-base.if", "position": [3780, 2820], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "8d4b0159-af18-445e-a9ee-bd7952d8e0bd", "operator": {"type": "object", "operation": "empty", "singleValue": true}, "leftValue": "={{ $input.first().json }}", "rightValue": ""}]}}, "typeVersion": 2.2}, {"id": "426091fb-d0eb-4589-8f2f-2bbeb9174cfc", "name": "Get All Generate", "type": "n8n-nodes-base.googleSheets", "position": [4600, 2820], "parameters": {"options": {}, "filtersUI": {"values": [{"lookupValue": "=ok", "lookupColumn": "Stage 1 - Research"}, {"lookupValue": "=ok", "lookupColumn": "Stage 2 - Extraction"}, {"lookupValue": "={{ \"\" }}", "lookupColumn": "Stage 3 - Output File"}]}, "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit#gid=0", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1l59ikBvEwPNSWIm2k6KRMFPTNImJPYqs9bzGT5dUiU0/edit?usp=drivesdk", "cachedResultName": "API Schema Crawler & Extractor"}}, "executeOnce": true, "typeVersion": 4.5}, {"id": "01e91cf6-5bd5-4891-ba1f-95176e444fe6", "name": "All Generate Done?", "type": "n8n-nodes-base.if", "position": [4780, 2820], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "8d4b0159-af18-445e-a9ee-bd7952d8e0bd", "operator": {"type": "object", "operation": "empty", "singleValue": true}, "leftValue": "={{ $input.first().json }}", "rightValue": ""}]}}, "typeVersion": 2.2}, {"id": "08f3505d-aad8-475a-bf08-e3da12798367", "name": "For Each Generate...", "type": "n8n-nodes-base.splitInBatches", "position": [5000, 2820], "parameters": {"options": {}}, "typeVersion": 3}, {"id": "1a1b30bd-91ab-41bd-9ead-39d24fc2643f", "name": "Wait2", "type": "n8n-nodes-base.wait", "position": [5780, 3160], "webhookId": "e9ad3ef0-7403-4e65-b0a4-4afdfb0cbc6d", "parameters": {"amount": 0}, "typeVersion": 1.1}, {"id": "8f2be6bb-ab65-4c92-9ca1-d7ffa936a2a3", "name": "Has Results?1", "type": "n8n-nodes-base.if", "position": [4260, 3720], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "1223d607-45a8-44b1-b510-56fdbe013eba", "operator": {"type": "array", "operation": "notEmpty", "singleValue": true}, "leftValue": "={{ $input.all().filter(item => item.json.body) }}", "rightValue": ""}]}}, "typeVersion": 2.2}, {"id": "82fe66bf-4348-4673-8c64-3415f642fb4b", "name": "Response Scrape Error", "type": "n8n-nodes-base.set", "position": [4460, 3900], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "5bb23ce9-eb72-4868-9344-9e5d3952cc52", "name": "response", "type": "string", "value": "web scraping error"}]}}, "executeOnce": true, "typeVersion": 3.4}, {"id": "3625591b-cb48-4131-ae8a-56d1e132bb5a", "name": "Has Results?3", "type": "n8n-nodes-base.if", "position": [4780, 3580], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "1223d607-45a8-44b1-b510-56fdbe013eba", "operator": {"type": "array", "operation": "notEmpty", "singleValue": true}, "leftValue": "={{ $input.all().filter(item => item.json.body) }}", "rightValue": ""}]}}, "typeVersion": 2.2}, {"id": "f82a4a25-5f93-4ba4-baae-08283c4ccadd", "name": "Response No API Docs", "type": "n8n-nodes-base.set", "position": [4980, 3740], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "5bb23ce9-eb72-4868-9344-9e5d3952cc52", "name": "response", "type": "string", "value": "no api docs in web results"}]}}, "executeOnce": true, "typeVersion": 3.4}, {"id": "4c3bb934-966c-445a-893f-0676a59140ee", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [3020, 2580], "parameters": {"width": 620, "height": 180, "content": "## Stage 1 - Research for API Documentation\n- Fetch a list of services pending research from Database (Google Sheet)\n- Uses a search engine (Google) to find API Documentation for each service\n- Uses Webscraper (Apify) to read the contents of search results to filter irrelevant pages\n- Stores webpage contents and metadata into Vector Store (Qdrant)"}, "typeVersion": 1}, {"id": "bc269a57-f353-4cc8-bd2e-43236fa55d39", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [4000, 2580], "parameters": {"width": 760, "height": 180, "content": "## Stage 2 - Extract API Operations From Documentation\n- Fetch a list of services pending extraction from Database (Google Sheet)\n- Query Vector store (Qdrant) to figure out service's products, solutions and offerings\n- Query Vector store (Qdrant) again for API documentation relevant to these products, solutions and offerings\n- Extract any API operations found in the API documentation results using LLM (Gemini)\n- Store extracted API operations into Database (Google Sheet)"}, "typeVersion": 1}, {"id": "d2dcad47-f655-4a15-ac92-6dab05eea4e1", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [5000, 2580], "parameters": {"width": 740, "height": 180, "content": "## Stage 3 - Generate Custom Schema From API Operations\n- Fetch a list of services pending generation from Database (Google Sheet)\n- Fetch all API operations for each service from Database (Google Sheet)\n- Use Code node to combine and group all API operations for a service and convert to a custom schema\n- Upload the resulting custom schema to file storage (Google Drive)"}, "typeVersion": 1}, {"id": "d1e1a271-4260-49c3-bda6-2864605c7365", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [3100, 3680], "parameters": {"color": 5, "width": 180, "height": 80, "content": "## Stage 1 - Subworkflow"}, "typeVersion": 1}, {"id": "1e50f04a-94ff-48b4-aa99-cd1d4f1d12be", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [3100, 4080], "parameters": {"color": 5, "width": 180, "height": 80, "content": "## Stage 2 - Subworkflow"}, "typeVersion": 1}, {"id": "f8334dbd-b542-404a-b4fc-6cf7cc07730d", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [3100, 4620], "parameters": {"color": 5, "width": 180, "height": 80, "content": "## Stage 3 - Subworkflow"}, "typeVersion": 1}], "pinData": {"Execute Workflow Trigger": [{"data": {"url": "https://www.formstack.com/", "service": "Formstack", "collection": "api_schema_crawler_and_extractor", "row_number": 2}, "createdAt": "2024-12-07T12:22:35.344-05:00", "eventType": "research", "executedById": "10234"}]}, "connections": {"Wait": {"main": [[{"node": "For Each Research...", "type": "main", "index": 0}]]}, "Wait1": {"main": [[{"node": "For Each Extract...", "type": "main", "index": 0}]]}, "Wait2": {"main": [[{"node": "For Each Generate...", "type": "main", "index": 0}]]}, "Extract": {"main": [[{"node": "Extract Result", "type": "main", "index": 0}], [{"node": "Extract Error", "type": "main", "index": 0}]]}, "Generate": {"main": [[{"node": "Generate Result", "type": "main", "index": 0}], [{"node": "Generate Error", "type": "main", "index": 0}]]}, "Research": {"main": [[{"node": "Research Result", "type": "main", "index": 0}], [{"node": "Research Error", "type": "main", "index": 0}]]}, "Append Row": {"main": [[{"node": "Response OK1", "type": "main", "index": 0}]]}, "EventRouter": {"main": [[{"node": "Web Search For API Schema", "type": "main", "index": 0}], [{"node": "Query Templates", "type": "main", "index": 0}], [{"node": "Get API Operations", "type": "main", "index": 0}]]}, "Merge Lists": {"main": [[{"node": "Has Operations?", "type": "main", "index": 0}]]}, "Combine Docs": {"main": [[{"node": "Query & Docs", "type": "main", "index": 0}]]}, "Has Results?": {"main": [[{"node": "Results to List", "type": "main", "index": 0}], [{"node": "Response Empty", "type": "main", "index": 0}]]}, "Query & Docs": {"main": [[{"node": "For Each Template...", "type": "main", "index": 0}]]}, "Remove Dupes": {"main": [[{"node": "Scrape Webpage Contents", "type": "main", "index": 0}]]}, "Combine Docs1": {"main": [[{"node": "Query & Docs1", "type": "main", "index": 0}]]}, "Extract Error": {"main": [[{"node": "Wait1", "type": "main", "index": 0}]]}, "Extract Event": {"main": [[{"node": "Extract", "type": "main", "index": 0}]]}, "Has Results?1": {"main": [[{"node": "Has API Documentation?", "type": "main", "index": 0}], [{"node": "Response Scrape Error", "type": "main", "index": 0}]]}, "Has Results?3": {"main": [[{"node": "Set Embedding Variables", "type": "main", "index": 0}], [{"node": "Response No API Docs", "type": "main", "index": 0}]]}, "Query & Docs1": {"main": [[{"node": "For Each Template...1", "type": "main", "index": 0}]]}, "Execution Data": {"main": [[{"node": "EventRouter", "type": "main", "index": 0}]]}, "Extract Result": {"main": [[{"node": "Wait1", "type": "main", "index": 0}]]}, "Filter Results": {"main": [[{"node": "Remove Dupes", "type": "main", "index": 0}]]}, "Generate Error": {"main": [[{"node": "Wait2", "type": "main", "index": 0}]]}, "Generate Event": {"main": [[{"node": "Generate", "type": "main", "index": 0}]]}, "Research Error": {"main": [[{"node": "Wait", "type": "main", "index": 0}]]}, "Research Event": {"main": [[{"node": "Research", "type": "main", "index": 0}]]}, "Extract Pending": {"main": [[{"node": "Extract Event", "type": "main", "index": 0}]]}, "Generate Result": {"main": [[{"node": "Wait2", "type": "main", "index": 0}]]}, "Get All Extract": {"main": [[{"node": "All Extract Done?", "type": "main", "index": 0}]]}, "Has Operations?": {"main": [[{"node": "Remove Duplicates", "type": "main", "index": 0}], [{"node": "Response Empty1", "type": "main", "index": 0}]]}, "Query Templates": {"main": [[{"node": "Template to List", "type": "main", "index": 0}]]}, "Research Result": {"main": [[{"node": "Wait", "type": "main", "index": 0}]]}, "Results to List": {"main": [[{"node": "Filter Results", "type": "main", "index": 0}]]}, "Successful Runs": {"main": [[{"node": "Has Results?1", "type": "main", "index": 0}]]}, "Upload to Drive": {"main": [[{"node": "Response OK2", "type": "main", "index": 0}]]}, "Generate Pending": {"main": [[{"node": "Generate Event", "type": "main", "index": 0}]]}, "Get All Generate": {"main": [[{"node": "All Generate Done?", "type": "main", "index": 0}]]}, "Get All Research": {"main": [[{"node": "All Research Done?", "type": "main", "index": 0}]]}, "Research Pending": {"main": [[{"node": "Research Event", "type": "main", "index": 0}]]}, "Split Out Chunks": {"main": [[{"node": "Store Document Embeddings", "type": "main", "index": 0}]]}, "Template to List": {"main": [[{"node": "For Each Template...", "type": "main", "index": 0}]]}, "All Extract Done?": {"main": [[{"node": "Get All Generate", "type": "main", "index": 0}], [{"node": "For Each Extract...", "type": "main", "index": 0}]]}, "Remove Duplicates": {"main": [[{"node": "Append Row", "type": "main", "index": 0}]]}, "Set Upload Fields": {"main": [[{"node": "Upload to Drive", "type": "main", "index": 0}]]}, "All Generate Done?": {"main": [[], [{"node": "For Each Generate...", "type": "main", "index": 0}]]}, "All Research Done?": {"main": [[{"node": "Get All Extract", "type": "main", "index": 0}], [{"node": "For Each Research...", "type": "main", "index": 0}]]}, "Get API Operations": {"main": [[{"node": "Contruct JSON Schema", "type": "main", "index": 0}]]}, "Default Data Loader": {"ai_document": [[{"node": "Store Document Embeddings", "type": "ai_document", "index": 0}]]}, "For Each Extract...": {"main": [[{"node": "Get All Generate", "type": "main", "index": 0}], [{"node": "Extract Pending", "type": "main", "index": 0}]]}, "Contruct JSON Schema": {"main": [[{"node": "Set Upload Fields", "type": "main", "index": 0}]]}, "For Each Document...": {"main": [[{"node": "Response OK", "type": "main", "index": 0}], [{"node": "Content Chunking @ 50k Chars", "type": "main", "index": 0}]]}, "For Each Generate...": {"main": [[], [{"node": "Generate Pending", "type": "main", "index": 0}]]}, "For Each Research...": {"main": [[{"node": "Get All Extract", "type": "main", "index": 0}], [{"node": "Research Pending", "type": "main", "index": 0}]]}, "For Each Template...": {"main": [[{"node": "Identify Service Products", "type": "main", "index": 0}], [{"node": "Search in Relevant Docs", "type": "main", "index": 0}]]}, "Extract API Templates": {"main": [[{"node": "For Each Template...1", "type": "main", "index": 0}]]}, "For Each Template...1": {"main": [[{"node": "Extract API Operations", "type": "main", "index": 0}], [{"node": "Search in Relevant Docs1", "type": "main", "index": 0}]]}, "Extract API Operations": {"main": [[{"node": "Merge Lists", "type": "main", "index": 0}]]}, "Has API Documentation?": {"main": [[{"node": "Has Results?3", "type": "main", "index": 0}]]}, "Scrape Webpage Contents": {"main": [[{"node": "Successful Runs", "type": "main", "index": 0}]]}, "Search in Relevant Docs": {"main": [[{"node": "Combine Docs", "type": "main", "index": 0}]]}, "Set Embedding Variables": {"main": [[{"node": "For Each Document...", "type": "main", "index": 0}]]}, "Embeddings Google Gemini": {"ai_embedding": [[{"node": "Store Document Embeddings", "type": "ai_embedding", "index": 0}]]}, "Execute Workflow Trigger": {"main": [[{"node": "Execution Data", "type": "main", "index": 0}]]}, "Google Gemini Chat Model": {"ai_languageModel": [[{"node": "Has API Documentation?", "type": "ai_languageModel", "index": 0}]]}, "Search in Relevant Docs1": {"main": [[{"node": "Combine Docs1", "type": "main", "index": 0}]]}, "Embeddings Google Gemini1": {"ai_embedding": [[{"node": "Search in Relevant Docs", "type": "ai_embedding", "index": 0}]]}, "Embeddings Google Gemini2": {"ai_embedding": [[{"node": "Search in Relevant Docs1", "type": "ai_embedding", "index": 0}]]}, "Google Gemini Chat Model1": {"ai_languageModel": [[{"node": "Extract API Operations", "type": "ai_languageModel", "index": 0}]]}, "Google Gemini Chat Model2": {"ai_languageModel": [[{"node": "Identify Service Products", "type": "ai_languageModel", "index": 0}]]}, "Identify Service Products": {"main": [[{"node": "Extract API Templates", "type": "main", "index": 0}]]}, "Store Document Embeddings": {"main": [[{"node": "For Each Document...", "type": "main", "index": 0}]]}, "Web Search For API Schema": {"main": [[{"node": "Has Results?", "type": "main", "index": 0}]]}, "Content Chunking @ 50k Chars": {"main": [[{"node": "Split Out Chunks", "type": "main", "index": 0}]]}, "When clicking \u2018Test workflow\u2019": {"main": [[{"node": "Get All Research", "type": "main", "index": 0}]]}, "Recursive Character Text Splitter1": {"ai_textSplitter": [[{"node": "Default Data Loader", "type": "ai_textSplitter", "index": 0}]]}}}