# n8n Documentation ## Core Concepts n8n is a fair-code licensed workflow automation tool that enables the connection of any app with an API to manipulate data with minimal coding effort. It supports highly flexible workflows, customizable nodes, and can be used via npm, Docker, or self-hosting. ## Node & Parameter Details Standard nodes include integrations with services such as: - Google Sheets - Telegram - MySQL - Slack - Discord - Postgres - Notion - Gmail - Airtable - Google Drive ## Best Practices - Use n8n's quickstart guides to rapidly understand and implement workflows. - Select the appropriate hosting method (Cloud, npm, self-host) based on your needs. - Explore n8n's integration library to find suitable applications to automate. ## Workflow Patterns Key workflow patterns include: - Creating an API endpoint - AI agent chat - Web scraping and summarization with AI - Joining different datasets - Backing up workflows to GitHub - JSON to Excel conversion ## API Documentation For specific API endpoints, methods, authentication, request, and response details, refer to the [API Documentation](https://docs.n8n.io/api/). ---------------------------------------- # Workflow Definition ## Workflow Name - AI tutorial ## Nodes ### When chat message received - **Type:** @n8n/n8n-nodes-langchain.chatTrigger - **Type Version:** 1.1 - **ID:** a2d42e1f-36df-4a6a-a3b4-99a162074d11 - **Webhook ID:** 97c1a41f-8ef0-4d63-a924-92eb634384d3 - **Parameters:** - **Options:** {} ## Settings - **Execution Order:** v1 ## Metadata - **Instance ID:** cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7 - **ID:** l05TkWXXYbOiuL4o - **Version ID:** b1641385-c6b0-48a8-8e26-20d1f6bd7fda ## Status - **Active:** false ## Additional Data - **Pin Data:** {} - **Connections:** {} - **Tags:** [] ---------------------------------------- ## Workflow: AI Tutorial ### Nodes 1. **When chat message received** - **Type**: `@n8n/n8n-nodes-langchain.chatTrigger` - **Type Version**: 1.1 - **ID**: `a2d42e1f-36df-4a6a-a3b4-99a162074d11` - **Webhook ID**: `97c1a41f-8ef0-4d63-a924-92eb634384d3` - **Position**: [-300, -40] - **Parameters**: - Options: {} 2. **AI Agent** - **Type**: `@n8n/n8n-nodes-langchain.agent` - **Type Version**: 1.7 - **ID**: `0f61a10f-668f-42f7-b835-cf3efb60082a` - **Position**: [-80, -40] - **Parameters**: - Options: {} 3. **OpenAI Chat Model** - **Type**: `@n8n/n8n-nodes-langchain.lmChatOpenAi` - **Type Version**: 1.2 - **ID**: `b8129c6d-f201-4378-8f66-ce9a6cfd5f3b` - **Position**: [-100, 160] - **Parameters**: - Model: - **Mode**: list - **Value**: gpt-4o-mini - Options: {} - **Credentials**: - **OpenAI API**: - ID: `jiPPcYV9I70iKapN` - Name: `OpenAi account 37` 4. **Simple Memory** - **Type**: `@n8n/n8n-nodes-langchain.memoryBufferWindow` - **Type Version**: 1.3 - **ID**: `afbab05c-1e87-4f7a-9d66-c86f9db1ec64` - **Position**: [20, 180] - **Parameters**: {} ### Connections - **When chat message received** → - AI Agent (index 0) - **OpenAI Chat Model** → - AI Agent (index 0) - Type: ai_languageModel - **Simple Memory** → - AI Agent (index 0) - Type: ai_memory ### Workflow Settings - **Execution Order**: v1 - **Version ID**: `b1641385-c6b0-48a8-8e26-20d1f6bd7fda` - **Active**: false ### Additional Metadata - **Template Credentials Setup Completed**: true - **Instance ID**: `cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7` - **Workflow ID**: `l05TkWXXYbOiuL4o` - **Tags**: [] ---------------------------------------- ## Workflow Structure ### Name AI tutorial ### Nodes 1. **When chat message received** - **Type**: `@n8n/n8n-nodes-langchain.chatTrigger` - **Type Version**: `1.1` - **Position**: `[-300, -40]` - **ID**: `a2d42e1f-36df-4a6a-a3b4-99a162074d11` - **Webhook ID**: `97c1a41f-8ef0-4d63-a924-92eb634384d3` - **Parameters**: - options: {} 2. **AI Agent** - **Type**: `@n8n/n8n-nodes-langchain.agent` - **Type Version**: `1.7` - **Position**: `[-80, -40]` - **ID**: `0f61a10f-668f-42f7-b835-cf3efb60082a` - **Parameters**: - options: {} ### Connections - **When chat message received** connects to: - **AI Agent** - Type: `main` - Index: `0` ### Workflow Settings - **Execution Order**: `v1` - **Active**: `false` ### Metadata - **Version ID**: `b1641385-c6b0-48a8-8e26-20d1f6bd7fda` - **Instance ID**: `cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7` - **ID**: `l05TkWXXYbOiuL4o` ---------------------------------------- ## Workflow Definition ### Nodes 1. **Manual Trigger** - **Type**: `n8n-nodes-base.manualTrigger` - **ID**: `5738d1d8-ae7d-4e04-bca4-885c59e1d9e8` - **Name**: "When clicking ‘Execute workflow’" - **Parameters**: None 2. **Hacker News** - **Type**: `n8n-nodes-base.hackerNews` - **ID**: `65e9d0a6-5261-4c7d-8d85-6ff49de04dee` - **Name**: "Hacker News" - **Parameters**: - **Resource**: `all` - **Limit**: `10` - **Additional Fields**: - **Keyword**: `"automation"` - **Notes**: Get the 10 latest articles. ### Connections - **When clicking ‘Execute workflow’** connects to: - **Hacker News** (Main Index: `0`) ---------------------------------------- # n8n Workflow Configuration ## Nodes ### HTTP Request - **Type:** n8n-nodes-base.httpRequest - **Type Version:** 4.2 - **Parameters:** - **URL:** `https://internal.users.n8n.cloud/webhook/custom-erp` - **Authentication:** `genericCredentialType` - **Generic Auth Type:** `httpHeaderAuth` - **Send Headers:** `true` - **Header Parameters:** - **Name:** `unique_id` - **Value:** `4d259ec5241587a0d2820670fc048f0d` - **Position:** [220, -40] - **Credentials:** - **httpHeaderAuth:** - **ID:** `sMuanZ4xGobAurzY` - **Name:** `Nathan's ABCorp data warehouse account` ### Airtable - **Type:** n8n-nodes-base.airtable - **Type Version:** 2.1 - **Parameters:** - **Operation:** `create` - **Base:** - **Value:** `app9nOVsRxdypoknP` - **Table:** - **Value:** `tblTIOsm4BLJD9Tql` - **Columns:** - **Schema:** - `orderID`: - **Type:** `number` - `employeeName`: - **Type:** `string` - **Position:** [880, -140] - **Credentials:** - **airtableTokenApi:** - **ID:** `UT32NHUYnp4pn1H3` - **Name:** `Airtable Personal Access Token account` ### If - **Type:** n8n-nodes-base.if - **Type Version:** 2.2 - **Parameters:** - **Conditions:** - **Combinator:** `and` - **Conditions:** - **Left Value:** `={{ $json.orderStatus }}` - **Right Value:** `processing` - **Operator:** - **Type:** `string` - **Operation:** `equals` - **Position:** [440, -40] ### Edit Fields - **Type:** n8n-nodes-base.set - **Type Version:** 3.4 - **Parameters:** - **Assignments:** - **Name:** `orderID` - **Value:** `={{ $json.orderID }}` - **Type:** `number` - **Name:** `employeeName` - **Value:** `={{ $json.employeeName }}` - **Type:** `string` - **Position:** [660, -140] ### Code - **Type:** n8n-nodes-base.code - **Type Version:** 2 - **Parameters:** - **JS Code:** ```javascript let items = $input.all(); let totalBooked = items.length; let bookedSum = 0; for (let i=0; i < items.length; i++) { bookedSum = bookedSum + items[i].json.orderPrice; } return [{ json: {totalBooked, bookedSum} }]; ``` - **Position:** [660, 60] ### Discord - **Type:** n8n-nodes-base.discord - **Type Version:** 2 - **Parameters:** - **Authentication:** `webhook` - **Content:** `=This week we've {{$json["totalBooked"]}} booked orders with a total value of {{$json["bookedSum"]}}. My Unique ID: {{ $('HTTP Request').params["headerParameters"]["parameters"][0]["value"] }}` - **Position:** [880, 60] - **Credentials:** - **discordWebhookApi:** - **ID:** `lOieo0mIb6h1Wi9R` - **Name:** `Discord Webhook account` ### Schedule Trigger - **Type:** n8n-nodes-base.scheduleTrigger - **Type Version:** 1.2 - **Parameters:** - **Rule:** - **Interval:** - **Field:** `weeks` - **Trigger At Day:** [1] - **Trigger At Hour:** `9` - **Position:** [0, -40] ## Connections - **HTTP Request** → **If** - **If** → **Edit Fields** - **If** → **Code** - **Edit Fields** → **Airtable** - **Code** → **Discord** - **Schedule Trigger** → **HTTP Request** ## Metadata - **Instance ID:** `24789c4d5aa56ca018d140332e7a43fd37dd7af0409453314fff12dc1aeebfa8` ---------------------------------------- # Workflow: Agents vs Chains ## Nodes 1. **Chat Trigger** - **Type:** `@n8n/n8n-nodes-langchain.chatTrigger` - **ID:** `9e1d8f35-e1ba-4600-977d-e54a919c2c62` 2. **OpenAI Chat Model** - **Type:** `@n8n/n8n-nodes-langchain.lmChatOpenAi` - **ID:** `4b89df4b-4f78-4f52-a51d-eeb66a7948e5` - **Credentials:** - OpenAi account: `OpenAi account Debs` 3. **OpenAI Chat Model1** - **Type:** `@n8n/n8n-nodes-langchain.lmChatOpenAi` - **ID:** `a0045df2-d212-4e6a-a2d4-722136dcb8b5` - **Credentials:** - OpenAi account: `OpenAi account Debs` 4. **Simple Memory** - **Type:** `@n8n/n8n-nodes-langchain.memoryBufferWindow` - **ID:** `d702f647-1fa7-4b4f-91b1-e0152326ea11` 5. **Wikipedia** - **Type:** `@n8n/n8n-nodes-langchain.toolWikipedia` - **ID:** `76cc359a-5ec8-446a-a8e0-9035d18247cb` 6. **AI Agent** - **Type:** `@n8n/n8n-nodes-langchain.agent` - **ID:** `01d1785f-f7c4-47d2-97b7-76eeff68002d` 7. **Basic LLM Chain** - **Type:** `@n8n/n8n-nodes-langchain.chainLlm` - **ID:** `bcdcd704-13f5-4906-b337-7ec4629b9781` - **Parameters:** - **messages:** `{"messageValues":[{"message":"Every time you respond, start your response with the sentence: \"This message came from the chain\"."}]}` 8. **Check User Input for "Chain" or "Agent"** - **Type:** `n8n-nodes-base.switch` - **ID:** `ab2bff8d-e914-421d-9aa3-9d0ad815cea6` - **Parameters:** - **rules:** - Check if input contains "agent" - Check if input contains "chain" ## Connections - **Chat Trigger** to **Check User Input for "Chain" or "Agent"** - **OpenAI Chat Model** to **AI Agent** - **OpenAI Chat Model1** to **Basic LLM Chain** - **Simple Memory** to **AI Agent** - **Wikipedia** to **AI Agent** - **Check User Input for "Chain" or "Agent"** to: - **AI Agent** - **Basic LLM Chain** ## Configuration Instructions - Set your credentials for OpenAI in the **OpenAI Chat Model** and **OpenAI Chat Model1** nodes. ## Best Practices - The agent can use the Wikipedia tool to access articles from Wikipedia. - Memory allows the agent to access previous parts of the chat. ## Version Information - **Version ID:** `59784a0f-0601-4456-b48d-9a191e203461` - **Execution Order:** `v1` ## Summary This workflow demonstrates the use of agents and chains in an n8n workflow leveraging AI capabilities with OpenAI, memory management, and access to external knowledge sources like Wikipedia. ---------------------------------------- ## Workflow Definition ### Ask a human Workflow ```json { "name": "Ask a human", "nodes": [ { "id": "a60c8572-56c1-4bf3-8352-a6419a475887", "name": "Simple Memory", "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", "typeVersion": 1.1 }, { "id": "b4f2e26c-903b-46b8-bd8b-110fd64de9e4", "name": "Not sure?", "type": "@n8n/n8n-nodes-langchain.toolWorkflow", "parameters": { "name": "dont_know_tool", "description": "Use this tool if you don't know the answer to the user's question, or if you're not very confident about your answer.", "workflowId": "={{ $workflow.id}}", "fields": { "values": [ { "name": "chatInput", "stringValue": "={{ $('Chat Trigger').item.json.chatInput }}" } ] } } }, { "id": "951cc691-b422-4ce6-901f-b7feb3afd1ad", "name": "Execute Workflow Trigger", "type": "n8n-nodes-base.executeWorkflowTrigger", "typeVersion": 1 }, { "id": "927b775a-47f6-4067-a1a5-5f13dea28e45", "name": "Chat Trigger", "type": "@n8n/n8n-nodes-langchain.chatTrigger", "typeVersion": 1, "webhookId": "785e0c0c-12e5-4249-9abe-47bb131975cb" }, { "id": "971e7b90-c2d8-4292-9da8-732d7d399f04", "name": "Prompt the user to provide an email", "type": "n8n-nodes-base.code", "parameters": { "jsCode": "response = {\"response\":\"I'm sorry I don't know the answer. Please repeat your question and include your email address so I can request help.\"};\nreturn response;" } }, { "id": "6f5a21b3-c145-46c8-8e69-660100c4a6fc", "name": "Confirm that we've messaged a human", "type": "n8n-nodes-base.code", "parameters": { "jsCode": "response = {\"response\": \"Thank you for getting in touch. I've messaged a human to help.\"}\nreturn response;" } }, { "id": "8b17da5e-e392-4028-91b0-bc02d34e46ed", "name": "AI Agent", "type": "@n8n/n8n-nodes-langchain.agent", "parameters": { "options": { "systemMessage": "Try to answer the user's question. When you can't answer, or you're not confident of the answer, use the appropriate tool. When you use the dont_know_tool, respond with the message from the tool." } } }, { "id": "990ecd3b-6aa0-4b17-8d01-d606b9164fa8", "name": "Check if user has provided email", "type": "n8n-nodes-base.if", "parameters": { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict" }, "conditions": [ { "id": "5e21e7c5-db60-4111-bb17-c289ae0fc159", "leftValue": "={{ $('Execute Workflow Trigger').item.json.chatInput }}", "rightValue": "/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9_-]+)/gi", "operator": { "type": "string", "operation": "regex" } } ], "combinator": "and" }, "options": {} } }, { "id": "d14da0ae-06ca-422b-b5b6-e7759e74c787", "name": "Message Slack for help", "type": "n8n-nodes-base.slack", "parameters": { "select": "channel", "channelId": { "__rl": true, "value": "", "mode": "name" }, "text": "={{ \"A user had a question the bot couldn't answer. Here's their message: \" + $('Execute Workflow Trigger').item.json.chatInput }}", "otherOptions": {} } }, { "id": "278391c7-6945-495e-a4f1-74fb8fcc3549", "name": "GPT4", "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", "parameters": { "model": "gpt-4", "options": { "temperature": 0.2 } } } ], "connections": { "Simple Memory": { "ai_memory": [ [ { "node": "AI Agent", "type": "ai_memory", "index": 0 } ] ] }, "Not sure?": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] }, "Execute Workflow Trigger": { "main": [ [ { "node": "Check if user has provided email", "type": "main", "index": 0 } ] ] }, "Chat Trigger": { "main": [ [ { "node": "AI Agent", "type": "main", "index": 0 } ] ] }, "Check if user has provided email": { "main": [ [ { "node": "Message Slack for help", "type": "main", "index": 0 } ], [ { "node": "Prompt the user to provide an email", "type": "main", "index": 0 } ] ] }, "Message Slack for help": { "main": [ [ { "node": "Confirm that we've messaged a human", "type": "main", "index": 0 } ] ] }, "GPT4": { "ai_languageModel": [ [ { "node": "AI Agent", "type": "ai_languageModel", "index": 0 } ] ] } } } ``` ---------------------------------------- # Chat with Google Sheets Workflow ## Nodes ### Execute Workflow Trigger - **Type**: `n8n-nodes-base.executeWorkflowTrigger` - **ID**: `e96a5e41-f0d6-49c1-977e-ff724a857212` ### Chat Trigger - **Type**: `@n8n/n8n-nodes-langchain.chatTrigger` - **ID**: `5d56d128-9a83-45ee-a34c-bc1190d59322` - **Webhook ID**: `e3f23177-c7c1-417b-a513-1c1090dda0a2` ### Get Google Sheet Contents - **Type**: `n8n-nodes-base.googleSheets` - **ID**: `3c0e4b48-a27b-472f-948e-9aa001c49149` - **Parameters**: - **Authentication**: `serviceAccount` - **Document ID**: `={{ $json.sheetUrl }}` - **Sheet Name**: `={{ $json.sheetUrl }}` ### Set Google Sheet URL - **Type**: `n8n-nodes-base.set` - **ID**: `67f9c172-e70f-4a0f-afd3-513cfeae09db` - **Fields**: - **Values**: - `sheetUrl` ### Get Column Names - **Type**: `n8n-nodes-base.set` - **ID**: `d49223eb-2927-4ddd-bd2c-cd439f927341` - **Fields**: - **Values**: - `response`: `={{ Object.keys($json) }}` ### Prepare Output - **Type**: `n8n-nodes-base.code` - **ID**: `37ceba7a-1f0b-4de7-ae4a-d29a18dabaf6` - **jsCode**: ```javascript return { 'response': JSON.stringify($input.all().map(x => x.json)) } ``` ### List Columns Tool - **Type**: `@n8n/n8n-nodes-langchain.toolWorkflow` - **ID**: `94516eb1-89fc-4d3f-8000-d0fa43cd71cd` - **Parameters**: - **Name**: `list_columns_tool` - **Description**: `=### List all column names in customer data` - **Operation**: `column_names` ### Get Customer Tool - **Type**: `@n8n/n8n-nodes-langchain.toolWorkflow` - **ID**: `006745a1-3df7-4de9-9483-c6e133272c55` - **Parameters**: - **Name**: `get_customer_tool` - **Description**: `=### Get all columns for a given customer` - **Operation**: `row` ### Simple Memory - **Type**: `@n8n/n8n-nodes-langchain.memoryBufferWindow` - **ID**: `c3d20569-1374-4f8d-8779-23b98952d124` ### Get Column Values Tool - **Type**: `@n8n/n8n-nodes-langchain.toolWorkflow` - **ID**: `3a370ae9-eaf8-4e84-948b-848c461ac9eb` - **Parameters**: - **Name**: `column_values_tool` - **Description**: `=### Get the specified column value for all customers` - **Operation**: `column_values` ### AI Agent - **Type**: `@n8n/n8n-nodes-langchain.agent` - **ID**: `8f2a4854-2177-4ac8-9501-fa36cf2a3d73` - **Parameters**: - **Text**: `={{ $json.chatInput }}` - **Options**: - **Max Iterations**: `10` ### Check Operations - **Type**: `n8n-nodes-base.switch` - **ID**: `907deea9-26cc-427e-93fc-52ce6b67e5e1` - **Parameters**: - **Rules**: - Conditions for `column_names`, `column_values`, `row` ### Prepare Column Data - **Type**: `n8n-nodes-base.set` - **ID**: `f2ebcae6-3cfb-4862-a927-dc66bd24f197` - **Fields**: - **Include**: `none` - **Values**: - `={{ $('Execute Workflow Trigger').item.json.query }}` - `row_number:={{ $json.row_number }}` ### Filter Out Other Rows - **Type**: `n8n-nodes-base.filter` - **ID**: `f40acb04-ef06-4670-b8b1-86b04f066af8` - **Conditions**: - Condition for filtering based on `row_number` ## Connections - **GPT4 Model**: - **ai_languageModel**: to **AI Agent** - **Chat Trigger**: - **Main**: to **AI Agent** - **Get Column Names**: - **Main**: to **Prepare Output** - **Get Customer Tool**: - **ai_tool**: to **AI Agent** - **List Columns Tool**: - **ai_tool**: to **AI Agent** - **Set Google Sheet URL**: - **Main**: to **Get Google Sheet Contents** - **Simple Memory**: - **ai_memory**: to **AI Agent** - **Get Column Values Tool**: - **ai_tool**: to **AI Agent** - **Execute Workflow Trigger**: - **Main**: to **Set Google Sheet URL** - **Get Google Sheet Contents**: - **Main**: to **Check Operations** - **Check Operations**: - **Main**: to **Get Column Names**, **Prepare Column Data**, **Filter Out Other Rows** - **Prepare Column Data**: - **Main**: to **Prepare Output** - **Filter Out Other Rows**: - **Main**: to **Prepare Output** ---------------------------------------- # Workflow: Let your AI call an API ## Node Details ### Execute Workflow Trigger - **Type:** n8n-nodes-base.executeWorkflowTrigger - **ID:** 35ce49a9-eda1-4da5-a6cb-39a39680111b ### Chat Trigger - **Type:** @n8n/n8n-nodes-langchain.chatTrigger - **ID:** f262f04b-964c-47c0-b7dc-a86b82b0184b - **Webhook ID:** e3f23177-c7c1-417b-a513-1c1090dda0a2 ### Simple Memory - **Type:** @n8n/n8n-nodes-langchain.memoryBufferWindow - **ID:** 29678c05-9a48-41ec-9c5c-af36ee0d7fc6 ### Activity Tool - **Type:** @n8n/n8n-nodes-langchain.toolWorkflow - **ID:** 82a3c606-0d7a-4b45-aae7-df35525615f7 - **Parameters:** - **Name:** activity_tool - **Description:** Suggest an activity for a person to do. - **Workflow ID:** ={{$workflow.id}} - **Fields:** - chatInput: ={{$('Chat Trigger').item.json.chatInput}} ### AI Agent - **Type:** @n8n/n8n-nodes-langchain.agent - **ID:** 716dea0d-a987-4cf7-ae4a-bf0f7c7d7da9 - **Parameters:** - **Text:** ={{$json.chatInput}} - **Options:** - maxIterations: 10 ### Auto-fixing Output Parser - **Type:** @n8n/n8n-nodes-langchain.outputParserAutofixing - **ID:** f469fba8-07ae-4c79-a79c-2c49946d94e2 ### GPT4 Model 1 - **Type:** @n8n/n8n-nodes-langchain.lmChatOpenAi - **ID:** f65054a9-771c-47f8-94cc-4ed766f89d19 - **Parameters:** - **Model:** gpt-4 ### GPT4 Model 2 - **Type:** @n8n/n8n-nodes-langchain.lmChatOpenAi - **ID:** 94c2a6d8-cab9-48c2-8801-4306f0957f50 - **Parameters:** - **Model:** gpt-4 ### GPT4 Model 3 - **Type:** @n8n/n8n-nodes-langchain.lmChatOpenAi - **ID:** 5f423800-2eaf-43f5-bd59-dc1212cb55ad - **Parameters:** - **Model:** gpt-4 ### Call the API - **Type:** n8n-nodes-base.httpRequest - **ID:** 340c2536-6e79-4af6-9cd0-5cbf6eae1983 - **Parameters:** - **URL:** http://www.boredapi.com/api/activity/ - **Send Query:** true - **Query Parameters:** - **Name:** type - **Value:** ={{$json.output.type.data}} - **Name:** participants - **Value:** ={{$json.output.participants}} ### Work out activity type and number of people - **Type:** @n8n/n8n-nodes-langchain.chainLlm - **ID:** d7d5455c-2e46-4896-853c-6b527e9403e4 - **Parameters:** - **Prompt:** ={{$('Execute Workflow Trigger').item.json.chatInput}} ### Set 'response' value - **Type:** n8n-nodes-base.set - **ID:** 83f9ac05-4583-4cc4-bcc8-29ae450c95cb - **Parameters:** - **Assignments:** - **Response:** ={{$json.activity}} ### Structure as JSON - **Type:** @n8n/n8n-nodes-langchain.outputParserStructured - **ID:** a50c7858-b0fd-44d6-898d-452ffc5cbd72 - **Parameters:** - **JSON Schema:** ```json { "type": "object", "properties": { "type": { "type": "object", "properties": { "data": { "enum": ["education", "recreational", "social", "diy", "charity", "cooking", "relaxation", "music", "busywork"] } } }, "participants": { "type": "number" } } } ``` ## Connection Details ### Connections Overview - **Chat Trigger** - Connects to AI Agent - **Simple Memory** - Connects to AI Agent - **Execute Workflow Trigger** - Connects to Work out activity type and number of people - **Activity Tool** - Connects to AI Agent - **Auto-fixing Output Parser** - Connects to Work out activity type and number of people - **GPT4 Model 1** - Connects to AI Agent - **GPT4 Model 2** - Connects to Work out activity type and number of people - **GPT4 Model 3** - Connects to Auto-fixing Output Parser - **Structure as JSON** - Connects to Auto-fixing Output Parser - **Call the API** - Connects to Set 'response' value - **Work out activity type and number of people** - Connects to Call the API ---------------------------------------- ## Workflow: Populate a Pinecone Vector Database from a Website ### Nodes 1. **Embeddings OpenAI** - Type: `@n8n/n8n-nodes-langchain.embeddingsOpenAi` - Parameters: - model: `text-embedding-3-large` - Credentials: OpenAi account Debs 2. **Default Data Loader** - Type: `@n8n/n8n-nodes-langchain.documentDefaultDataLoader` 3. **Recursive Character Text Splitter** - Type: `@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter` - Parameters: - splitCode: `markdown` 4. **Loop Over Items** - Type: `n8n-nodes-base.splitInBatches` - Parameters: - batchSize: `10` 5. **OpenAI Model** - Type: `@n8n/n8n-nodes-langchain.lmOpenAi` - Parameters: - model: `gpt-4o` - Credentials: OpenAi account Debs 6. **Get sitemap** - Type: `n8n-nodes-base.httpRequest` - Parameters: - url: `https://n8n-io.github.io/n8n-demo-website/sitemap.xml` 7. **Turn XML sitemap into JSON** - Type: `n8n-nodes-base.xml` - Parameters: - explicitRoot: `false` - ignoreAttrs: `true` 8. **Turn the URL array into multiple items** - Type: `n8n-nodes-base.splitOut` - Parameters: - fieldToSplitOut: `url` 9. **Wait 5 seconds** - Type: `n8n-nodes-base.wait` 10. **Get pages listed in the sitemap** - Type: `n8n-nodes-base.httpRequest` - Parameters: - url: `={{ $json.loc }}` 11. **Chat Trigger** - Type: `@n8n/n8n-nodes-langchain.chatTrigger` 12. **Question and Answer Chain** - Type: `@n8n/n8n-nodes-langchain.chainRetrievalQa` - Parameters: - promptType: `define` - text: `={{ $('Chat Trigger').item.json.chatInput }}` 13. **Vector Store Retriever** - Type: `@n8n/n8n-nodes-langchain.retrieverVectorStore` - Parameters: - topK: `10` 14. **Embeddings OpenAI2** - Type: `@n8n/n8n-nodes-langchain.embeddingsOpenAi` - Parameters: - model: `text-embedding-3-large` - Credentials: OpenAi account Debs 15. **Aggregate** - Type: `n8n-nodes-base.aggregate` - Parameters: - fieldsToAggregate: - fieldToAggregate: - content 16. **Pinecone Vector Store** - Type: `@n8n/n8n-nodes-langchain.vectorStorePinecone` - Parameters: - mode: `insert` - options: - clearNamespace: `true` - pineconeNamespace: `test-web-scraper` - Credentials: Pinecone API 17. **Pinecone Vector Store2** - Type: `@n8n/n8n-nodes-langchain.vectorStorePinecone` - Parameters: - options: - pineconeNamespace: `test-web-scraper` - Credentials: Pinecone API 18. **Extract main content** - Type: `n8n-nodes-base.html` - Parameters: - operation: `extractHtmlContent` - extractionValues: - key: `content` cssSelector: `.md-content` returnValue: `html` - options: - trimValues: `true` - cleanUpText: `true` 19. **Start the workflow by clicking "Execute workflow"** - Type: `n8n-nodes-base.manualTrigger` ### Connections - **Embeddings OpenAI** → **Pinecone Vector Store** (ai_embedding) - **Default Data Loader** → **Pinecone Vector Store** (ai_document) - **Recursive Character Text Splitter** → **Default Data Loader** (ai_textSplitter) - **Loop Over Items** → **Extract main content**, **Get pages listed in the sitemap** - **Get sitemap** → **Turn XML sitemap into JSON** - **Turn XML sitemap into JSON** → **Turn the URL array into multiple items** - **Turn the URL array into multiple items** → **Loop Over Items** - **Wait 5 seconds** → **Loop Over Items** - **Get pages listed in the sitemap** → **Wait 5 seconds** - **Chat Trigger** → **Question and Answer Chain** - **OpenAI Model** → **Question and Answer Chain** (ai_languageModel) - **Vector Store Retriever** → **Question and Answer Chain** (ai_retriever) - **Embeddings OpenAI2** → **Pinecone Vector Store2** (ai_embedding) - **Aggregate** → **Pinecone Vector Store** - **Pinecone Vector Store2** → **Vector Store Retriever** (ai_vectorStore) - **Start the workflow by clicking "Execute workflow"** → **Get sitemap** - **Extract main content** → **Aggregate** Built with ❤️ by Synaptiv AI ---------------------------------------- # Workflow: Data Transformation ## Nodes 1. **Manual Trigger** - **ID**: `3ada6076-1cfb-4c2d-a421-4fce5466fc2d` - **Type**: `n8n-nodes-base.manualTrigger` - **Position**: [1340, 840] 2. **Code** - **ID**: `08e4d878-01ab-4f01-ab27-84ef5afbf581` - **Type**: `n8n-nodes-base.code` - **Parameters**: ```javascript return [ { "user_id": "0001", "username": "nathan", "date": "2023-08-10", "variant": "control", "data_exec_success": "TRUE" }, { "user_id": "0002", "username": "natalie", "date": "2023-08-10", "variant": "control", "data_exec_success": "TRUE" }, { "user_id": "0003", "username": "nadia", "date": "2023-08-10", "variant": "control", "data_exec_success": "FALSE" }, { "user_id": "naomi", "username": "hkhjk", "date": "2023-08-10", "variant": "control", "data_exec_success": "FALSE" }, { "user_id": "0005", "username": "nolan", "date": "2023-08-10", "variant": "control", "data_exec_success": "FALSE" } ] ``` - **Position**: [1560, 840] 3. **Join Items** - **ID**: `57a9330b-9e46-42a6-b432-681e906de93a` - **Type**: `n8n-nodes-base.code` - **Position**: [1780, 840] ## Connections - **When clicking "Execute Workflow"** - Connects to **Code** (Type: main, Index: 0) - **Code** - Connects to **Join Items** (Type: main, Index: 0) ## Settings - **Execution Order**: `v1` ## Metadata - **Version ID**: `d7409102-d3af-4ddf-bead-2df008554458` - **ID**: `B4K5I5pN4nqu85ac` - **Instance ID**: `c5aabef739d71e3d0ceb8b6078a241aaf1b145fa71cbbe36ecfb2c8c3fd64f5f` ---------------------------------------- # Workflow: Find a Piece of Data ## Nodes 1. **When clicking "Execute Workflow"** - **Type:** n8n-nodes-base.manualTrigger - **ID:** 5319a081-f4f9-44ac-a91e-a57270e6eaa8 2. **Mock Slack** - **Type:** n8n-nodes-base.code - **ID:** 3ec439bc-7e3f-4ec2-b724-092466efaa18 - **Parameters:** ```javascript return [ { "title": "", "phone": "", "skype": "", "real_name": "Nathan Berlin", "email": "nathan@example.io", "real_name_normalized": "Nathan Berlin", "display_name": "Nathan Berlin", "display_name_normalized": "Nathan Berlin", "fields": {}, "status_text": "", "status_emoji": "", "status_emoji_display_info": [], "status_expiration": 0, "avatar_hash": "0856f5fbbd43", "image_original": "https://example.png", "is_custom_image": true, "huddle_state": "default_unset", "huddle_state_expiration_ts": 0, "first_name": "Nathan", "last_name": "Berlin", "image_24": "https://example.png", "image_32": "https://example.png", "image_48": "https://example.png", "image_72": "https://example.png", "image_192": "https://example.png", "image_512": "https://example.png", "image_1024": "https://example.png", "status_text_canonical": "" } ] ``` 3. **Mock Notion** - **Type:** n8n-nodes-base.code - **ID:** 4bb97ec6-c73a-4f01-b935-a94ffbf15d23 - **Parameters:** ```javascript return [ { "object": "user", "id": "1234", "name": "Nathan Berlin", "avatar_url": "https://example.jpeg", "type": "person", "person": { "email": "nathan@example.io" } }, { "object": "user", "id": "5678", "name": "Natalie Berlin", "avatar_url": "https://example.jpeg", "type": "person", "person": { "email": "natalie@example.io" } } ] ``` 4. **Code** - **Type:** n8n-nodes-base.code - **ID:** 330ecf72-cff0-4ada-9b04-b1c99bb0f4de ## Connections - **When clicking "Execute Workflow"** - Main connection: Mock Slack (index 0) - **Mock Slack** - Main connection: Mock Notion (index 0) - **Mock Notion** - Main connection: Code (index 0) ## Settings - **Execution Order:** v1 ## Metadata - **Version ID:** 81cabd2b-2854-4afb-b656-90a0cb77fa96 - **Workflow ID:** 3Brrdjs5aRHo57EX - **Instance ID:** c5aabef739d71e3d0ceb8b6078a241aaf1b145fa71cbbe36ecfb2c8c3fd64f5f ---------------------------------------- ## Workflow: Reference incoming data explicitly ### Nodes 1. **When clicking "Execute Workflow"** - **Type:** `n8n-nodes-base.manualTrigger` - **ID:** `0abbe7f6-f8a0-4f71-8229-f4fd1a3c2683` - **Type Version:** 1 - **Position:** [620, 520] 2. **Mock data** - **Type:** `n8n-nodes-base.code` - **ID:** `e19f11cd-c868-4aca-b88e-04b4ee6f0187` - **Type Version:** 2 - **Position:** [840, 520] - **Parameters:** ```javascript return [ { "id": 0001, "personal_info": { "first_name": "Natalie", "surname": "Berlin" }, "work_info": { "job_title": "Automation engineer" } }, { "id": 0002, "personal_info": { "first_name": "Nathan", "surname": "Berlin" }, "work_info": { "job_title": "Automation designer" } } ] ``` 3. **Code** - **Type:** `n8n-nodes-base.code` - **ID:** `ef54d477-0596-441a-98e5-1ab005e9a268` - **Type Version:** 2 - **Position:** [1060, 520] ### Connections - **When clicking "Execute Workflow"** → [Mock data] - **Mock data** → [Code] ### Workflow Settings - **Execution Order:** `v1` - **Version ID:** `4e3a0a21-c993-4851-848b-01bd5c090b6b` - **Workflow ID:** `EipyYyqKKQm7siq4` ---------------------------------------- ## Workflow Definition: Summarize Data and Prepare Slack Message ### Nodes 1. **Manual Trigger Node** - **Name**: When clicking "Execute Workflow" - **Type**: `n8n-nodes-base.manualTrigger` - **Type Version**: 1 - **ID**: `5d4bd82f-24e9-484e-a17e-c5de889087d9` - **Position**: [860, 540] 2. **Mock Ideas Node** - **Name**: Mock Ideas - **Type**: `n8n-nodes-base.code` - **Type Version**: 2 - **ID**: `fda17968-61a5-4c0b-ab83-adb4e0bbf7c5` - **Position**: [1080, 540] - **Parameters**: ```javascript return [ { "id": "0001", "name": "Example feature 1", "url": "example.com", "property_tags": [], "property_type": ["Feature"], "property_votes": 2 }, { "id": "0002", "name": "Example feature 2", "url": "example.com", "property_type": ["Feature"], "property_votes": 3 }, { "id": "0003", "name": "Example feature 3", "url": "example.com", "property_type": ["Feature"], "property_votes": 1 }, { "id": "0004", "name": "Example bug 1", "url": "example.com", "property_type": ["Bug"], "property_votes": 0 }, { "id": "0005", "name": "Example idea 1", "url": "example.com", "property_type": ["Idea"], "property_votes": 4 } ] ``` 3. **Summarize Node** - **Name**: Summarize - **Type**: `n8n-nodes-base.code` - **Type Version**: 2 - **ID**: `0d73c3df-300a-4397-8f53-fb0750dbf97f` - **Position**: [1300, 540] ### Connections - **From Manual Trigger to Mock Ideas**: - Node: Mock Ideas - Type: main - Index: 0 - **From Mock Ideas to Summarize**: - Node: Summarize - Type: main - Index: 0 ### Additional Information - **Execution Order**: v1 - **Version ID**: `077fe5dc-2214-4149-9f1b-ef6342e45dec` - **ID**: `5IoF8z4YUoSUpBUk` - **Instance ID**: `c5aabef739d71e3d0ceb8b6078a241aaf1b145fa71cbbe36ecfb2c8c3fd64f5f` ---------------------------------------- # Dynamic Credentials Using Expressions ## Nodes ### n8n Form Trigger - **Type:** n8n-nodes-base.formTrigger - **Parameters:** - **Path:** `da4071f2-7550-4dae-aa48-8bced4291643` - **Form Title:** Test dynamic credentials - **Form Description:** This form is for testing an n8n workflow that demonstrates setting credentials with expressions. - **Form Fields:** - **Entry:** - **Field Label:** Enter your NASA API key - **Required Field:** true - **Response Mode:** responseNode - **ID:** `cc6f2b1e-0ed0-4d22-8a44-d7223ba283b4` - **Position:** [560, 520] ### NASA - **Type:** n8n-nodes-base.nasa - **Parameters:** - **Additional Fields:** {} - **Credentials:** - **NASA API:** - **ID:** `QDDBOZOD6k3ijL5t` - **Name:** NASA account - **ID:** `ef336bae-3d4f-419c-ab5c-b9f0de89f170` - **Position:** [900, 520] ### Respond to Webhook - **Type:** n8n-nodes-base.respondToWebhook - **Parameters:** - **Respond With:** redirect - **Redirect URL:** `={{ $json.url }}` - **Options:** {} - **ID:** `143bcdb6-aca0-4dd8-9204-9777271cd230` - **Position:** [1220, 520] ## Connections - **n8n Form Trigger** -> NASA - **NASA** -> Respond to Webhook ## Credential Setup Instructions 1. Create a new NASA credential. 2. Hover over **API Key**. 3. Toggle **Expression** on. 4. In the **API Key** field, enter: ```javascript {{ $json["Enter your NASA API key"] }} ``` ## Workflow Execution Steps 1. Obtain an [API key from NASA](https://api.nasa.gov/). 2. Select **Execute workflow**. 3. Enter your key using the form. 4. The workflow runs and redirects you to the NASA picture of the day. ## Expression Reference - The API key can be referenced using: ```javascript $json["Enter your NASA API key"] ``` ---------------------------------------- ### Workflow Definition ```json { "name": "Tutorial-workflow", "nodes": [ { "parameters": { "rule": { "interval": [ { "field": "weeks", "triggerAtDay": [ 1 ], "triggerAtHour": 9 } ] } }, "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1.2, "position": [ -680, 100 ], "id": "ef14445c-2f5f-4c78-96c8-66732feb7a8f", "name": "Schedule Trigger" }, { "parameters": { "resource": "donkiSolarFlare", "additionalFields": { "startDate": "={{ $today.minus(7, 'days') }}" } }, "type": "n8n-nodes-base.nasa", "typeVersion": 1, "position": [ -460, 100 ], "id": "52c58b93-c780-4aff-a216-d67b28195a45", "name": "NASA", "credentials": { "nasaApi": { "id": "sSVnxV9AcBmBOYn8", "name": "NASA account" } } }, { "parameters": { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 2 }, "conditions": [ { "id": "2f469c8e-12b3-4ee5-95fc-ff81508d0b43", "leftValue": "={{ $json.classType }}", "rightValue": "C", "operator": { "type": "string", "operation": "contains" } } ], "combinator": "and" }, "options": {} }, "type": "n8n-nodes-base.if", "typeVersion": 2.2, "position": [ -240, 100 ], "id": "b54e3289-9ebb-451f-8bac-87edeeeced13", "name": "If" }, { "parameters": { "resource": "request", "operation": "send", "binId": "1741914338605-0907339996192", "binContent": "=There was a solar flare of class {{$json[\"classType\"]}}", "requestOptions": {} }, "type": "n8n-nodes-base.postBin", "typeVersion": 1, "position": [ -20, 0 ], "id": "a8b602b6-17b1-4274-8d33-73344b6bb8fb", "name": "PostBin(true)" }, { "parameters": { "resource": "request", "operation": "send", "binId": "1741914338605-0907339996192", "binContent": "=There was a solar flare of class {{$json[\"classType\"]}}", "requestOptions": {} }, "type": "n8n-nodes-base.postBin", "typeVersion": 1, "position": [ -20, 200 ], "id": "09c2c7a4-c229-430d-a5b0-8d7491515d9f", "name": "PostBin(false)" } ], "connections": { "Schedule Trigger": { "main": [ [ { "node": "NASA", "type": "main", "index": 0 } ] ] }, "NASA": { "main": [ [ { "node": "If", "type": "main", "index": 0 } ] ] }, "If": { "main": [ [ { "node": "PostBin(true)", "type": "main", "index": 0 } ], [ { "node": "PostBin(false)", "type": "main", "index": 0 } ] ] } }, "settings": { "executionOrder": "v1" }, "versionId": "37de4877-e4f6-4b9a-b6f0-9b7e7aea0163" } ``` ### Configuration Instructions 1. Create a NASA account and credentials. 2. Create a bin with Postbin and enter the ID. ---------------------------------------- ## Quickstart Workflow Nodes ### Nodes 1. **Customer Datastore** - **Type:** n8n-nodes-base.n8nTrainingCustomerDatastore - **Parameters:** - `operation`: getAllPeople - `returnAll`: true - **ID:** ed1fd9cd-cc4f-4e0e-ba73-9f842db382c3 - **Position:** [540, 280] - **Type Version:** 1 2. **Note1** - **Type:** n8n-nodes-base.stickyNote - **Parameters:** - `content`: **Get fake sample data** - `height`: 300 - `width`: 220 - **ID:** 5ddf393f-62b8-4240-adf8-f9a8f539df4b - **Position:** [480, 180] - **Type Version:** 1 3. **Note2** - **Type:** n8n-nodes-base.stickyNote - **Parameters:** - `content`: **Extract data and prepare it for use in the next node** - `height`: 300 - `width`: 220 - **ID:** 6ad194ea-9821-40eb-ae2c-f50cc030300b - **Position:** [760, 180] - **Type Version:** 1 4. **When clicking "Test Workflow"** - **Type:** n8n-nodes-base.manualTrigger - **ID:** 5af4b83b-31b6-4c29-aa55-3449f3851e2a - **Position:** [300, 280] - **Type Version:** 1 5. **Edit Fields1** - **Type:** n8n-nodes-base.set - **Parameters:** - `assignments`: - `customer_id`: - **Type:** string - **Value:** ={{ $json.id }} - `customer_name`: - **Type:** string - **Value:** ={{ $json.name }} - `customer_description`: - **Type:** string - **Value:** ={{ $json.notes }} - `options`: {} - **ID:** 5dcd5776-5137-4f97-8b76-9f38e1d9ff9e - **Position:** [820, 280] - **Type Version:** 3.3 6. **Customer Messenger (n8n training)** - **Type:** n8n-nodes-base.n8nTrainingCustomerMessenger - **Parameters:** - `customerId`: ={{ $json.customer_id }} - `message`: =Hi {{ $json.customer_name }}. Your description is: {{ $json.customer_description }} - **ID:** a726dcfd-f491-440f-ad64-6ba17472352f - **Position:** [1040, 280] - **Type Version:** 1 ### Connections - **Customer Datastore** - Connects to: - Edit Fields1 (main, index 0) - **When clicking "Test Workflow"** - Connects to: - Customer Datastore (main, index 0) - **Edit Fields1** - Connects to: - Customer Messenger (n8n training) (main, index 0) ## Workflow Structure - This workflow flows from the manual trigger to retrieving data from the Customer Datastore, transforming it with the Edit Fields1 node, and finally sending a message via the Customer Messenger. ---------------------------------------- ## Core Concepts n8n is a workflow automation tool that allows users to connect apps with APIs and manipulate data with minimal coding. It offers customizable workflows and the possibility to create custom nodes while ensuring privacy through self-hosting options. ## Node & Parameter Details ### Nodes - n8n supports various integrations that allow connection between applications, enabling automation of tasks. ### API Documentation Refer to the [API documentation](https://docs.n8n.io/api/) for endpoints, methods, and request/response formats. ## Configuration Instructions For setup, n8n can be utilized via: - npm - Docker - Cloud hosting ## Best Practices - Self-hosting is recommended for better privacy and security. - Utilize n8n's quickstart guides to get started efficiently. ## Workflow Patterns Examples of workflows include: - Creating an API endpoint - AI agent chat - Scraping and summarizing webpages with AI - Pulling data from services without prebuilt integrations - Joining different datasets - Backing up workflows to GitHub - Converting JSON to Excel ## Code Examples For a JSON example of a workflow, refer to specific workflows outlined in the documentation. - Workflow for creating an API endpoint: [Creating an API endpoint](https://n8n.io/workflows/1750-creating-an-api-endpoint/) - Workflow for AI agent chat: [AI agent chat](https://n8n.io/workflows/1954-ai-agent-chat/) Refer to the n8n documentation for detailed code snippets and examples for each integration and workflow. ---------------------------------------- # n8n v1.0 Migration Guide ## New Features ### Python Support in the Code Node - Python can be selected in the [Code node](https://docs.n8n.io/code/code-node/). - Using many Python modules from [Pyodide](https://pyodide.org/en/stable/usage/packages-in-pyodide.html#packages-in-pyodide) is supported. - Python is not available in Code nodes added to a workflow before v1.0. ### Execution Order - Multi-branch workflows now follow a depth-first execution order. - Each branch executes completely before starting the next one, based on the position on the canvas. - Nodes are executed only when they receive data. ## Deprecations ### MySQL and MariaDB - Support for MySQL and MariaDB as storage backends has been removed. - Migration to PostgreSQL is recommended for better compatibility. ### EXECUTIONS_PROCESS and "own" mode - The `EXECUTIONS_PROCESS` environment variable and "own" mode are deprecated. - The default has changed to `main`, which improves execution speed. ## Breaking Changes ### Docker #### Permissions Change - The n8n process runs as user `node` instead of `root` in Docker deployments. - To update permissions, execute: ```bash docker run --rm -it --user root -v ~/.n8n:/home/node/.n8n --entrypoint chown n8nio/base:16 -R node:node /home/node/.n8n ``` #### Image Removal - The Debian and RHEL images have been removed. Update your images accordingly. #### Entrypoint Change - No need to specify the n8n command in the entrypoint anymore. - Change from `n8n worker --concurrency=5` to `worker --concurrency=5`. ### Mandatory Owner Account - User Management is now mandatory, removing support for BasicAuth and External JWT. ### Directory for Installing Custom Nodes - Custom nodes must be installed in `~/.n8n/custom` instead of the global `node_modules`. ### WebSockets - Use the `N8N_PUSH_BACKEND` environment variable to configure methods for pushing updates; `websocket` is the default. ### Execution Data Retention - successful, failed, and manual workflow executions are now saved by default. - Configuration options: - `EXECUTIONS_DATA_PRUNE` is enabled by default. - `EXECUTIONS_DATA_PRUNE_MAX_COUNT` is set to 10,000. ### Remove Node 16 Support - n8n now requires Node 18.17.0 or above. ## Updating to n8n 1.0 1. Create a full backup of n8n. 2. Update to the latest n8n 0.x release before updating to n8n 1.x. 3. Review deprecation and breaking changes to assess their impact. 4. Update to n8n 1.0: - Before July 24, 2023: Pull `next` Docker image. - After July 24, 2023: Pull `latest` Docker image. 5. If issues occur, redeploy the previous version and restore the backup. ---------------------------------------- # n8n Advanced AI Documentation ## Feature Availability This feature is available on Cloud and self-hosted n8n, in version 1.19.4 and above. ## Node Types This feature uses **Cluster nodes**: groups of **root** and **sub** nodes that work together. - **Cluster nodes** are node groups that work together to provide functionality in an n8n workflow. - Use a **root node** and one or more **sub-nodes** to extend the functionality of the node. ## Chat Trigger Use the **n8n Chat Trigger** to trigger a workflow based on chat interactions. ## Chatbot Widget n8n provides a chatbot widget that can be used as a frontend for AI-powered chat workflows. Refer to the [@n8n/chat npm page](https://www.npmjs.com/package/@n8n/chat) for usage information. ---------------------------------------- # Light Evaluations ## Overview Light evaluations allow you to test your workflow with a few examples, reviewing workflow outputs without the need for formal metrics. Outputs are written back to a Google Sheets dataset for comparison. ## Prerequisites - Google Sheets must be configured as a credential in n8n. ## Steps to Perform Light Evaluations ### 1. Create a Dataset - Create a Google Sheet with columns for: - Workflow input - (Optional) Expected output - Actual output (leave blank for evaluation) ### 2. Wire the Dataset to Your Workflow #### Insert an Evaluation Trigger - Use the [evaluation trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.evaluationtrigger/) to pull in your dataset. - Clicking 'Evaluate all' runs the workflow for each dataset row. To run it once: - Set 'Max rows to process' to 1 - Click 'Execute node' on the trigger #### Connect the Trigger to the Workflow - Ensure the evaluation trigger outputs are used in the workflow, particularly the input columns. ### 3. Write Outputs Back to Dataset - Insert the 'Set outputs' action of the [evaluation node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.evaluation/) in your workflow. - Wire it up after tracking workflow outputs and map outputs to the correct dataset columns. ### 4. Run Evaluation - Click on the **Execute workflow** button next to the evaluation trigger. The workflow will run for each row. - Review outputs in the Google Sheet and check execution details in the workflow's 'executions' tab. ## Considerations Once you have a larger dataset, consider transitioning to [metric-based evaluations](https://docs.n8n.io/advanced-ai/evaluations/metric-based-evaluations/) for a numerical performance analysis. ---------------------------------------- # Metric-based evaluations Metric-based evaluation allows you to test workflows against a larger set of examples after deployment, especially covering edge cases. This feature calculates one or more scores for each test run and allows for performance comparisons across runs using metrics that are integrated into a dataset stored in Google Sheets. ## How it works ### Requirements - Google Sheets must be configured as a credential in n8n. ### Steps 1. **Set up light evaluation** - Create a dataset and connect it to your workflow, writing outputs back to the dataset. 2. **Calculate metrics** - Metrics score your workflow outputs compared to reference outputs. Metrics could be AI-driven or simple code calculations, always returning numerical values. - Add logic in your workflow to calculate metrics after producing outputs. **Example metrics:** - Correctness: Checks if the output's meaning matches a reference. - Categorization: Verifies if the output exactly matches the expected result. - Helpfulness: Assesses whether the output answers the query. - String similarity: Measures resemblance to a reference output, character-by-character. - Tool calling: Confirms if the appropriate tool was utilized. - RAG document relevance: Evaluates the relevance of retrieved documents from a vector database. - RAG answer groundedness: Checks if the answer is grounded in retrieved documents. **Performance note:** Reducing latency and costs can be achieved by executing metrics only during evaluations. 3. **Write metrics back to evaluation** - Add an evaluation node with the 'Set metrics' operation to extract the calculated metrics. 4. **Run evaluation and view results** - Navigate to the **Evaluations** tab in your workflow and initiate the evaluation. The summary and score for each metric will be displayed upon completion, allowing you to investigate individual test results. ---------------------------------------- # Overview Evaluations are not supported for n8n instances running in queue mode. ## What are Evaluations? Evaluations are a technique for ensuring that your AI workflow is reliable. The process involves running a test dataset through your workflow, which contains multiple test cases with sample inputs and expected outputs. ### Benefits of Evaluations - Test workflow performance on edge cases. - Enable confident changes without worsening existing functionality. - Allow performance comparison across different models or prompts. ## Why is Evaluation Needed? AI models differ from traditional code; they are non-deterministic "black boxes" and require measurement of outputs through data input and output observation to build reliability and confidence. ## Two Types of Evaluation ### Light Evaluation (Pre-Deployment) - Involves generating a handful of examples. - Allows for visual comparison of workflow quality. - Focuses on iterating to a proof of concept without formal metrics. ### Metric-Based Evaluation (Post-Deployment) - Utilizes a larger, representative dataset from production executions. - Includes adding inputs that caused bugs to the dataset for regression testing. - Rely on evaluation metrics to measure output quality. ### Comparison of Evaluation Types | | Light Evaluation (Pre-Deployment) | Metric-Based Evaluation (Post-Deployment) | | --- | --- | --- | | **Performance Improvements with Each Iteration** | Large | Small | | **Dataset Size** | Small | Large | | **Dataset Sources** | Hand-generated, AI-generated, Other | Production executions, AI-generated, Other | | **Actual Outputs** | Required | Required | | **Expected Outputs** | Optional | Required (usually) | | **Evaluation Metric** | Optional | Required | ## Learn More - [Light Evaluations](https://docs.n8n.io/advanced-ai/evaluations/light-evaluations/) - [Metric-Based Evaluations](https://docs.n8n.io/advanced-ai/evaluations/metric-based-evaluations/) - [Tips and Common Issues](https://docs.n8n.io/advanced-ai/evaluations/tips-and-common-issues/) ---------------------------------------- # Tips and Common Issues ## Combining Multiple Triggers To merge multiple triggers in a workflow: 1. **Get the data format of the other trigger**: - Execute the other trigger. - Open it and navigate to the JSON view of its output pane. - Click the **copy** button on the right. 2. **Re-shape the evaluation trigger data to match**: - Insert an [Edit Fields (Set) node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/) after the evaluation trigger. - Change its mode to **JSON**. - Paste your data into the 'JSON' field, removing the `[` and `]`. - Switch the field type to **Expression** and map in the data from the trigger. - For strings, replace the entire value (including quotes) and add `.toJsonString()`. 3. **Merge the branches using a 'No-op' node**: - Insert a [No-op node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.noop/) and wire both the other trigger and the Set node to it. 4. **Reference the 'No-op' node outputs in the rest of the workflow**. ## Avoiding Evaluation Breaking the Chat After adding an evaluation node with the ['set outputs' operation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.evaluation/#set-outputs), you may need to add an extra branch from your agent to ensure compatibility with n8n's internal chat. Lower branches execute last; therefore, attach a no-op node to this branch. ## Accessing Tool Data When Calculating Metrics Enable the **Return intermediate steps** option in the agent to add an extra output field called `intermediateSteps` for later reference in nodes. ## Multiple Evaluations in the Same Workflow Only one evaluation is allowed per workflow, but you can use [sub-workflows](https://docs.n8n.io/flow-logic/subworkflows/) to test different parts. ## Dealing with Inconsistent Results To smooth variations in metrics across evaluation runs, duplicate rows in your dataset so that each row appears multiple times, effectively allowing each input to run multiple times. ---------------------------------------- Built with ❤️ by Synaptiv AI ---------------------------------------- ## Key Features This workflow uses: - **Chat Trigger**: Starts your workflow and responds to user chat interactions. Provides a customizable chat interface. - **Switch Node**: Directs queries to either an agent or chain based on user input. If "agent" is specified, it sends to the agent; if "chain" is specified, it sends to the chain. - **Agent**: Interacts with other workflow components and makes decisions about which tools to use. - **Basic LLM Chain**: Supports chatting with a connected LLM but lacks support for memory or tools. ## Using the Example To load the template into your n8n instance: 1. Download the workflow JSON file. 2. Open a new workflow in your n8n instance. 3. Copy in the JSON, or select **Workflow menu** > **Import from file...**. ## Workflow File [View workflow file](https://docs.n8n.io/_workflows/advanced-ai/examples/agents_vs_chains.json) ---------------------------------------- # Call an API to Fetch Data Use n8n to bring data from any API to your AI. This workflow utilizes: - **Chat Trigger**: Start the workflow and respond to user chat interactions, providing a customizable chat interface. - **Agent**: Interacts with workflow components and makes decisions about which tools to use. - **Call n8n Workflow Tool**: Integrates n8n workflows as custom tools, allowing AI to access information beyond its built-in dataset. - **Basic LLM Chain** with: - **Auto-fixing Output Parser**: Reads and refines the user's query. - **Structured Output Parser**: Sets parameters for the API call based on user input. ## Using the Example To load the template into your n8n instance: 1. Download the workflow JSON file. 2. Open a new workflow in your n8n instance. 3. Copy in the JSON, or select **Workflow menu** > **Import from file...**. ## Workflow File [View Workflow File](https://docs.n8n.io/_workflows/advanced-ai/examples/let_your_ai_call_an_api.json) ---------------------------------------- # Chat with a Google Sheet using AI ## Workflow Components - **Chat Trigger**: Initiates the workflow and responds to user chat interactions. Provides a customizable chat interface. - **Agent**: Central component of the AI workflow. Interacts with other workflow components and decides which tools to use. - **Call n8n Workflow Tool**: Integrates n8n workflows as custom tools for the AI, allowing access to external data beyond the built-in dataset. ## Configuration Instructions To load the template into your n8n instance: 1. Download the workflow JSON file. 2. Open a new workflow in your n8n instance. 3. Copy the JSON into the workflow or select **Workflow menu** > **Import from file...**. ## Example Workflow File [View workflow file](https://docs.n8n.io/_workflows/advanced-ai/examples/chat_with_google_sheets_docs_version.json) ---------------------------------------- # Set a Human Fallback for AI Workflows This workflow answers user queries using the GPT-4 model and sends a Slack message for human help if it cannot answer. The user is prompted for an email address. ## Workflow Components - **Chat Trigger**: Provides a customizable chat interface to start the workflow and respond to user interactions. - **Agent**: Central AI workflow component that interacts with other components and makes decisions on tools to use. - **Call n8n Workflow Tool**: Allows integration of n8n workflows as custom tools, enabling the AI to access information beyond its dataset. ## Instructions for Use To load the template into your n8n instance: 1. Download the workflow JSON file. 2. Open a new workflow in your n8n instance. 3. Copy in the JSON or select **Workflow menu** > **Import from file...**. ## Example Workflow File [Download Workflow JSON](https://docs.n8n.io/_workflows/advanced-ai/examples/ask_a_human.json) ---------------------------------------- # Advanced AI Examples and Concepts ## Core Concepts - **Agents and Chains**: Understand the differences between agents and chains in AI. - **Tools**: Utilize n8n workflows as custom tools to enhance AI capabilities. - **Vector Databases**: Learn about vector databases, embeddings, and retrievers. - **Memory**: Explore the concept of memory in AI. ## Node & Parameter Details - **$fromAI()**: A function to let AI specify tool parameters. ## API Documentation ### Endpoints - Call APIs to fetch data or access tools within n8n workflows. ## Configuration Instructions - Set up integrations with various tools like Google Sheets or APIs for comprehensive AI workflows. - Implement a human fallback mechanism in AI workflows. ## Workflow Patterns - Create workflows that integrate various AI components, such as combining data from tools and leveraging vector databases. ## Code Examples - Example integrations: - **Google Sheets**: Chat with Google Sheets to fetch and manipulate data. - **API Handling**: Set up an API workflow tool to utilize external API data. ## Best Practices - Utilize community-contributed AI templates available on the n8n website for rapid deployment and efficient workflow creation. - Explore existing templates for specific use cases, such as: - Company enrichment using OpenAI GPT-3. - Scraping webpages with an AI agent. ## Additional Resources - Browse all AI templates on the n8n website for further examples and inspirations. ---------------------------------------- # Core Concepts **Agent**: A decision-making component in AI that utilizes a language model to select actions based on user queries. Unlike a chain that follows a predetermined sequence, an agent adapts its behavior based on specific prompts and interacts with other agents and tools. # Node & Parameter Details - **Agent Node**: n8n includes one Agent node which can operate as different types of agents based on user-defined settings. # Workflow Patterns When a workflow with an agent is executed, the agent operates multiple times to perform tasks such as: 1. Initial setup 2. Calling a tool 3. Evaluating the tool's response 4. Responding to the user Refer to the Agent node documentation for specific details on available agent types. ---------------------------------------- # Chains in n8n Chains bring together different components of AI to create a cohesive system by setting up a sequence of calls between components, including models and memory (though n8n chains can't use memory). ## Chain Nodes in n8n n8n provides three chain nodes: - **Basic LLM Chain**: Use to interact with an LLM without any additional components. - **Question and Answer Chain**: Can connect to a vector store using a retriever or to an n8n workflow using the Workflow Retriever node. Use this if you want to create a workflow that supports asking questions about specific documents. - **Summarization Chain**: Takes an input and returns a summary. ## Important Notes - Chains in n8n do not support memory, meaning they cannot remember previous user queries. For workflows that require memory, use an agent to support ongoing conversations. ---------------------------------------- # Memory in AI Memory in AI chat services allows for an ongoing conversation by keeping a history of previous messages. ## AI Memory in n8n To integrate memory into your AI workflow, use: - **Simple Memory**: A node that stores a customizable length of chat history for the current session. - **Memory Services Nodes**: Available nodes include: - **Motorhead** - **Redis Chat Memory** - **Postgres Chat Memory** - **Xata** - **Zep** ### Chat Memory Manager Node The **Chat Memory Manager** node is useful for: - Advanced memory management when direct memory node integration isn't possible. - Performing complex memory management tasks beyond standard memory nodes. - Injecting messages into the AI that resemble user messages for additional context. ---------------------------------------- # AI Tools in n8n ## Definition of Tools in AI In AI, "tools" refer to add-ons that enable an AI to access additional context or resources. They function as interfaces allowing an AI agent to interact with the environment. ## n8n Tool Sub-Nodes n8n provides various tool sub-nodes that can be connected to an AI agent. Notable tools include: - **Call n8n Workflow Tool**: Load any n8n workflow as a tool. - **Custom Code Tool**: Write code that your agent can execute. - **HTTP Request Tool**: Perform API calls to fetch website data. ## Examples of Using the Call n8n Workflow Tool - [Chat with Google Sheets](https://docs.n8n.io/advanced-ai/examples/data-google-sheets/) - [Call an API to fetch data](https://docs.n8n.io/advanced-ai/examples/api-workflow-tool/) - [Set up a human fallback](https://docs.n8n.io/advanced-ai/examples/human-fallback/) ## Dynamic Parameter Specification Learn how to let AI dynamically specify parameters for tools with the `$fromAI()` function [here](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/). ---------------------------------------- # Core Concepts ### Vector Database A vector database stores data as high-dimensional vectors, which are mathematical representations of features or attributes. This enables fast and accurate similarity searches based on semantic and contextual meaning. ## A Simplified Example Vectors can represent features of sentences. For instance: | Sentence | Vector (array of dimensions) | | --- | --- | | n8n is a source-available automation tool that you can self-host | \[0.1, 0.2, 0.3\] | | Zapier is an automation tool | \[0.1\] | | Make is an automation tool | \[0.1\] | | Confluence is a wiki tool that you can self-host | \[0.3\] | ## Demonstrating the Power of Similarity Search Qdrant provides [vector search demos](https://qdrant.tech/demo/), including a food discovery demo that matches pictures based on visual similarities. ## Essential Tools for Vector Databases - **Document Loaders and Text Splitters**: Document loaders pull in documents and prepare them for embedding. Text splitters break documents into chunks for processing. - **Embeddings**: Convert data (text, images, etc.) into vectors and back into raw data. Note that n8n only supports text embeddings. - **Retrievers**: Fetch documents from vector databases and require pairing with an embedding to translate vectors back into data. ---------------------------------------- # Let AI Specify the Tool Parameters When configuring tools connected to the Tools Agent, many parameters can be filled in by the AI model using the context from the task and information from other connected tools. ## Let the Model Fill in the Parameter Each appropriate parameter field in the tool's editing dialog has an extra button to activate the AI Agent to fill in the expression automatically. If desired, users can revert to user-defined values by clicking 'X'. **Warning:** Activating this feature will overwrite any manual definition. ## Use the `$fromAI()` Function The `$fromAI()` function utilizes AI to dynamically fill in parameters for tools connected to the AI Agent node. It is not applicable for the Code tool or other non-tool cluster sub-nodes. **Function Call:** ```javascript {{ $fromAI('key') }} ``` The `key` parameter and additional arguments serve as hints for the AI model to populate the relevant data. For example, using `key: email`, the AI model looks for an email address in its context. ### Parameters The `$fromAI()` function accepts the following parameters: | Parameter | Type | Required? | Description | |----------------|--------|-----------|-----------------------------------------------------------------------------------------------------| | `key` | string | ✅ | A string representing the key or name of the argument (1-64 characters, alphanumeric, underscores, hyphens). | | `description` | string | ❌ | A string describing the argument. | | `type` | string | ❌ | A string specifying the data type (string, number, boolean, json; defaults to string). | | `defaultValue` | any | ❌ | The default value to use for the argument. | ### Examples 1. To dynamically populate a field with a name: ```javascript $fromAI("name", "The commenter's name", "string", "Jane Doe") ``` 2. Simplified usage without optional parameters: ```javascript $fromAI("name") ``` 3. To populate the number of items in stock: ```javascript $fromAI("numItemsInStock", "Number of items in stock", "number", 5) ``` 4. To pre-fix a dynamically filled subject for an email: ```javascript Generated by AI: {{ $fromAI("subject") }} ``` ### Templates The `$fromAI()` function can be seen in action in several templates, including: - Angie, Personal AI Assistant with Telegram Voice and Text - Automate Customer Support Issue Resolution using AI Text Classifier - Scale Deal Flow with a Pitch Deck AI Vision, Chatbot and QDrant Vector Store ---------------------------------------- ## Populate a Pinecone Vector Database from a Website Use n8n to scrape a website, load the data into Pinecone, then query it using a chat workflow. This workflow uses the following nodes: - **HTTP node**: Fetches website data. [HTTP Node Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) - **HTML node**: Simplifies the data by extracting the main content from the page. [HTML Node Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.html/) - **Pinecone Vector Store node**: Transforms the data into vectors and stores it in Pinecone. [Pinecone Vector Store Node Documentation](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorepinecone/) - **Embeddings OpenAI**: Transforms data into vector format. [Embeddings OpenAI Documentation](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsopenai/) - **Chat Trigger**: Initiates a chat workflow. [Chat Trigger Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/) - **Question and Answer Chain**: Queries the vector database. [Question and Answer Chain Documentation](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainretrievalqa/) ### Using the Example To load the template into your n8n instance: 1. Download the workflow JSON file. 2. Open a new workflow in your n8n instance. 3. Copy in the JSON, or select **Workflow menu** > **Import from file...**. ### View Workflow File [Download Workflow JSON](https://docs.n8n.io/_workflows/advanced-ai/examples/populate_a_pinecone_vector_database_from_a_website.json) ---------------------------------------- # Build an AI chat agent with n8n ## Requirements - **n8n**: Recommended to use the n8n cloud service. For self-hosted, refer to installation pages. - **Credentials for a chat model**: This tutorial uses OpenAI, but alternatives include DeepSeek, Google Gemini, Groq, Azure, etc. ## Core AI Concepts in n8n - **AI Agent**: Utilizes Large Language Models (LLMs) to perform goal-oriented tasks. Capable of using tools, processing outputs, and making decisions. - **Differentiation**: - **LLM**: Text generation, single-step workflows. - **AI Agent**: Goal-oriented task completion, multi-step workflows. ## Workflow Steps ### 1. Create a new workflow - Open n8n and create an empty workflow or select **Add first step**. ### 2. Add a trigger node 1. Select **Add first step** or press `Tab`. 2. Search for **Chat Trigger** and add it to the canvas. ### 3. Add an AI Agent Node 1. Select the **Add node** connector on the trigger node. 2. Choose the **AI Agent** node. ### 4. Configure the node 1. Add a chat model by clicking the plus button under **Chat Model** on the **AI Agent** node. 2. Select **OpenAI Chat Model** from the available options. ### 5. Add credentials (if needed) 1. Click on 'Select credential' to add a new credential. 2. Input your OpenAI API key. ### 6. Test the node 1. Click on the 'Chat' button to open a local chat window. 2. Type a message and press `Enter` to see responses. ### 7. Change the prompt 1. Open the **AI Agent** node and add a **System message**. 2. Modify the system prompt as needed. ### 8. Adding persistence 1. Add memory to the **AI Agent** node to retain context between messages. 2. Select "Simple Memory" for basic usage. ### 9. Save the workflow 1. Click on the "Save" button to preserve your workflow changes. ## Best Practices - Keep API credentials secure and private. - Utilize the log feature in AI Agent for debugging and observing inputs/outputs. ## Conclusion You have learned to build a basic AI workflow using an **AI Agent**, configured chat models, and implemented memory for continuity in conversations. ---------------------------------------- # LangChain Learning Resources ## Core Concepts - **LangChain**: A framework for developing applications powered by language models. ## Documentation Links - [LangChain Documentation](https://docs.langchain.com/docs/) - [LangChain Python Documentation](https://python.langchain.com/docs/get_started/introduction) - [LangChain JavaScript Documentation](https://js.langchain.com/docs/get_started/introduction) ## Code Examples - Access [LangChain Code Templates](https://github.com/langchain-ai/langchain/tree/master/cookbook) (Python only) for use cases and patterns. ## API Documentation - Please refer to the official LangChain documentation for API details, methods, and usage patterns. ## Configuration Instructions - For setup and initial steps, utilize the quickstart guides provided in the LangChain Python and JavaScript documentation. ## Best Practices - Familiarize yourself with terminology and concepts provided by resources like [What Product People Need To Know About LangChain](https://www.commandbar.com/blog/langchain-guide). ## Video Tutorials - Explore a [YouTube series by Greg Kamradt](https://youtu.be/_v_fgW2SkkQ?si=8Z2tfAoXnN3lXU9s) for practical coding examples and explanations on LangChain. ## Community and Support - Join discussions on LangChain in the [Discord community](https://discord.gg/bAt54txhHg) for project sharing and idea exchange. ---------------------------------------- # LangChain Concepts in n8n This documentation covers how LangChain concepts and features map to n8n nodes. ## n8n Implementation of LangChain n8n implements LangChain JS, allowing you to use n8n nodes in workflows that interact with LangChain. ### Trigger Nodes - **Chat Trigger**: [Chat Trigger Node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/) ### Cluster Nodes Cluster nodes are groups of nodes that work together in an n8n workflow. #### Root Nodes - **Basic LLM Chain**: [Basic LLM Chain Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/) - **Retrieval Q&A Chain**: [Retrieval Q&A Chain Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainretrievalqa/) - **Summarization Chain**: [Summarization Chain Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainsummarization/) - **Sentiment Analysis**: [Sentiment Analysis Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.sentimentanalysis/) - **Text Classifier**: [Text Classifier Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.text-classifier/) #### Agents - **Agent**: [Agent Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/) #### Vector Stores - **Simple Vector Store**: [Simple Vector Store Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoreinmemory/) - **PGVector Vector Store**: [PGVector Vector Store Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorepgvector/) - **Pinecone Vector Store**: [Pinecone Vector Store Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorepinecone/) - **Qdrant Vector Store**: [Qdrant Vector Store Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoreqdrant/) - **Supabase Vector Store**: [Supabase Vector Store Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoresupabase/) - **Zep Vector Store**: [Zep Vector Store Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorezep/) #### Miscellaneous Utility Nodes - **LangChain Code**: [LangChain Code Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.code/) ### Sub-Nodes #### Document Loaders - **Default Document Loader**: [Default Document Loader Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.documentdefaultdataloader/) - **GitHub Document Loader**: [GitHub Document Loader Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.documentgithubloader/) #### Language Models (LLMs) - **Anthropic Chat Model**: [Anthropic Chat Model Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic/) - **AWS Bedrock Chat Model**: [AWS Bedrock Chat Model Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatawsbedrock/) - **Cohere Model**: [Cohere Model Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmcohere/) - **Hugging Face Inference Model**: [Hugging Face Inference Model Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmopenhuggingfaceinference/) - **Mistral Cloud Chat Model**: [Mistral Cloud Chat Model Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatmistralcloud/) - **Ollama Chat Model**: [Ollama Chat Model Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatollama/) - **Ollama Model**: [Ollama Model Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmollama/) - **OpenAI Chat Model**: [OpenAI Chat Model Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/) #### Memory - **Motorhead**: [Motorhead Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymotorhead/) - **Redis Chat Memory**: [Redis Chat Memory Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryredischat/) - **Postgres Chat Memory**: [Postgres Chat Memory Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorypostgreschat/) - **Simple Memory**: [Simple Memory Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorybufferwindow/) - **Xata**: [Xata Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryxata/) - **Zep**: [Zep Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryzep/) #### Output Parsers - **Auto-fixing Output Parser**: [Auto-fixing Output Parser Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserautofixing/) - **Item List Output Parser**: [Item List Output Parser Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparseritemlist/) - **Structured Output Parser**: [Structured Output Parser Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/) #### Retrievers - **Contextual Compression Retriever**: [Contextual Compression Retriever Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievercontextualcompression/) - **MultiQuery Retriever**: [MultiQuery Retriever Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievermultiquery/) - **Vector Store Retriever**: [Vector Store Retriever Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievervectorstore/) - **Workflow Retriever**: [Workflow Retriever Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrieverworkflow/) #### Text Splitters - **Character Text Splitter**: [Character Text Splitter Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.textsplittercharactertextsplitter/) - **Recursive Character Text Splitter**: [Recursive Character Text Splitter Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.textsplitterrecursivecharactertextsplitter/) - **Token Splitter**: [Token Splitter Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.textsplittertokensplitter/) #### Tools - **Calculator**: [Calculator Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolcalculator/) - **Code Tool**: [Code Tool Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.toolcode/) - **SerpAPI**: [SerpAPI Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.toolserpapi/) - **Think Tool**: [Think Tool Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.toolthink/) - **Vector Store Tool**: [Vector Store Tool Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.toolvectorstore/) - **Wikipedia**: [Wikipedia Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.toolwikipedia/) - **Wolfram|Alpha**: [Wolfram|Alpha Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.toolwolframalpha/) - **Workflow Tool**: [Workflow Tool Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.toolworkflow/) #### Embeddings - **Embeddings AWS Bedrock**: [Embeddings AWS Bedrock Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.embeddingsawsbedrock/) - **Embeddings Cohere**: [Embeddings Cohere Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.embeddingscohere/) - **Embeddings Google PaLM**: [Embeddings Google PaLM Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.embeddingsgooglepalm/) - **Embeddings Hugging Face Inference**: [Embeddings Hugging Face Inference Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.embeddingshuggingfaceinference/) - **Embeddings Mistral Cloud**: [Embeddings Mistral Cloud Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.embeddingsmistralcloud/) - **Embeddings Ollama**: [Embeddings Ollama Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.embeddingsollama/) - **Embeddings OpenAI**: [Embeddings OpenAI Node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes.langchain.embeddingsopenai/) ### Additional References - Learn more about [chaining in LangChain](https://js.langchain.com/docs/concepts/lcel). - Learn more about [Agents in LangChain](https://js.langchain.com/docs/concepts/agents). - Learn more about [Vector stores in LangChain](https://js.langchain.com/docs/concepts/vectorstores/). - Learn more about [Document loaders in LangChain](https://js.langchain.com/docs/concepts/document_loaders). - Learn more about [Language models in LangChain](https://js.langchain.com/docs/concepts/chat_models). - Learn more about [Memory in LangChain](https://langchain-ai.github.io/langgraphjs/concepts/memory/). - Learn more about [Output parsers in LangChain](https://js.langchain.com/docs/concepts/output_parsers/). - Learn more about [Text embeddings in LangChain](https://js.langchain.com/docs/concepts/embedding_models/). ---------------------------------------- ## Connect your n8n instance to LangSmith 1. Log in to LangSmith and get your API key. 2. Set the LangSmith environment variables: | Variable | Value | |--------------------------|--------------------------------------| | LANGCHAIN_ENDPOINT | `"https://api.smith.langchain.com"` | | LANGCHAIN_TRACING_V2 | `true` | | LANGCHAIN_API_KEY | Set this to your API key | Set the variables so that they're available globally in the environment where you host your n8n instance. These aren't n8n environment variables, so don't try to set them using the n8n configuration file. 3. Restart n8n. ---------------------------------------- # LangChain in n8n n8n provides a collection of nodes that implement LangChain's functionality. The LangChain nodes are configurable, allowing the selection of preferred agent, LLM, memory, and more. Users can connect any n8n node alongside these nodes, enabling integration with various data sources and services. ## Configuration Instructions ### Nodes and Parameters - **LangChain Nodes**: Configurable nodes that allow integration with various AI capabilities. ## Additional Resources - **[LangChain concepts and features in n8n](https://docs.n8n.io/advanced-ai/langchain/langchain-n8n/)**: Overview of how n8n integrates and represents LangChain concepts and features. ## Best Practices - Familiarity with AI and LangChain concepts is assumed. It is recommended to explore related learning resources for better integration and functionality use. ---------------------------------------- # RAG in n8n ## Core Concepts ### Retrieval-Augmented Generation (RAG) Retrieval-Augmented Generation (RAG) is a technique that enhances AI responses by combining language models with external data sources, retrieving relevant documents to ground responses in up-to-date knowledge. ### Vector Store A vector store is a database designed to store and search high-dimensional vectors (numerical representations of various data types). It processes documents by splitting them into chunks and converting each chunk into vectors using an embedding model. Queries to the vector store are performed using similarity searches based on semantic meaning. ## How to Use RAG in n8n ### Start with a RAG Template Use the [RAG Starter Template](https://n8n.io/workflows/5010-rag-starter-template-using-simple-vector-stores-form-trigger-and-openai) which includes workflows for uploading files and querying them. ### Inserting Data into Your Vector Store 1. Add the nodes needed to fetch your source data. 2. Insert a **Vector Store** node (e.g., the [Simple Vector Store](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoreinmemory/)) and choose the **Insert Documents** operation. 3. Select an **embedding model** for text-to-vector conversion. 4. Add a [Default Data Loader](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.documentdefaultdataloader/) node to split content into chunks with options for chunking strategy: - **Character Text Splitter**: splits by character length. - **Recursive Character Text Splitter**: recursively splits by Markdown, HTML, code blocks, or simple characters (recommended). - **Token Text Splitter**: splits by token count. 5. (Optional) Add **metadata** to each chunk for context enhancement. ### Querying Your Data Querying can be performed in two ways: through an agent or directly via a node. #### Using Agents 1. Add an [agent](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/) to your workflow. 2. Add the vector store as a **tool** with a description: - Set the **limit** for returned chunks. - Enable **Include Metadata** for extra context. 3. Add the same **embedding model** utilized when inserting data. #### Using the Node Directly 1. Add your vector store node to the canvas and select the **Get Many** operation. 2. Enter a query or prompt: - Set a **limit** for returned chunks. - Enable **Include Metadata** if needed. ## FAQs ### How do I choose the right embedding model? Smaller models (e.g., `text-embedding-ada-002`) are quicker and cheaper for general-purpose tasks, while larger models (e.g., `text-embedding-3-large`) are better for complex topics and accuracy. ### What is the best text splitting for my use case? - Small chunks (200 to 500 tokens) offer fine-grained retrieval. - Use chunk overlapping strategies to maintain context (Markdown or Code Block splitting recommended). ---------------------------------------- # n8n public REST API ## Overview Using n8n's public API, you can programmatically perform many tasks available in the GUI. This section covers: - **Authentication** - **Pagination** of results - **API Playground** usage (self-hosted n8n only) - **Endpoint Reference** ## n8n API Node n8n provides an [n8n API node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.n8n/) to access the API in workflows. ## Authentication Refer to the [authentication documentation](https://docs.n8n.io/api/authentication/) for details on how to authenticate with the n8n API. ## Pagination For information on paginating results, see the [pagination documentation](https://docs.n8n.io/api/pagination/). ## API Playground The built-in API playground allows you to explore the API interactively (available only in self-hosted instances). Refer to the [API playground guide](https://docs.n8n.io/api/using-api-playground/) for more information. ## Endpoint Reference Detailed API endpoint information can be found in the [endpoint reference documentation](https://docs.n8n.io/api/api-reference/). ## Best Practices Consider setting up a test workflow or a test n8n instance if you're exploring the API to prevent accidental changes to live data. ---------------------------------------- # n8n Public API (1.1.1) ## User Operations ### Retrieve all users **Endpoint:** `GET /users` **Authorization:** ApiKeyAuth **Query Parameters:** | Parameter | Description | |------------|-------------| | limit | number <= 250 (Default: 100) - Maximum items to return. | | cursor | string - For pagination. | | includeRole| boolean (Default: false) - Include user role. | | projectId | string - Filter by project ID. | **Responses:** **200** - Success **401** - Unauthorized ### Create multiple users **Endpoint:** `POST /users` **Authorization:** ApiKeyAuth **Request Body:** ```json [ { "email": "string", "role": "global:admin or global:member" } ] ``` **Responses:** **200** - Success **401** - Unauthorized **403** - Forbidden ### Get user by ID/Email **Endpoint:** `GET /users/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - User ID or email. | **Responses:** **200** - Success **401** - Unauthorized ### Delete a user **Endpoint:** `DELETE /users/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - User ID or email. | **Responses:** **204** - Success **401** - Unauthorized **403** - Forbidden **404** - Not found ### Change a user's global role **Endpoint:** `PATCH /users/{id}/role` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - User ID or email. | **Request Body:** ```json { "newRoleName": "global:admin or global:member" } ``` **Responses:** **200** - Success **401** - Unauthorized **403** - Forbidden **404** - Not found ## Audit Operations ### Generate an audit **Endpoint:** `POST /audit` **Authorization:** ApiKeyAuth **Request Body:** ```json { "additionalOptions": { "daysAbandonedWorkflow": 0, "categories": ["credentials"] } } ``` **Responses:** **200** - Success **401** - Unauthorized **500** - Internal server error ## Execution Operations ### Retrieve all executions **Endpoint:** `GET /executions` **Authorization:** ApiKeyAuth **Query Parameters:** | Parameter | Description | |---------------|-------------| | includeData | boolean - Include detailed data. | | status | string - Filter status ("error", "success", or "waiting"). | | workflowId | string - Filter by workflow ID. | | projectId | string - Filter by project ID. | | limit | number <= 250 (Default: 100) - Maximum items to return. | | cursor | string - For pagination. | **Responses:** **200** - Success **401** - Unauthorized **404** - Not found ### Retrieve an execution **Endpoint:** `GET /executions/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | number - Execution ID. | **Responses:** **200** - Success **401** - Unauthorized **404** - Not found ### Delete an execution **Endpoint:** `DELETE /executions/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | number - Execution ID. | **Responses:** **200** - Success **401** - Unauthorized **404** - Not found ## Workflow Operations ### Create a workflow **Endpoint:** `POST /workflows` **Authorization:** ApiKeyAuth **Request Body:** ```json { "name": "string", "nodes": [], "connections": {}, "settings": {}, "staticData": {} } ``` **Responses:** **200** - Workflow object **400** - Invalid request **401** - Unauthorized ### Retrieve all workflows **Endpoint:** `GET /workflows` **Authorization:** ApiKeyAuth **Query Parameters:** | Parameter | Description | |------------------|-------------| | active | boolean - Filter active workflows. | | tags | string - Filter by tags. | | name | string - Filter by workflow name. | | projectId | string - Filter by project ID. | | limit | number <= 250 (Default: 100) - Maximum items to return. | | cursor | string - For pagination. | **Responses:** **200** - Success **401** - Unauthorized ### Retrieve a workflow **Endpoint:** `GET /workflows/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Workflow ID. | **Responses:** **200** - Success **401** - Unauthorized **404** - Not found ### Update a workflow **Endpoint:** `PUT /workflows/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Workflow ID. | **Request Body:** ```json { "name": "string", "nodes": [], "connections": {}, "settings": {}, "staticData": {} } ``` **Responses:** **200** - Workflow object **400** - Invalid request **401** - Unauthorized **404** - Not found ### Delete a workflow **Endpoint:** `DELETE /workflows/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Workflow ID. | **Responses:** **200** - Success **401** - Unauthorized **404** - Not found ### Activate a workflow **Endpoint:** `POST /workflows/{id}/activate` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Workflow ID. | **Responses:** **200** - Workflow object **401** - Unauthorized **404** - Not found ### Deactivate a workflow **Endpoint:** `POST /workflows/{id}/deactivate` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Workflow ID. | **Responses:** **200** - Workflow object **401** - Unauthorized **404** - Not found ### Transfer a workflow to another project **Endpoint:** `PUT /workflows/{id}/transfer` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Workflow ID. | **Request Body:** ```json { "destinationProjectId": "string" } ``` **Responses:** **200** - Success **400** - Invalid request **401** - Unauthorized **404** - Not found ### Get workflow tags **Endpoint:** `GET /workflows/{id}/tags` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Workflow ID. | **Responses:** **200** - List of tags **401** - Unauthorized **404** - Not found ### Update tags of a workflow **Endpoint:** `PUT /workflows/{id}/tags` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Workflow ID. | **Request Body:** ```json [ { "id": "string" } ] ``` **Responses:** **200** - List of updated tags **401** - Unauthorized **404** - Not found ## Credential Operations ### Create a credential **Endpoint:** `POST /credentials` **Authorization:** ApiKeyAuth **Request Body:** ```json { "name": "string", "type": "string", "data": {} } ``` **Responses:** **200** - Success **401** - Unauthorized **415** - Unsupported media type ### Delete credential by ID **Endpoint:** `DELETE /credentials/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Credential ID. | **Responses:** **200** - Success **401** - Unauthorized **404** - Not found ### Show credential data schema **Endpoint:** `GET /credentials/schema/{credentialTypeName}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | credentialTypeName | string - Credential type name. | **Responses:** **200** - Success **401** - Unauthorized **404** - Not found ## Tag Operations ### Create a tag **Endpoint:** `POST /tags` **Authorization:** ApiKeyAuth **Request Body:** ```json { "name": "string" } ``` **Responses:** **201** - Success **400** - Invalid request **401** - Unauthorized **409** - Conflict ### Retrieve all tags **Endpoint:** `GET /tags` **Authorization:** ApiKeyAuth **Query Parameters:** | Parameter | Description | |-----------|-------------| | limit | number <= 250 (Default: 100) - Maximum items to return. | | cursor | string - For pagination. | **Responses:** **200** - Success **401** - Unauthorized ### Retrieve a tag **Endpoint:** `GET /tags/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Tag ID. | **Responses:** **200** - Success **401** - Unauthorized **404** - Not found ### Delete a tag **Endpoint:** `DELETE /tags/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Tag ID. | **Responses:** **200** - Success **401** - Unauthorized **403** - Forbidden **404** - Not found ### Update a tag **Endpoint:** `PUT /tags/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Tag ID. | **Request Body:** ```json { "name": "string" } ``` **Responses:** **200** - Success **400** - Invalid request **401** - Unauthorized **404** - Not found **409** - Conflict ## Source Control Operations ### Pull changes from the remote repository **Endpoint:** `POST /source-control/pull` **Authorization:** ApiKeyAuth **Request Body:** ```json { "force": true, "variables": {} } ``` **Responses:** **200** - Success **400** - Invalid request **409** - Conflict ## Variable Operations ### Create a variable **Endpoint:** `POST /variables` **Authorization:** ApiKeyAuth **Request Body:** ```json { "key": "string", "value": "test" } ``` **Responses:** **201** - Success **400** - Invalid request **401** - Unauthorized ### Retrieve variables **Endpoint:** `GET /variables` **Authorization:** ApiKeyAuth **Query Parameters:** | Parameter | Description | |-----------|-------------| | limit | number <= 250 (Default: 100) - Maximum items to return. | | cursor | string - For pagination. | **Responses:** **200** - Success **401** - Unauthorized ### Delete a variable **Endpoint:** `DELETE /variables/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Variable ID. | **Responses:** **204** - Success **401** - Unauthorized **404** - Not found ### Update a variable **Endpoint:** `PUT /variables/{id}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | id | string - Variable ID. | **Request Body:** ```json { "key": "string", "value": "test" } ``` **Responses:** **204** - Success **400** - Invalid request **401** - Unauthorized **403** - Forbidden **404** - Not found ## Project Operations ### Create a project **Endpoint:** `POST /projects` **Authorization:** ApiKeyAuth **Request Body:** ```json { "name": "string" } ``` **Responses:** **201** - Success **400** - Invalid request **401** - Unauthorized ### Retrieve projects **Endpoint:** `GET /projects` **Authorization:** ApiKeyAuth **Query Parameters:** | Parameter | Description | |-----------|-------------| | limit | number <= 250 (Default: 100) - Maximum items to return. | | cursor | string - For pagination. | **Responses:** **200** - Success **401** - Unauthorized ### Delete a project **Endpoint:** `DELETE /projects/{projectId}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | projectId | string - Project ID. | **Responses:** **204** - Success **401** - Unauthorized **403** - Forbidden **404** - Not found ### Update a project **Endpoint:** `PUT /projects/{projectId}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | projectId | string - Project ID. | **Request Body:** ```json { "name": "string" } ``` **Responses:** **204** - Success **400** - Invalid request **401** - Unauthorized **403** - Forbidden **404** - Not found ### Add one or more users to a project **Endpoint:** `POST /projects/{projectId}/users` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | projectId | string - Project ID. | **Request Body:** ```json { "relations": [ { "userId": "string", "role": "string" } ] } ``` **Responses:** **201** - Success **401** - Unauthorized **403** - Forbidden **404** - Not found ### Delete a user from a project **Endpoint:** `DELETE /projects/{projectId}/users/{userId}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | projectId | string - Project ID. | | userId | string - User ID. | **Responses:** **204** - Success **401** - Unauthorized **403** - Forbidden **404** - Not found ### Change a user's role in a project **Endpoint:** `PATCH /projects/{projectId}/users/{userId}` **Authorization:** ApiKeyAuth **Path Parameters:** | Parameter | Description | |-----------|-------------| | projectId | string - Project ID. | | userId | string - User ID. | **Request Body:** ```json { "role": "string" } ``` **Responses:** **204** - Success **401** - Unauthorized **403** - Forbidden **404** - Not found ---------------------------------------- Built with ❤️ by Synaptiv AI ---------------------------------------- # API Authentication n8n uses API keys to authenticate API calls. ## API Scopes Enterprise instances can limit the resources and actions an API key can access with scopes. Non-enterprise API keys have full access to all resources and capabilities. ## Create an API Key 1. Log in to n8n. 2. Go to **Settings** > **n8n API**. 3. Select **Create an API key**. 4. Choose a **Label** and set an **Expiration** time for the key. 5. If on an enterprise plan, choose the **Scopes** for the key. 6. Copy **My API Key** and use it to authenticate your calls. ## Call the API Using Your Key Send the API key in your API call as a header named `X-N8N-API-KEY`. ### Example cURL Requests To get all active workflows: For a self-hosted n8n instance: ```bash curl -X 'GET' \ '://api/v/workflows?active=true' \ -H 'accept: application/json' \ -H 'X-N8N-API-KEY: ' ``` For n8n Cloud: ```bash curl -X 'GET' \ '/api/v/workflows?active=true' \ -H 'accept: application/json' \ -H 'X-N8N-API-KEY: ' ``` ## Delete an API Key 1. Log in to n8n. 2. Go to **Settings** > **n8n API**. 3. Select **Delete** next to the key you want to delete. 4. Confirm the delete by selecting **Delete Forever**. ---------------------------------------- # API Pagination - Default page size: 100 results - Maximum page size limit: 250 results - When a response contains more than one page, it includes a cursor for requesting the next pages. ## Example: Retrieve Active Workflows ### Request the First Page #### For a self-hosted n8n instance ```bash curl -X 'GET' \ '://api/v/workflows?active=true&limit=150' \ -H 'accept: application/json' \ -H 'X-N8N-API-KEY: ' ``` #### For n8n Cloud ```bash curl -X 'GET' \ '/api/v/workflows?active=true&limit=150' \ -H 'accept: application/json' \ -H 'X-N8N-API-KEY: ' ``` ### Example Response ```json { "data": [ // The response contains an object for each workflow { // Workflow data } ], "nextCursor": "MTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDA" } ``` ### Request the Next Page #### For a self-hosted n8n instance ```bash curl -X 'GET' \ '://api/v/workflows?active=true&limit=150&cursor=MTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDA' \ -H 'accept: application/json' ``` #### For n8n Cloud ```bash curl -X 'GET' \ '/api/v/workflows?active=true&limit=150&cursor=MTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDA' \ -H 'accept: application/json' ``` ---------------------------------------- # Using the API Playground ## Feature Availability The API playground isn't available on Cloud. It is available for all self-hosted pricing tiers. ## Accessing the API Playground The n8n API has a built-in Swagger UI playground in self-hosted versions. You can access the playground using the following path constructed from your environment variables: ``` N8N_HOST:N8N_PORT/N8N_PATH/api/v/docs ``` The API version number is `1`. ## Accessing Real Data If you select **Authorize** and enter your API key in the API playground, you can access your live data. Be aware you can change or delete real data. ## Credential Formats The API includes documentation about credential formats available using the `credentials` endpoint: ``` N8N_HOST:N8N_PORT/N8N_PATH/api/v/credentials/schema/{credentialTypeName} ``` ### Finding `credentialTypeName` To find the type, download your workflow as JSON and examine it. For instance, for a Google Drive node, the `{credentialTypeName}` is `googleDriveOAuth2Api`: ```json { "...": "...", "credentials": { "googleDriveOAuth2Api": { "id": "9", "name": "Google Drive" } } } ``` ---------------------------------------- # API Documentation ## Base URL - The base URL for the n8n API is: `https://api.n8n.io/v1`. ## Authentication - API requests require authentication. Use API Key for authorization. ## Endpoints ### Node Operations #### Get Node - **Endpoint:** `/nodes` - **Method:** `GET` - **Description:** Retrieves a list of available nodes. #### Execute Node - **Endpoint:** `/nodes/{node_id}/execute` - **Method:** `POST` - **Description:** Executes a specific node by ID. - **Request Body:** ```json { "parameters": { // node-specific parameters } } ``` - **Response:** ```json { "data": { // node execution results } } ``` ### Workflow Operations #### Get Workflows - **Endpoint:** `/workflows` - **Method:** `GET` - **Description:** Retrieves a list of workflows. #### Create Workflow - **Endpoint:** `/workflows` - **Method:** `POST` - **Request Body:** ```json { "name": "Workflow Name", "nodes": [ // array of node definitions ] } ``` - **Response:** ```json { "id": "new_workflow_id", "name": "Workflow Name" } ``` #### Execute Workflow - **Endpoint:** `/workflows/{workflow_id}/execute` - **Method:** `POST` - **Description:** Executes a specific workflow by ID. - **Request Body:** ```json { "input": { // input data for the workflow } } ``` - **Response:** ```json { "output": { // output data from the workflow } } ``` ## Best Practices - Always validate node inputs before execution. - Organize workflows logically to ensure clarity and maintainability. - Handle errors gracefully in workflows. ---------------------------------------- # Choose your n8n ## Platforms Different ways to set up n8n: - **n8n Cloud**: hosted solution, no installation required. - **Self-host**: recommended for production or customized use cases. - **npm**: Installation via npm. - **Docker**: Installation using Docker. - **Server setup guides**: Available for popular platforms. - **Embed**: White label and build n8n into your product. ### Self-hosting Knowledge Prerequisites Self-hosting n8n requires knowledge in: - Server and container setup/configuration - Application resource management and scaling - Server/application security - n8n configuration Recommendations caution that mistakes can lead to data loss, security issues, and downtime. For inexperienced users, n8n Cloud is recommended. ## Licenses n8n operates under the following licenses: - [Sustainable Use License](https://github.com/n8n-io/n8n/blob/master/LICENSE.md) - [n8n Enterprise License](https://github.com/n8n-io/n8n/blob/master/LICENSE_EE.md) For additional details, refer to the [Sustainable Use License](https://docs.n8n.io/sustainable-use-license/). ## Free Versions n8n offers: - A free trial of n8n Cloud. - A free self-hosted community edition. ## Paid Versions n8n provides two paid versions: - **n8n Cloud**: Various paid plans based on usage and features. - **Self-hosted**: Available in both free and paid versions. For details on Cloud plans and Enterprise Self-hosted, refer to [Pricing](https://n8n.io/pricing/). ---------------------------------------- ## Code in n8n n8n is a low-code tool allowing both no-code and code implementations. ### Code in Your Workflows #### Expressions - Use [expressions](https://docs.n8n.io/glossary/#expression-n8n) to transform data in your nodes. - JavaScript can be used in expressions along with n8n's [Built-in methods and variables](https://docs.n8n.io/code/builtin/overview/) and [Data transformation functions](https://docs.n8n.io/code/builtin/data-transformation-functions/). #### Code Node - Use the Code node to add JavaScript or Python to your workflow. - More information available at [Code node](https://docs.n8n.io/code/code-node/). ### Technical Nodes n8n provides core nodes for key functionalities such as: - **HTTP Request**: [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) - **Webhook**: [Webhook node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/) - **Code**: [Code node](https://docs.n8n.io/code/code-node/) #### Writing a Backend - Use nodes to make API calls (e.g., creating an API endpoint). Reference: [Create an API endpoint](https://n8n.io/workflows/1750-creating-an-api-endpoint/). #### Representing Complex Logic - Build complex workflows using [If](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/), [Switch](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/), and [Merge](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/) nodes. ### Other Developer Resources - **n8n API**: Allows programmatic tasks similar to GUI functions. Access via [n8n API node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.n8n/). More info at [API documentation](https://docs.n8n.io/api/). - **Self-hosting**: Instructions available at [Hosting documentation](https://docs.n8n.io/hosting/). - **Building Custom Nodes**: Develop custom nodes and publish them via [npm](https://www.npmjs.com/). Reference: [Creating nodes](https://docs.n8n.io/integrations/creating-nodes/overview/). ---------------------------------------- # AI Coding with GPT ## Use AI in the Code Node ### Feature availability AI assistance in the Code node is available to Cloud users only. ### Important Notes - AI-generated code overwrites existing code in the Code tab. - Recommended to use AI as a starting point and edit the generated code. ### Steps to Generate Code 1. In the Code node, set **Language** to **JavaScript**. 2. Select the **Ask AI** tab. 3. Write your query. 4. Select **Generate Code**. ## Usage Limits - No limits during the trial phase. Permanent limits may apply based on pricing tier. ## Feature Limits - AI can only manipulate data from the n8n workflow. - AI operates with schema knowledge only; it does not know user-specific data. - Must run nodes before the Code node to provide data. - May encounter issues with large data schemas or many preceding nodes. ## Writing Good Prompts - Provide examples and specific processing steps. - Be clear and direct to avoid ambiguities. - Ensure the output format is defined: transformed, filtered, aggregated, or sorted. ### n8n-Specific Guidance - Specify interactions between data from multiple nodes. - Ensure compatibility with n8n's data structure. ## Example Prompts ### Example 1: Find a Piece of Data Inside a Second Dataset Prompt: > The Slack data contains only one item. The input data represents all Notion users. Sometimes the person property that holds the email can be null. I want to find the notionId of the Slack user and return it. JavaScript: ```javascript const slackUser = $("Mock Slack").all()[0]; const notionUsers = $input.all(); const slackUserEmail = slackUser.json.email; const notionUser = notionUsers.find( (user) => user.json.person && user.json.person.email === slackUserEmail ); return notionUser ? [{ json: { notionId: notionUser.json.id } }] : []; ``` ### Example 2: Data Transformation Prompt: > Return a single line of text that has all usernames listed with a comma. Each username should be enquoted with a double quotation mark. JavaScript: ```javascript const items = $input.all(); const usernames = items.map((item) => `"${item.json.username}"`); const result = usernames.join(", "); return [{ json: { usernames: result } }]; ``` ### Example 3: Summarize Data and Create a Slack Message Prompt: > Create a markdown text for Slack that counts how many ideas, features, and bugs have been submitted... JavaScript: ```javascript const submissions = $input.all(); let ideaCount = 0; let featureCount = 0; let bugCount = 0; submissions.forEach((submission) => { switch (submission.json.property_type[0]) { case "Idea": ideaCount++; break; case "Feature": featureCount++; break; case "Bug": bugCount++; break; } }); const topSubmissions = submissions .sort((a, b) => b.json.property_votes - a.json.property_votes) .slice(0, 5); let topSubmissionText = ""; topSubmissions.forEach((submission) => { topSubmissionText += `<${submission.json.url}|${submission.json.name}> with ${submission.json.property_votes} votes\n`; }); const slackMessage = `*Summary of Submissions*\nIdeas: ${ideaCount}\nFeatures: ${featureCount}\nBugs: ${bugCount}\nTop 5 Submissions:\n${topSubmissionText}`; return [{ json: { slackMessage } }]; ``` ### Reference Incoming Node Data Explicitly Use dot notation for nested fields to clarify the data you want. Prompt: > The data in "Mock data" represents a list of people. For each person, return a new item containing personal_info.first_name and work_info.job_title. JavaScript: ```javascript const items = $input.all(); const newItems = items.map((item) => { const firstName = item.json.personal_info.first_name; const jobTitle = item.json.work_info.job_title; return { json: { firstName, jobTitle, }, }; }); return newItems; ``` ## Fixing the Code AI-generated code may require edits. Familiarity with n8n's data structure and built-in methods is recommended. ---------------------------------------- # Convenience Methods n8n provides methods to simplify common tasks in expressions. ## Python Support Python can be utilized in the Code node, but is not available in expressions. ### Method List | Method | Description | Available in Code node? | | --- | --- | --- | | `$evaluateExpression(expression: string, itemIndex?: number)` | Evaluates a string as an expression. If `itemIndex` is not provided, data from item 0 is used. | Yes | | `$ifEmpty(value, defaultValue)` | Tests if the first parameter is empty, returning either it or the second parameter. The first parameter is considered empty if it's:
- `undefined`
- `null`
- An empty string `''`
- An array where `value.length` is false
- An object where `Object.keys(value).length` is false | Yes | | `$if(condition: boolean, trueValue: any, falseValue: any)` | Takes three parameters: a condition, a value to return if true, and a value to return if false. | No | | `$max(...numbers: number[])` | Returns the highest of the provided numbers. | No | | `$min(...numbers: number[])` | Returns the lowest of the provided numbers. | No | ### Alternate Method List | Method | Description | | --- | --- | | `_evaluateExpression(expression: string, itemIndex?: number)` | Evaluates a string as an expression. If `itemIndex` is not provided, data from item 0 is used. | | `_ifEmpty(value, defaultValue)` | Tests if the first parameter is empty, returning either it or the second parameter. The first parameter is considered empty if it's:
- `undefined`
- `null`
- An empty string `''`
- An array where `value.length` is false
- An object where `Object.keys(value).length` is false | ---------------------------------------- # Data Transformation Functions Data transformation functions are helper functions to facilitate data transformation within expressions. ## JavaScript in Expressions You can implement JavaScript in expressions. ## Available Functions by Data Type - **Arrays**: Specific functions for array manipulation. - **Dates**: Functions for handling date transformations. - **Numbers**: Functions related to numeric operations. - **Objects**: Functions for object manipulation. - **Strings**: Functions for string transformations. ## Usage Data transformation functions can be accessed within the expressions editor. The syntax is: ``` {{ dataItem.function() }} ``` ### Example To validate if a string is an email: ```javascript {{ "example@example.com".isEmail() }} // Returns true ``` ---------------------------------------- # Current Node Input Methods for working with the input of the current node in n8n. ## Node Input Methods | Method | Description | Available in Code Node? | |----------------------|------------------------------------------------------------------------------------------------------------------|--------------------------| | `$binary` | Shorthand for `$input.item.binary`. Incoming binary data from a node. | No | | `$input.item` | The input item of the current node that's being processed. | Yes | | `$input.all()` | All input items in the current node. | Yes | | `$input.first()` | First input item in the current node. | Yes | | `$input.last()` | Last input item in the current node. | Yes | | `$input.params` | Object containing the query settings of the previous node. This includes data such as the operation it ran. | Yes | | `$json` | Shorthand for `$input.item.json`. Incoming JSON data from a node. | Yes (when running once for each item) | | `$input.context.noItemsLeft` | Boolean. Only available when working with the Loop Over Items node. Indicates whether processing continues. | Yes | ## Alternative Input Methods | Method | Description | |----------------------|------------------------------------------------------------------------------------------------------------------| | `_input.item` | The input item of the current node that's being processed. | | `_input.all()` | All input items in the current node. | | `_input.first()` | First input item in the current node. | | `_input.last()` | Last input item in the current node. | | `_input.params` | Object containing the query settings of the previous node. This includes data such as the operation it ran. | | `_json` | Shorthand for `_input.item.json`. Incoming JSON data from a node. Available when set to **Run Once for Each Item**. | | `_input.context.noItemsLeft` | Boolean. Only available when working with the Loop Over Items node. Indicates whether processing continues. | ---------------------------------------- # Data Transformation Functions for Arrays A reference document listing built-in convenience functions to support data transformation in expressions for arrays. ## Functions ### average() Returns the value of elements in an array. ### chunk(size: Number): Array Splits arrays into chunks with a length of size. - **Parameters:** - `size` (Required, Number): The size of each chunk. ### compact(): Array Removes empty values from the array. ### difference(arr: Array): Array Compares two arrays. Returns all elements in the base array that aren't present in `arr`. - **Parameters:** - `arr` (Required, Array): The array to compare to the base array. ### intersection(arr: Array): Array Compares two arrays. Returns all elements in the base array that are present in `arr`. - **Parameters:** - `arr` (Required, Array): The array to compare to the base array. ### first(): Array item Returns the first element of the array. ### isEmpty(): Boolean Checks if the array doesn't have any elements. ### isNotEmpty(): Boolean Checks if the array has elements. ### last(): Array item Returns the last element of the array. ### max(): Number Returns the highest value in an array. ### merge(arr: Array): Array Merges two Object-arrays into one array by merging the key-value pairs of each element. - **Parameters:** - `arr` (Required, Array): The array to merge into the base array. ### min(): Number Gets the minimum value from a number-only array. ### pluck(fieldName?: String): Array Returns an array of Objects where keys equal the given field names. - **Parameters:** - `fieldName` (Optional, String): The key(s) you want to retrieve, as comma-separated strings. ### randomItem(): Array item Returns a random element from an array. ### removeDuplicates(key?: String): Array Removes duplicates from an array. - **Parameters:** - `key` (Optional, String): A key, or comma-separated list of keys, to check for duplicates. ### renameKeys(from: String, to: String): Array Renames all matching keys in the array. - **Parameters:** - `from` (Required, String): The key you want to rename. - `to` (Required, String): The new name. ### smartJoin(keyField: String, nameField: String): Array Operates on an array of objects. Creates a new object containing key-value pairs, removing non-matching and empty values. - **Parameters:** - `keyField` (Required, String): The key to join. - `nameField` (Required, String): The value to join. #### Example ```javascript // Input {{ [{"type":"fruit", "name":"apple"},{"type":"vegetable", "name":"carrot"} ].smartJoin("type","name") }} // Output [Object: {"fruit":"apple","vegetable":"carrot"}] ``` ### sum(): Number Returns the total sum of all the values in an array of parsable numbers. ### toJsonString(): String Convert an array to a JSON string. Equivalent of `JSON.stringify`. ### union(arr: Array): Array Concatenates two arrays and then removes duplicates. - **Parameters:** - `arr` (Required, Array): The array to compare to the base array. ### unique(key?: String): Array Removes duplicates from an array. - **Parameters:** - `key` (Optional, String): A key, or comma-separated list of keys, to check for duplicates. ---------------------------------------- Built with ❤️ by Synaptiv AI ---------------------------------------- # Booleans ## Overview This document lists built-in convenience functions for data transformation in expressions for arrays in n8n. ## JavaScript in Expressions You can use any JavaScript in expressions. Refer to Expressions documentation for more information. ## toInt() ### Description Convert a boolean to a number. ### Behavior - `false` converts to `0` - `true` converts to `1` ---------------------------------------- # Dates A reference document listing built-in convenience functions for data transformation in expressions for dates. ## Function: beginningOf(unit?: DurationUnit): Date Transforms a Date to the start of the given time period. Returns either a JavaScript Date or Luxon Date, depending on input. ### Function Parameters - **unit**: Optional string enum - Default: `week` - Values: `second`, `minute`, `hour`, `day`, `week`, `month`, `year` --- ## Function: endOfMonth(): Date Transforms a Date to the end of the month. --- ## Function: extract(datePart?: DurationUnit): Number Extracts the part defined in datePart from a Date. Returns either a JavaScript Date or Luxon Date, depending on input. ### Function Parameters - **datePart**: Optional string enum - Default: `week` - Values: `second`, `minute`, `hour`, `day`, `week`, `month`, `year` --- ## Function: format(fmt: TimeFormat): String Formats a Date in the given structure. ### Function Parameters - **fmt**: Required string enum - Refer to [Luxon | Table of tokens](https://moment.github.io/luxon/#/formatting?id=table-of-tokens) for formats. --- ## Function: isBetween(date1: Date | DateTime, date2: Date | DateTime): Boolean Checks if a Date is between two given dates. ### Function Parameters - **date1**: Required Date or DateTime - **date2**: Required Date or DateTime --- ## Function: isDst(): Boolean Checks if a Date is within Daylight Savings Time. --- ## Function: isInLast(n?: Number, unit?: DurationUnit): Boolean Checks if a Date is within a given time period. ### Function Parameters - **n**: Optional Number - Default: `0` - **unit**: Optional string enum - Default: `minutes` - Values: `second`, `minute`, `hour`, `day`, `week`, `month`, `year` --- ## Function: isWeekend(): Boolean Checks if the Date falls on a Saturday or Sunday. --- ## Function: minus(n: Number, unit?: DurationUnit): Date Subtracts a given time period from a Date. Returns either a JavaScript Date or Luxon Date, depending on input. ### Function Parameters - **n**: Required Number - **unit**: Optional string enum - Default: `milliseconds` - Values: `second`, `minute`, `hour`, `day`, `week`, `month`, `year` --- ## Function: plus(n: Number, unit?: DurationUnit): Date Adds a given time period to a Date. Returns either a JavaScript Date or Luxon Date, depending on input. ### Function Parameters - **n**: Required Number - **unit**: Optional string enum - Default: `milliseconds` - Values: `second`, `minute`, `hour`, `day`, `week`, `month`, `year` --- ## Function: toDateTime(): Date Converts a JavaScript date to a Luxon date object. ---------------------------------------- # Numbers A reference document listing built-in convenience functions to support data transformation in expressions for numbers. ## JavaScript in expressions You can use any JavaScript in expressions. ## Functions ### ceil() Rounds up a number to a whole number. --- ### floor() Rounds down a number to a whole number. --- ### format(locales?: LanguageCode, options?: FormatOptions): String Returns a formatted string of a number based on the given LanguageCode and FormatOptions. When no arguments are given, transforms the number in a like format 1.234. #### Function parameters - **locales**: Optional string, an IETF BCP 47 language tag. Default: `en-US` - **options**: Optional object, configure options for number formatting. Refer to [MDN | Intl.NumberFormat()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat) for more information. --- ### isEven(): Boolean Returns true if the number is even. Only works on whole numbers. --- ### isOdd(): Boolean Returns true if the number is odd. Only works on whole numbers. --- ### round(decimalPlaces?: Number): Number Returns the value of a number rounded to the nearest whole number, unless a decimal place is specified. #### Function parameters - **decimalPlaces**: Optional number, how many decimal places to round to. Default: `0` --- ### toBoolean(): Boolean Converts a number to a boolean. `0` converts to `false`. All other values convert to `true`. --- ### toDateTime(format?: String): Date Converts a number to a Luxon date object. #### Function parameters - **format**: Optional string enum. Can be `ms` (milliseconds), `s` (seconds), or `excel` (Excel 1900). Defaults to milliseconds. ---------------------------------------- # Data Transformation Functions for Objects A reference document listing built-in convenience functions to support data transformation in expressions for objects. ## JavaScript in Expressions You can use any JavaScript in expressions. Refer to n8n Expressions for more information. ### isEmpty(): Boolean Checks if the Object has no key-value pairs. ### merge(object: Object): Object Merges two Objects into a single Object using the first as the base Object. If a key exists in both Objects, the key in the base Object takes precedence. #### Function Parameters - **object**: Required Object. The Object to merge with the base Object. ### hasField(fieldName: String): Boolean Checks if the Object has a given field. Only top-level keys are supported. #### Function Parameters - **fieldName**: Required String. The field to search for. ### removeField(key: String): Object Removes a given field from the Object. #### Function Parameters - **key**: Required String. The field key of the field to remove. ### removeFieldsContaining(value: String): Object Removes fields with a given value from the Object. #### Function Parameters - **value**: Required String. The field value of the field to remove. ### keepFieldsContaining(value: String): Object Removes fields that do not match the given value from the Object. #### Function Parameters - **value**: Required String. The field value of the field to keep. ### compact(): Object Removes empty values from an Object. ### toJsonString(): String Convert an object to a JSON string. Equivalent of `JSON.stringify`. ### urlEncode(): String Transforms an Object into a URL parameter list. Only top-level keys are supported. ---------------------------------------- # Data Transformation Functions for Strings A reference document listing built-in convenience functions to support data transformation in expressions for strings. ## Functions ### `base64Encode()` Encode a string as base64. ### `base64Decode()` Convert a base64 encoded string to a normal string. ### `extractDomain()` Extracts a domain from a string containing a valid URL. Returns undefined if none is found. ### `extractEmail()` Extracts an email from a string. Returns undefined if none is found. ### `extractUrl()` Extracts a URL from a string. Returns undefined if none is found. ### `extractUrlPath()` Extract the path but not the root domain from a URL. ```javascript "https://example.com/orders/1/details".extractUrlPath() // returns "/orders/1/details/" ``` ### `hash(algo?: Algorithm)` Returns a string hashed with the given algorithm. #### Function Parameters - `algo` (Optional): String enum - Default: `md5` - Options: `md5`, `base64`, `sha1`, `sha224`, `sha256`, `sha384`, `sha512`, `sha3`, `ripemd160` ### `isDomain()` Checks if a string is a domain. ### `isEmail()` Checks if a string is an email. ### `isEmpty()` Checks if a string is empty. ### `isNotEmpty()` Checks if a string has content. ### `isNumeric()` Checks if a string only contains digits. ### `isUrl()` Checks if a string is a valid URL. ### `parseJson()` Equivalent of `JSON.parse()`. Parses a string as a JSON object. ### `quote(mark?: String)` Returns a string wrapped in quotation marks. Default quotation is `"`. #### Function Parameters - `mark` (Optional): String to specify quote mark style. Default: `"` ### `removeMarkdown()` Removes Markdown formatting from a string. ### `replaceSpecialChars()` Replaces non-ASCII characters in a string with an ASCII representation. ### `removeTags()` Remove tags, such as HTML or XML, from a string. ### `toBoolean()` Convert a string to a boolean. ```javascript "false", "0", "", and "no" convert to false. ``` ### `toDateTime()` Converts a string to a Luxon date object. ### `toDecimalNumber()` See `toFloat`. ### `toFloat()` Converts a string to a decimal number. ### `toInt()` Converts a string to an integer. ### `toSentenceCase()` Formats a string to sentence case. ### `toSnakeCase()` Formats a string to snake case. ### `toTitleCase()` Formats a string to title case. Will not change already uppercase letters. ### `toWholeNumber()` Converts a string to a whole number. ### `urlDecode(entireString?: Boolean)` Decodes a URL-encoded string, replaces percent-encoded characters with their original characters. #### Function Parameters - `entireString` (Optional): Boolean to determine if URI syntax characters should be decoded. ### `urlEncode(entireString?: Boolean)` Encodes a string to be used/included in a URL. #### Function Parameters - `entireString` (Optional): Boolean to determine if URI syntax characters should be encoded. ---------------------------------------- # Built-in Date and Time Methods ## Overview Methods for working with date and time using n8n. ## Python Support You can use Python in the Code node. It isn't available in expressions. ## Methods | Method | Description | Available in Code node? | | --- | --- | --- | | `$now` | A Luxon object containing the current timestamp. Equivalent to `DateTime.now()`. | Yes | | `$today` | A Luxon object containing the current timestamp, rounded down to the day. Equivalent to `DateTime.now().set({ hour: 0, minute: 0, second: 0, millisecond: 0 })`. | Yes | | Method | Description | | --- | --- | | `_now` | A Luxon object containing the current timestamp. Equivalent to `DateTime.now()`. | | `_today` | A Luxon object containing the current timestamp, rounded down to the day. Equivalent to `DateTime.now().set({ hour: 0, minute: 0, second: 0, millisecond: 0 })`. | ## Date Parsing n8n passes dates between nodes as strings, so you need to parse them. Luxon helps you do this. Refer to [Date and time with Luxon](https://docs.n8n.io/code/cookbook/luxon/) for more information. ## Convenience Functions n8n provides built-in convenience functions to support data transformation in expressions for dates. Refer to [Data transformation functions | Dates](https://docs.n8n.io/code/builtin/data-transformation-functions/dates/) for more information. ---------------------------------------- # HTTP Node Variables Variables for working with HTTP node requests and responses when using pagination. These variables are for use in expressions in the HTTP node. You can't use them in other nodes. | Variable | Description | |---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------| | `$pageCount` | The pagination count. Tracks how many pages the node has fetched. | | `$request` | The request object sent by the HTTP node. | | `$response` | The response object from the HTTP call. Includes `$response.body`, `$response.headers`, and `$response.statusCode`. The contents of `body` and `headers` depend on the data sent by the API. | ---------------------------------------- # JMESPath Method This is an n8n-provided method for working with the JMESPath library. ## Python Support You can use Python in the Code node, but it isn't available in expressions. ## Methods | Method | Description | Available in Code node? | |--------------|----------------------------------------------------------------|--------------------------| | `$jmespath()`| Perform a search on a JSON object using JMESPath. | Yes | | `_jmespath()`| Perform a search on a JSON object using JMESPath. | No | ---------------------------------------- # LangChain Code Node Methods ## Methods | Method | Description | | --- | --- | | `this.addInputData(inputName, data)` | Populate the data of a specified non-main input.
- `inputName`: Must be one of: `ai_agent`, `ai_chain`, `ai_document`, `ai_embedding`, `ai_languageModel`, `ai_memory`, `ai_outputParser`, `ai_retriever`, `ai_textSplitter`, `ai_tool`, `ai_vectorRetriever`, `ai_vectorStore`.
- `data`: Refer to the [Data structure](https://docs.n8n.io/data/data-structure/) for expected data structure. | | `this.addOutputData(outputName, data)` | Populate the data of a specified non-main output.
- `outputName`: Must be one of: `ai_agent`, `ai_chain`, `ai_document`, `ai_embedding`, `ai_languageModel`, `ai_memory`, `ai_outputParser`, `ai_retriever`, `ai_textSplitter`, `ai_tool`, `ai_vectorRetriever`, `ai_vectorStore`.
- `data`: Refer to the [Data structure](https://docs.n8n.io/data/data-structure/) for expected data structure. | | `this.getInputConnectionData(inputName, itemIndex, inputIndex?)` | Get data from a specified non-main input.
- `inputName`: Must be one of: `ai_agent`, `ai_chain`, `ai_document`, `ai_embedding`, `ai_languageModel`, `ai_memory`, `ai_outputParser`, `ai_retriever`, `ai_textSplitter`, `ai_tool`, `ai_vectorRetriever`, `ai_vectorStore`.
- `itemIndex`: Should be `0`.
- `inputIndex`: Use if multiple nodes are connected to the specified input. | | `this.getInputData(inputIndex?, inputName?)` | Get data from the main input. | | `this.getNode()` | Get the current node. | | `this.getNodeOutputs()` | Get the outputs of the current node. | | `this.getExecutionCancelSignal()` | Use to stop the execution of a function when the workflow stops. Required if building custom chains or agents. | ---------------------------------------- # n8n Metadata ## Core Concepts Methods for working with n8n metadata encompass: - Access to environment variables for self-hosted n8n. - Metadata about workflows, executions, and nodes. - Information regarding instance variables and external secrets. ## Node & Parameter Details | Method | Description | Available in Code node? | | --- | --- | --- | | `$env` | Contains n8n instance configuration environment variables. | Yes | | `$execution.customData` | Set and get custom execution data. | Yes | | `$execution.id` | The unique ID of the current workflow execution. | Yes | | `$execution.mode` | Indicates if the execution was triggered automatically or manually. Possible values: `test`, `production`. | Yes | | `$execution.resumeUrl` | The webhook URL to resume a workflow waiting at a Wait node. | Yes | | `$getWorkflowStaticData(type)` | Accesses static workflow data. Static data doesn't persist when testing workflows. | Yes | | `$("").isExecuted` | Checks whether a node has executed. | Yes | | `$itemIndex` | The index of an item in a list. | No | | `$nodeVersion` | Gets the version of the current node. | Yes | | `$prevNode.name` | Name of the node that the current input came from. | Yes | | `$prevNode.outputIndex` | Index of the output connector from which the current input came. | Yes | | `$prevNode.runIndex` | Run of the previous node generating the current input. | Yes | | `$runIndex` | Number of times the current node has executed (zero-based). | Yes | | `$secrets` | Information about external secrets setup. | Yes | | `$vars` | Variables available in the active environment. | Yes | | `$version` | The node version. | No | | `$workflow.active` | Indicates if the workflow is active (true/false). | Yes | | `$workflow.id` | The workflow ID. | Yes | | `$workflow.name` | The workflow name. | Yes | ## Additional Method Details | Method | Description | | --- | --- | | `_env` | Contains n8n instance configuration environment variables. | | `_execution.customData` | Set and get custom execution data. | | `_execution.id` | The unique ID of the current workflow execution. | | `_execution.mode` | Indicates if the execution was triggered automatically or manually. Possible values: `test`, `production`. | | `_execution.resumeUrl` | The webhook URL to resume a workflow waiting at a Wait node. | | `_getWorkflowStaticData(type)` | Accesses static workflow data. | | `_("").isExecuted` | Checks whether a node has executed. | | `_nodeVersion` | Gets the version of the current node. | | `_prevNode.name` | Name of the node that the current input came from. | | `_prevNode.outputIndex` | Index of the output connector from which the current input came. | | `_prevNode.runIndex` | Run of the previous node generating the current input. | | `_runIndex` | Number of times the current node has executed (zero-based). | | `_secrets` | Information about external secrets setup. | | `_vars` | Variables available in the active environment. | | `_workflow.active` | Indicates if the workflow is active (true/false). | | `_workflow.id` | The workflow ID. | | `_workflow.name` | The workflow name. | ---------------------------------------- # Output of Other Nodes Methods for working with the output of other nodes in n8n. ## Python Support Python can be used in the Code node, but it isn't available in expressions. ## Node Methods ### Methods for Accessing Node Outputs | Method | Description | Available in Code node? | | --- | --- | --- | | `$("").all(branchIndex?, runIndex?)` | Returns all items from a given node. If `branchIndex` isn't specified, it defaults to the output connecting `node-name` to the Code node. | Yes | | `$("").first(branchIndex?, runIndex?)` | Returns the first item output by the given node. Defaults to the output connecting `node-name` to the Code node if `branchIndex` isn't given. | Yes | | `$("").last(branchIndex?, runIndex?)` | Returns the last item output by the given node. Defaults to the output connecting `node-name` to the Code node if `branchIndex` isn't given. | Yes | | `$("").item` | The linked item used to produce the current item. Refer to Item linking for more information. | No | | `$("").params` | An object containing the query settings of the node, including operation details and result limits. | Yes | | `$("").context` | Provides information about the processing in the Loop Over Items node. Indicates whether items are still being processed. | Yes | | `$("").itemMatching(currentNodeInputIndex)` | Use this instead of `$("").item` in the Code node to trace back from an input item. | Yes | ### Alternative Methods Using Underscore | Method | Description | Available in Code node? | | --- | --- | --- | | `_("").all(branchIndex?, runIndex?)` | Returns all items from a given node. If `branchIndex` isn't specified, it defaults to the output connecting `node-name` to the Code node. | Yes | | `_("").first(branchIndex?, runIndex?)` | Returns the first item output by the given node. Defaults to the output connecting `node-name` to the Code node if `branchIndex` isn't specified. | Yes | | `_("").last(branchIndex?, runIndex?)` | Returns the last item output by the given node. Defaults to the output connecting `node-name` to the Code node if `branchIndex` isn't specified. | Yes | | `_("").item` | The linked item used to produce the current item. Refer to Item linking for more information. | No | | `_("").params` | An object containing the query settings of the node, including operation details and result limits. | Yes | | `_("").context` | Provides information about the processing in the Loop Over Items node. Indicates whether items are still being processed. | Yes | | `_("").itemMatching(currentNodeInputIndex)` | Use this instead of `_("").item` in the Code node to trace back from an input item. | Yes | ---------------------------------------- # Built-in Methods and Variables n8n provides built-in methods and variables for working with data and accessing n8n data. This section serves as a reference for available methods and variables for use in expressions. ## Availability - Some methods and variables are not available in the Code node. - Data transformation functions are only available in the expressions editor. ## References - **Current Node Input**: [Documentation](https://docs.n8n.io/code/builtin/current-node-input/) - **Output of Other Nodes**: [Documentation](https://docs.n8n.io/code/builtin/output-other-nodes/) - **Date and Time**: [Documentation](https://docs.n8n.io/code/builtin/date-time/) - **JMESPath**: [Documentation](https://docs.n8n.io/code/builtin/jmespath/) - **HTTP Node**: [Documentation](https://docs.n8n.io/code/builtin/http-node-variables/) - **LangChain Code Node**: [Documentation](https://docs.n8n.io/code/builtin/langchain-methods/) - **n8n Metadata**: [Documentation](https://docs.n8n.io/code/builtin/n8n-metadata/) - **Convenience Methods**: [Documentation](https://docs.n8n.io/code/builtin/convenience/) - **Data Transformation Functions**: [Documentation](https://docs.n8n.io/code/builtin/data-transformation-functions/) ---------------------------------------- # Using the Code Node The Code node allows writing custom JavaScript or Python to be executed as a step in workflows. ## Usage ### Choose a Mode - **Run Once for All Items**: Executes the code once, regardless of input items. - **Run Once for Each Item**: Executes the code for each input item. ## JavaScript The Code node supports Node.js. ### Supported JavaScript Features - Promises: You can return a promise that resolves to items. - `console.log`: Use for debugging workflows. ### External Libraries For self-hosted n8n, external npm modules can be imported. - Built-in available modules: - [crypto Node.js module](https://nodejs.org/docs/latest-v18.x/api/crypto.html) - [moment npm package](https://www.npmjs.com/package/moment) ### Built-in Methods and Variables Use `$variableName` or `$methodName()` syntax. Type `$` in the Code node for suggestions. ### Keyboard Shortcuts Keyboard shortcuts are supported for autocompletion, code-folding, and multiple-cursors. A full list is available in the keyboard shortcuts documentation. ## Python Python support is provided using [Pyodide](https://pyodide.org/en/stable/), which does not include a Python executable. ### Limitations - Slower processing time than JavaScript. - Built-in methods and variables syntax: `_variableName` or `_methodName()`. Type `_` for suggestions. ### Keyboard Shortcuts Identical support for keyboard shortcuts as in JavaScript. ## File System and HTTP Requests Direct file system access and HTTP requests are not allowed. Use: - [Read/Write File From Disk](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile/) - [HTTP Request](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) ## Key Concepts - **Data Structure**: Understand data received in the Code node. - **Item Linking**: How to link items when the number of input and output items does not match. ## Use AI in the Code Node - AI features available to Cloud users only. - AI generated code replaces existing code. ### Steps to Use AI 1. Set **Language** to **JavaScript**. 2. Select the **Ask AI** tab. 3. Write your query. 4. Select **Generate Code**. Refer to official documentation for more comprehensive guidance on the Code node and its functionalities. ---------------------------------------- # Examples using n8n's Built-in Methods and Variables n8n provides built-in methods and variables for working with data and accessing n8n data. This section provides usage examples. ## Built-in Methods and Variables ### execution - Description: Allows access to workflow execution details. ### getWorkflowStaticData - Description: Retrieves static data associated with the workflow. ### Retrieve linked items from earlier in the workflow - Description: Fetches items that were linked to the current workflow execution. ### (node-name).all - Description: Accesses all data from the specified node. ### vars - Description: Provides access to variables within the n8n environment. ## Related Resources - **Built-in Methods and Variables Reference**: Overview of built-in methods and variables. - **Expressions**: Documentation on expressions within n8n. - **Code Node**: Guidance on utilizing the code node in workflows. ---------------------------------------- # `("").all(branchIndex?: number, runIndex?: number)` Accesses all the items of the current or parent nodes. Without parameters, it returns all items of the current node. ## Getting items ### JavaScript Code Example ```javascript // Returns all the items of the given node and current run let allItems = $("").all(); // Returns all items the node "IF" outputs (index: 0 which is Output "true" of its most recent run) let allItems = $("IF").all(); // Returns all items the node "IF" outputs (index: 0 which is Output "true" of the same run as current node) let allItems = $("IF").all(0, $runIndex); // Returns all items the node "IF" outputs (index: 1 which is Output "false" of run 0 which is the first run) let allItems = $("IF").all(1, 0); ``` ### Python Code Example ```python # Returns all the items of the given node and current run allItems = _("").all() # Returns all items the node "IF" outputs (index: 0 which is Output "true" of its most recent run) allItems = _("IF").all() # Returns all items the node "IF" outputs (index: 0 which is Output "true" of the same run as current node) allItems = _("IF").all(0, _runIndex) # Returns all items the node "IF" outputs (index: 1 which is Output "false" of run 0 which is the first run) allItems = _("IF").all(1, 0) ``` ## Accessing item data Retrieve all items output by a previous node and log the data they contain. ### JavaScript Code Example ```javascript previousNodeData = $("").all(); for(let i=0; i").all() for item in previousNodeData: # item is of type # Convert it to a Dict itemDict = item.json.to_py() print(itemDict) ``` ---------------------------------------- ## Core Concepts ### `execution.id` Contains the unique ID of the current workflow execution. ### `execution.resumeUrl` The webhook URL to call to resume a waiting workflow. ### `execution.customData` This is only available in the Code node. ## Node & Parameter Details ### Code Examples #### JavaScript ```javascript let executionId = $execution.id; $execution.customData.set("key", "value"); $execution.customData.setAll({"key1": "value1", "key2": "value2"}); var customData = $execution.customData.getAll(); var customData = $execution.customData.get("key"); ``` #### Python ```python executionId = _execution.id _execution.customData.set("key", "value"); _execution.customData.setAll({"key1": "value1", "key2": "value2"}); customData = _execution.customData.getAll(); customData = _execution.customData.get("key"); ``` Refer to Custom executions data for more information. ---------------------------------------- # `getWorkflowStaticData(type)` Access static workflow data. ## Core Concepts - **Static Data**: Data available when the workflow is active and called by a trigger or webhook. Not available during testing. - **Types of Static Data**: - **Global Static Data**: Accessible by all nodes in the workflow. - **Node Static Data**: Unique to individual nodes. ## Example with Global Data ### JavaScript ```javascript // Get the global workflow static data const workflowStaticData = $getWorkflowStaticData('global'); // Access its data const lastExecution = workflowStaticData.lastExecution; // Update its data workflowStaticData.lastExecution = new Date().getTime(); // Delete data delete workflowStaticData.lastExecution; ``` ### Python ```python # Get the global workflow static data workflowStaticData = _getWorkflowStaticData('global') # Access its data lastExecution = workflowStaticData.lastExecution # Update its data workflowStaticData.lastExecution = new Date().getTime() # Delete data delete workflowStaticData.lastExecution ``` ## Example with Node Data ### JavaScript ```javascript // Get the static data of the node const nodeStaticData = $getWorkflowStaticData('node'); // Access its data const lastExecution = nodeStaticData.lastExecution; // Update its data nodeStaticData.lastExecution = new Date().getTime(); // Delete data delete nodeStaticData.lastExecution; ``` ### Python ```python # Get the static data of the node nodeStaticData = _getWorkflowStaticData('node') # Access its data lastExecution = nodeStaticData.lastExecution # Update its data nodeStaticData.lastExecution = new Date().getTime() # Delete data delete nodeStaticData.lastExecution ``` ---------------------------------------- # Retrieve Linked Items from Earlier in the Workflow Every item in a node's input data links back to the items used in previous nodes to generate it. This is useful if you need to retrieve linked items from further back than the immediate previous node. To access the linked items from earlier in the workflow, use `("").itemMatching(currentNodeinputIndex)`. ## Example Workflow 1. **Customer Datastore Node** generates example data: ```json [ { "id": "23423532", "name": "Jay Gatsby", "email": "gatsby@west-egg.com", "notes": "Keeps asking about a green light??", "country": "US", "created": "1925-04-10" }, { "id": "23423533", "name": "José Arcadio Buendía", "email": "jab@macondo.co", "notes": "Lots of people named after him. Very confusing", "country": "CO", "created": "1967-05-05" } ] ``` 2. **Edit Fields Node** simplifies this data: ```json [ { "name": "Jay Gatsby" }, { "name": "José Arcadio Buendía" } ] ``` 3. **Code Node** restores the email address to the correct person: ```json [ { "name": "Jay Gatsby", "restoreEmail": "gatsby@west-egg.com" }, { "name": "José Arcadio Buendía", "restoreEmail": "jab@macondo.co" } ] ``` ## Code Examples ### JavaScript ```javascript for (let i = 0; i < $input.all().length; i++) { $input.all()[i].json.restoreEmail = $('Customer Datastore (n8n training)').itemMatching(i).json.email; } return $input.all(); ``` ### Python ```python for i, item in enumerate(_input.all()): _input.all()[i].json.restoreEmail = _('Customer Datastore (n8n training)').itemMatching(i).json.email return _input.all(); ``` You can view and download the example workflow from the [n8n website | itemMatching usage example](https://n8n.io/workflows/1966-itemmatching-usage-example/). ---------------------------------------- # `vars` `vars` contains all variables for the active environment in n8n. It is read-only, meaning you can access variables using `vars`, but must set them through the UI. ## Accessing Variables ### JavaScript ```javascript // Access a variable $vars. ``` ### Python ```python # Access a variable _vars. ``` ## `vars` and `env` `vars` gives access to user-created variables and is part of the environments feature. Meanwhile, `env` provides access to configuration environment variables for your n8n instance. ---------------------------------------- # Code Node Cookbook ## Overview This section contains examples and recipes for tasks you can perform with the Code node in n8n. ## Examples - **Get Number of Items Returned by Last Node**: - Reference to the relevant documentation: [Get number of items returned by last node](https://docs.n8n.io/code/cookbook/code-node/number-items-last-node/) - **Get the Binary Data Buffer**: - Reference to the relevant documentation: [Get the binary data buffer](https://docs.n8n.io/code/cookbook/code-node/get-binary-data-buffer/) - **Output to the Browser Console**: - Reference to the relevant documentation: [Output to the browser console](https://docs.n8n.io/code/cookbook/code-node/console-log/) ## Related Resources - **Built-in Methods and Variables Reference**: [Built-in methods and variables reference](https://docs.n8n.io/code/builtin/overview/) - **Code Node Documentation**: [Code node](https://docs.n8n.io/code/code-node/) ---------------------------------------- # Output to the Browser Console You can use `console.log()` or `print()` in the Code node for debugging. ## console.log (JavaScript) Example usage: ```javascript let a = "apple"; console.log(a); ``` ## print (Python) Set your Code node **Language** to **Python**, then use the following code: ```python a = "apple" print(a) ``` ### Handling an Output of `[object Object]` If the console displays `[object Object]`, check the data type and convert it as needed. To check the data type in Python: ```python print(type(myData)) ``` #### JsProxy If `type()` outputs ``, convert it to a native Python object using `to_py()`. Example: ```python previousNodeData = _("").all() for item in previousNodeData: itemDict = item.json.to_py() print(itemDict) ``` Refer to the Pyodide documentation on [JsProxy](https://pyodide.org/en/stable/usage/api/python-api/ffi.html#pyodide.ffi.JsProxy) for more information. ---------------------------------------- Built with ❤️ by Synaptiv AI ---------------------------------------- # Get the binary data buffer The binary data buffer contains all the binary file data processed by a workflow. You can perform operations on the binary data using this buffer. ### Usage To access the binary data buffer, use n8n's `getBinaryDataBuffer()` function. #### Function Signature ```javascript /** * itemIndex: number. The index of the item in the input data. * binaryPropertyName: string. The name of the binary property. * The default in the Read/Write File From Disk node is 'data'. */ let binaryDataBufferItem = await this.helpers.getBinaryDataBuffer(itemIndex, binaryPropertyName); ``` #### Example To retrieve the data in the binary buffer for the first input item: ```javascript let binaryDataBufferItem = await this.helpers.getBinaryDataBuffer(0, 'data'); // Returns the data in the binary buffer for the first input item ``` ### Best Practices - Always use the `getBinaryDataBuffer()` function. - Avoid using older methods of directly accessing the buffer, such as targeting it with expressions like `items[0].binary.data.data`. ### Notes - The `getBinaryDataBuffer()` function is not supported in Python. ---------------------------------------- # Get Number of Items Returned by the Previous Node To get the number of items returned by the previous node, use the following code examples: ## JavaScript Example ```javascript if (Object.keys(items[0].json).length === 0) { return [ { json: { results: 0, } } ]; } return [ { json: { results: items.length, } } ]; ``` ### Output ```json [ { "results": 8 } ] ``` ## Python Example ```python if len(items[0].json) == 0: return [ { "json": { "results": 0, } } ] else: return [ { "json": { "results": items.length, } } ] ``` ### Output ```json [ { "results": 8 } ] ``` ---------------------------------------- # Expressions Cookbook This section contains examples and recipes for tasks you can do with expressions. ## Python Support You can use Python in the Code node. It isn't available in expressions. ## Related Resources - Built-in methods and variables reference - Expressions ---------------------------------------- # Check incoming data You can check the incoming data and return a different value if it doesn't match a condition. For instance, to check if a variable from the previous node is empty and return a string if it is, use the following code snippet to return `not found`: ```javascript {{$json["variable_name"] ? $json["variable_name"] : "not found"}} ``` This expression uses the ternary operator. Alternatively, you can use the nullish coalescing operator (`??`) or the logical OR operator (`||`): ```javascript {{ $x ?? "default value" }} {{ $x || "default value" }} ``` In these cases, the value of `$x` will be used if it is set to a non-null, non-false value; otherwise, the string `default value` will be the fallback value. ---------------------------------------- # Expressions Common Issues ## The 'JSON Output' in item 0 contains invalid JSON This error occurs when you use JSON mode without providing a valid JSON object. The error may display as `The 'JSON Output' in item 0 does not contain a valid JSON object`. **Resolution Steps:** - Validate the JSON using a JSON validator. - Ensure the JSON object does not reference undefined input data, which may happen if the incoming data lacks consistent fields. ## Can't get data for expression This error occurs when n8n cannot retrieve the data referenced by an expression, often because the preceding node hasn't run yet. The error may appear as `Referenced node is unexecuted`, indicating the specific node that hasn't executed. **Resolution Steps:** - Test the workflow up to the named node. - For nodes using JavaScript or custom code, check if a previous node has executed before accessing its value: ```javascript $("").isExecuted ``` **Example:** To demonstrate the error with referenced input data parameters: ```javascript { "my_field_1": {{ $input.params }} } ``` ## Invalid Syntax This error appears when an expression contains a syntax error. For example, a trailing period may cause an invalid syntax error. **Example of Invalid Syntax:** ```javascript { "my_field_1": "value", "my_field_2": {{ $('If').item.json. }} } ``` **Resolution Steps:** - Verify the expression syntax to ensure it follows the expected format. ---------------------------------------- # Examples using n8n's HTTP Request Node The HTTP Request node is one of the most versatile nodes in n8n. Use this node to make HTTP requests to query data from any app or service with a REST API. ## Node Reference Refer to [HTTP Request](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) for information on node settings. ## Pagination Refer to the pagination section for strategies on handling multiple pages of data in requests. ## Best Practices - Use HTTP Request node for interacting with any REST API service. - Always handle authentication requirements as specified by the API documentation. ## Related Resources - [HTTP Request Node Details](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) - [Built-in Methods and Variables Reference](https://docs.n8n.io/code/builtin/overview/) - [Expressions Documentation](https://docs.n8n.io/code/expressions/) ---------------------------------------- # Pagination in the HTTP Request Node The HTTP Request node supports pagination, which allows fetching data across multiple pages depending on the API implementation. ## Enable Pagination In the HTTP Request node, select **Add Option** > **Pagination**. ## Use a URL from the Response to Get the Next Page Using `$response` 1. Set **Pagination Mode** to **Response Contains Next URL**. 2. In **Next URL**, use an expression to set the URL. For example: ```json { "next-url": "{{ $response.body['next-page'] }}" } ``` ## Get the Next Page by Number Using `$pageCount` 1. Set **Pagination Mode** to **Update a Parameter in Each Request**. 2. Set **Type** to **Query**. 3. Enter the **Name** of the query parameter. Example: - **Name**: `page` 4. Hover over **Value** and toggle **Expression** on. 5. Enter `{{ $pageCount + 1 }}` `$pageCount` starts at zero, so adding `+1` fetches the next page progressively. ## Navigate Pagination Through Body Parameters 1. Set the HTTP Request Method to **POST**. 2. Set **Pagination Mode** to **Update a Parameter in Each Request**. 3. Select **Body** in the **Type** parameter. 4. Enter the **Name** of the body parameter. Example: - **Name**: `page` 5. Hover over **Value** and toggle **Expression** on. 6. Enter `{{ $pageCount + 1 }}` ## Set the Page Size in the Query 1. Select **Send Query Parameters** in the main node parameters. 2. Enter the **Name** of the query parameter to set page size. Example: - **Name**: `limit` 3. In **Value**, enter your page size. ---------------------------------------- # Query JSON with JMESPath ## JMESPath JMESPath is a query language for JSON that allows extraction and transformation of elements from a JSON document. ## The `jmespath()` Method n8n provides a method called `jmespath()` for searching a JSON object using the JMESPath query language. ### Basic Syntax ```javascript $jmespath(object, searchString) ``` ```python _jmespath(object, searchString) ``` ### Example Equivalent JavaScript for understanding: ```javascript var jmespath = require('jmespath'); jmespath.search(object, searchString); ``` - `object`: A JSON object (e.g., output of a previous node). - `searchString`: An expression in JMESPath. ### Search Parameter Order In JMESPath examples, the order is `search(searchString, object)`; however, n8n uses `search(object, searchString)`. ## Common Tasks Examples for common operations using JMESPath: ### Apply a JMESPath Expression Given this JSON: ```json [ { "body": { "people": [ {"first": "James", "last": "Green"}, {"first": "Jacob", "last": "Jones"}, {"first": "Jayden", "last": "Smith"} ], "dogs": { "Fido": {"color": "brown", "age": 7}, "Spot": {"color": "black and white", "age": 5} } } } ] ``` #### Retrieve First Names ```javascript {{$jmespath($json.body.people, "[*].first")}} // Returns ["James", "Jacob", "Jayden"] ``` ```javascript let firstNames = $jmespath($json.body.people, "[*].first") return {firstNames}; // Returns: [{"firstNames": ["James", "Jacob", "Jayden"]}] ``` ```python firstNames = _jmespath(_json.body.people, "[*].first") return {"firstNames": firstNames} // Returns: [{"firstNames": ["James", "Jacob", "Jayden"]}] ``` #### Slice of First Names ```javascript {{$jmespath($json.body.people, "[:2].first")}} // Returns ["James", "Jacob"] ``` ```javascript let firstTwoNames = $jmespath($json.body.people, "[:2].first"); return {firstTwoNames}; // Returns: [{"firstNames": ["James", "Jacob"]}] ``` ```python firstTwoNames = _jmespath(_json.body.people, "[:2].first") return {"firstTwoNames": firstTwoNames} // Returns: [{"firstTwoNames": ["James", "Jacob"]}] ``` #### Retrieve Dogs' Ages ```javascript {{$jmespath($json.body.dogs, "*.age")}} // Returns [7,5] ``` ```javascript let dogsAges = $jmespath($json.body.dogs, "*.age"); return {dogsAges}; // Returns: [{"dogsAges": [7, 5]}] ``` ```python dogsAges = _jmespath(_json.body.dogs, "*.age") return {"dogsAges": dogsAges} // Returns: [{"dogsAges": [7, 5]}] ``` ### Select Multiple Elements Use Multiselect to extract first and last names into a new list: ```javascript {{$jmespath($json.body.people, "[].[first, last]")}} // Returns [["James","Green"],["Jacob","Jones"],["Jayden","Smith"]] ``` ```javascript let newList = $jmespath($json.body.people, "[].[first, last]"); return {newList}; // Returns: [{"newList": [["James","Green"], ["Jacob","Jones"], ["Jayden","Smith"]]}] ``` ```python newList = _jmespath(_json.body.people, "[].[first, last]") return {"newList": newList} // Returns: [{"newList": [["James","Green"], ["Jacob","Jones"], ["Jayden","Smith"]]}] ``` ### Alternative to Arrow Functions To search for an object by name: ```javascript {{ $jmespath($("Code").all(), "[?json.name=='Lenovo'].json.category_id") }} ``` ---------------------------------------- # Date and Time with Luxon ## Core Concepts Luxon is a JavaScript library designed for working with date and time more easily. In n8n, dates are passed between nodes as strings, requiring parsing. Luxon simplifies this process. ## Variables n8n creates two custom Luxon variables: - `now`: A Luxon object representing the current timestamp (equivalent to `DateTime.now()`). - `today`: A Luxon object representing the current timestamp rounded down to the day (equivalent to `DateTime.now().set({ hour: 0, minute: 0, second: 0, millisecond: 0 })`). ## Date and Time Behavior in n8n - Dates are converted to strings between nodes in a workflow. - To convert a string to a date with Luxon, use `DateTime.fromISO('date_string')` or `DateTime.fromFormat('date_string', 'format')`. ## Setting the Timezone Luxon uses the n8n timezone, which can be: - Default: `America/New York` - Custom timezone set via the `GENERIC_TIMEZONE` environment variable or for an individual workflow. ## Common Tasks ### Convert Date String to Luxon #### Supported Standard Format Use `fromISO()` for ISO 8601 strings: ```javascript {{DateTime.fromISO('2019-06-23T00:00:00.00')}} let luxonDateTime = DateTime.fromISO('2019-06-23T00:00:00.00'); ``` #### Non-Standard Format Use `fromFormat()` with a format string: ```javascript {{DateTime.fromFormat("23-06-2019", "dd-MM-yyyy")}} let newFormat = DateTime.fromFormat("23-06-2019", "dd-MM-yyyy"); ``` ### Get n Days from Today To calculate a date offset from today: ```javascript {{$today.minus({days: 7})}} let sevenDaysAgo = $today.minus({days: 7}); ``` ### Create Human-Readable Dates Format the date to a human-readable format: ```javascript {{$today.minus({days: 7}).toLocaleString()}} let readableSevenDaysAgo = $today.minus({days: 7}).toLocaleString(); ``` ### Get the Time Between Two Dates Use the `diff` feature for calculating durations: ```javascript {{DateTime.fromISO('2019-06-23').diff(DateTime.fromISO('2019-05-23'), 'months').toObject()}} let monthsBetweenDates = DateTime.fromISO('2019-06-23').diff(DateTime.fromISO('2019-05-23'), 'months').toObject(); ``` ### A Longer Example: Countdown to Christmas To create a countdown to Christmas: ```javascript {{"There are " + $today.diff(DateTime.fromISO($today.year + '-12-25'), 'days').toObject().days.toString().substring(1) + " days to Christmas!"}} let daysToChristmas = "There are " + $today.diff(DateTime.fromISO($today.year + '-12-25'), 'days').toObject().days.toString().substring(1) + " days to Christmas!"; ``` ## References - [Luxon API Documentation](https://moment.github.io/luxon/api-docs/index.html) - [DateTime fromISO](https://moment.github.io/luxon/api-docs/index.html#datetimefromiso) - [DateTime fromFormat](https://moment.github.io/luxon/#/parsing?id=ad-hoc-parsing) - [DateTime Diff](https://moment.github.io/luxon/#/math?id=diffs) ---------------------------------------- # Expressions Expressions are a feature in n8n nodes that enable dynamic parameter settings based on data from previous node executions, the workflow, or the n8n environment. JavaScript can be executed within an expression, facilitating data manipulation without extensive code. n8n utilizes a templating language called Tournament, enhanced with custom methods, variables, and data transformation functions to streamline tasks like accessing data from other nodes and workflow metadata. ## Supported Libraries - **Luxon**: Library for working with dates and time. - **JMESPath**: Library for querying JSON data. ## Writing Expressions To set a parameter value using an expression: 1. Hover over the parameter. 2. Select **Expressions** in the **Fixed/Expression** toggle. 3. Write your expression in the parameter or use the **Open expression editor** to access available data in the **Variable selector**. All expressions follow this format: `{{ your expression here }}`. ### Example: Get Data from Webhook Body To extract the value of `city` from the webhook body: Webhook data example: ```json [ { "headers": { "host": "n8n.instance.address" }, "params": {}, "query": {}, "body": { "name": "Jim", "age": 30, "city": "New York" } } ] ``` Expression to access `city`: ```javascript {{$json.body.city}} ``` Alternatively: ```javascript {{$json['body']['city']}} ``` ### Example: Writing Longer JavaScript n8n expressions are limited to single lines of JavaScript. Multi-line or variable assignments are not permitted. Invalid example: ```javascript {{ function example() { let end = DateTime.fromISO('2017-03-13'); let start = DateTime.fromISO('2017-02-13'); let diffInMonths = end.diff(start, 'months'); return diffInMonths.toObject(); } example(); }} ``` Valid example: ```javascript {{DateTime.fromISO('2017-03-13').diff(DateTime.fromISO('2017-02-13'), 'months').toObject()}} ``` ## Common Issues For common errors or issues with expressions and suggested resolutions, refer to the [Common Issues](https://docs.n8n.io/code/cookbook/expressions/common-issues/) documentation. ---------------------------------------- # Custom Variables in n8n ## Feature Availability - Available on Self-hosted Enterprise and Pro Cloud plans. - Requires access to the n8n instance owner account to create and edit variables. All users can use existing variables. - Available in version 0.225.0 and above. ## Definitions - Custom variables are read-only variables used to store and reuse values in n8n workflows. - Variables are shared within the n8n instance. ## Create Variables To create a new variable: 1. On the **Variables** page, select **Add Variable**. 2. Enter a **Key** and **Value**. - Maximum key length: 50 characters - Maximum value length: 220 characters - Allowed characters: Lowercase and uppercase letters, numbers, and underscores (`A-Z`, `a-z`, `0-9`, `_`). 3. Select **Save**. The variable is now available for use in all workflows in the n8n instance. ## Edit and Delete Variables To edit or delete a variable: 1. On the **Variables** page, hover over the variable you want to change. 2. Select **Edit** or **Delete**. ## Use Variables in Workflows You can access variables in the Code node and in expressions: ```javascript // Access a variable $vars. ``` - All variables are treated as strings during workflow execution. - If a variable has no value, it is treated as `undefined`. - Workflows do not automatically fail in this case. - Variables are read-only; changes must be made through the UI. - For custom data within workflows, use [Workflow static data](https://docs.n8n.io/code/cookbook/builtin/get-workflow-static-data/). ---------------------------------------- ## Available Courses - **Level 1: Beginner course**: [Link to course](https://docs.n8n.io/courses/level-one/) - **Level 2: Intermediate course**: [Link to course](https://docs.n8n.io/courses/level-two/) ## Workflows - [Creating an API endpoint](https://n8n.io/workflows/1750-creating-an-api-endpoint/) - [AI agent chat](https://n8n.io/workflows/1954-ai-agent-chat/) - [Scrape and summarize webpages with AI](https://n8n.io/workflows/1951-scrape-and-summarize-webpages-with-ai/) - [Very quick quickstart](https://n8n.io/workflows/1700-very-quick-quickstart/) - [Pulling data from services that n8n doesn’t have a pre-built integration for](https://n8n.io/workflows/1748-pulling-data-from-services-that-n8n-doesnt-have-a-pre-built-integration-for/) - [Joining different datasets](https://n8n.io/workflows/1747-joining-different-datasets/) - [Back Up Your n8n Workflows To Github](https://n8n.io/workflows/1534-back-up-your-n8n-workflows-to-github/) - [OpenAI GPT-3: Company Enrichment from website content](https://n8n.io/workflows/1862-openai-gpt-3-company-enrichment-from-website-content/) - [AI agent that can scrape webpages](https://n8n.io/workflows/2006-ai-agent-that-can-scrape-webpages/) - [Convert JSON to an Excel file](https://n8n.io/workflows/1435-convert-json-to-an-excel-file/) ---------------------------------------- # Level One: Introduction to n8n ## Course Overview This course introduces fundamental concepts within n8n and develops low-code automation expertise. ### Learning Objectives By the end of this course, you will know how to: - Set up n8n and navigate the Editor UI. - Structure data within n8n. - Configure node parameters and add credentials. - Utilize conditional logic in workflows. - Schedule and control workflows. - Import, download, and share workflows. ### Workflow Projects You will build two workflows: - A two-node workflow to retrieve articles from Hacker News. - A seven-node workflow to extract records from a data warehouse, filter and calculate results, and notify team members. ## Prerequisites 1. **n8n Setup**: Use [n8n Cloud](https://docs.n8n.io/manage-cloud/overview/) or the [self-hosted version](https://docs.n8n.io/hosting/installation/docker/). 2. **User ID**: Obtain a unique ID and credentials by signing up. 3. Basic knowledge of JavaScript and APIs is beneficial but not required. 4. An account on the n8n community forum to receive a profile badge upon completion. ## Course Duration The course should take approximately **two hours** to complete. ## Completion Criteria To complete the course, you must: - Build the [main workflow](https://docs.n8n.io/courses/level-one/chapter-5/chapter-5.1/). - Pass the [quiz](https://n8n-community.typeform.com/to/JMoBXeGA) at the end. ## Progress Tracking You can check your course progress by verifying your unique ID [here](https://internal.users.n8n.cloud/webhook/course-level-1/verify). Completion rewards include a badge and avatar for forum profiles. ---------------------------------------- # Navigating the Editor UI ## n8n Version This documentation is based on n8n version 1.82.1. ## Getting Started - To set up n8n, use [n8n Cloud](https://app.n8n.cloud/register) (recommended) or [self-host with Docker](https://docs.n8n.io/hosting/installation/docker/). ## Editor UI Settings The Editor UI is where you build workflows. Access workflows and credentials here. ### Left-side Panel Contains the following sections: - **Overview**: All accessible workflows and credentials. - **Projects**: Groups workflows and credentials (available on paid plans). - **Admin Panel**: Access usage, billing, and version settings (n8n Cloud only). - **Templates**: Pre-made workflows for common use cases. - **Variables**: Store and access data (available on Pro and Enterprise Plans). - **All executions**: Information about workflow executions. - **Help**: Resources around n8n products and community. - **Update**: Shows recent product updates. - **Settings**: Manage users and access settings (under `...` menu). ### Top Bar - **Workflow Name**: Edit name of the workflow. - **+ Add Tag**: Organize workflows with optional tags. - **Inactive/Active Toggle**: Activate/deactivate current workflow. - **Share**: Collaborate on workflows (available on paid plans). - **Save**: Save the workflow. - **History**: View previous versions of the workflow. ### Canvas The canvas is the area where you add nodes: - **Execute Workflow**: Runs all nodes in sequence. - **Add Node**: Opens the nodes panel. - **Sticky Note**: Add notes to the canvas. - **Add First Step**: Where to add the first node. ### Moving the Canvas - **Ctrl + Left Button Mouse**: Move around. - **Middle Button Mouse**: Move around. - **Two Fingers on Touchpad**: Slide to move. ## Nodes Nodes are the building blocks of a workflow. ### Node Types 1. **App/Action Nodes**: Add, remove, edit data; external data interactions. 2. **Trigger Nodes**: Start workflows and supply initial data. 3. **Core Nodes**: Provide functionalities like logic, scheduling, generic API calls. 4. **Cluster Nodes**: Groups that work together for AI workflows. ### Finding Nodes Open the Nodes Panel: - Click **+** in the top corner. - Click **+** on an existing node. - Press `Tab`. ### Adding Nodes Add nodes by: - Selecting from the nodes panel (connects automatically). - Dragging and dropping onto the canvas. ### Node Buttons On hovering over a node: - **Execute Node**: Play icon. - **Deactivate/Activate Node**: Power icon. - **Delete Node**: Trash icon. - Ellipsis icon: Opens a context menu with other node options. ### Moving a Workflow Select all nodes with mouse or `Ctrl + A`, then drag to reposition. ## Summary This document detailed navigation of the Editor UI, key components, and node handling within n8n workflows. ---------------------------------------- # Building a Mini-workflow ## Steps: 1. **Add a Manual Trigger node** 2. **Add the Hacker News node** 3. **Configure the Hacker News node** 4. **Execute the node** 5. **Save the workflow** ## 1. Add a Manual Trigger node - Search for the **Manual Trigger** node and add it to the canvas. ## 2. Add the Hacker News node - Search for the **Hacker News** node. - Select **Get many items** action. ## 3. Configure the Hacker News node ### Parameters - **Resource**: All - **Operation**: Get Many - **Limit**: 10 - **Additional Fields** > **Add Field** > **Keyword**: automation ### Settings - **Notes**: Get the 10 latest articles. - **Display note in flow?**: true ## 4. Execute the node - Select the **Execute step** button in the node details window to view results. ### Node Executions - A green checkmark indicates successful execution. - Output is displayed in **Table**, **JSON**, and **Schema** formats. ## 5. Save the workflow - Click **Back to canvas**. - Rename the workflow to "Hacker News workflow". - Save using **Ctrl + S** or **Cmd + S** or select the **Save** button. ## Summary Built a mini-workflow to fetch articles from Hacker News using Manual Trigger and Hacker News node, configured parameters and settings, executed the workflow, and saved it. ---------------------------------------- # Automating a Real-world Use Case ## Scenario Overview Nathan, an Analytics Manager at ABCorp, needs to automate the weekly sales reporting process. He collects sales data from a legacy data warehouse that lacks a CSV export option, but recent API endpoints have been added to expose the data. ### Key Tasks to Automate 1. Calculate the sum of all "Booked" sales orders. 2. Announce the total in the company Discord every Monday. 3. Create a spreadsheet of all "Processing" sales for review by Sales Managers. ## API Integration Nathan’s legacy data warehouse provides API endpoints that allow for the retrieval and management of sales data. The integration with n8n allows for the automation of retrieving this data and performing the necessary calculations. ### API Requirements - Ensure API endpoints are available for data retrieval. - Implement custom code if necessary to structure data for n8n workflows. ## Workflow Implementation 1. **Collect Data**: Use HTTP Request node to fetch data from the API. 2. **Process Data**: Use Functions or Code nodes to calculate totals and organize data. 3. **Output Data**: Send results to Discord using the Discord node and create a spreadsheet with Google Sheets or another relevant integration. ### Example API Request (Pseudo-code): ```javascript const fetchSalesData = async () => { const response = await fetch('https://api.abcorpsalesdata.com/sales'); const data = await response.json(); return data; }; ``` ---------------------------------------- # Designing the Workflow ## Workflow Steps 1. Get data from the data warehouse (order id, order status, order value, employee name) 2. Filter orders by status (Processing or Booked) 3. Calculate total value of Booked orders 4. Notify team members about Booked orders in Discord 5. Insert details of Processing orders into Airtable 6. Schedule workflow to run every Monday morning ## Key Integrations - **Discord**: For notifications about Booked orders - **Airtable**: For inserting details about Processing orders ## Workflow Structure To build this workflow, the following nodes would be involved: - Data retrieval node (From the data warehouse) - Filter node (To filter orders by status) - Calculation node (To calculate total of Booked orders) - Discord integration node (For notifications) - Airtable integration node (To insert data) - Cron node (To schedule the workflow on Mondays) ## Credentials Use credentials received via email upon signing up for the course for accessing necessary integrations. ---------------------------------------- # Getting Data from the Data Warehouse ## Create New Workflow 1. Open the Editor UI and create a new workflow: - Select `Ctrl` + `Alt` + `N` or `Cmd` + `Option` + `N`. - Open the left menu, navigate to **Workflows**, and select **Add workflow**. 2. Name the workflow "Nathan's workflow." ## Add an HTTP Request Node 1. In the Editor UI, add an **HTTP Request** node. 2. Configure parameters for the HTTP Request node: - **Method**: Ensure it is set to `GET`. - **URL**: Add the **Dataset URL** received via email. - **Send Headers**: Toggle to true. Ensure **Using Fields Below** is selected. - **Header Parameters**: - **Name**: `unique_id` - **Value**: The Unique ID received via email. - **Authentication**: - Select **Generic Credential Type**. - **Generic Auth Type**: Select **Header Auth**. - **Credential for Header Auth**: - Click **\+ Create new credential**. - In the Credentials window, set: - **Name**: Header Auth name received via email. - **Value**: Header Auth value received via email. - Select **Save** to save your credentials. ## Get the Data 1. Select the **Execute step** button in the HTTP Request node window. 2. The output will be a table view showing the results of the HTTP request with the following data structure: - `orderID`: The unique ID of each order. - `customerID`: The unique ID of each customer. - `employeeName`: The name of the colleague responsible for the customer. - `orderPrice`: The total price of the customer's order. - `orderStatus`: The customer's order status (`booked` or `processing`). ---------------------------------------- # Inserting Data into Airtable ## Core Concepts To insert data into Airtable using n8n, an Airtable node is utilized in conjunction with the HTTP Request node. ## Node & Parameter Details - **Airtable Node** - **Credential to connect with** - **Access token**: Follow the instructions from the Airtable credential page for token creation. - **Resource**: Record - **Operation**: Create - **Base**: Select from a list of available Airtable bases. - **Table**: Specify the target table (e.g., orders). - **Mapping Column Mode**: Map automatically (requires matching field names). ## Configuration Instructions 1. **Create an Airtable Account**: Sign up for an Airtable account. 2. **Set Up a New Base**: - In your Airtable workspace, create a new base named (e.g., "beginner course"). 3. **Prepare the Table**: - Rename the default table from "Table 1" to "orders." - Delete the default records. - Remove the `Notes`, `Assignee`, and `Status` fields. - Edit the primary field `Name` to `orderID` (Number type). - Add the following fields: | Field Name | Field Type | |----------------|------------------| | `orderID` | Number | | `customerID` | Number | | `employeeName` | Single line text | | `orderPrice` | Number | | `orderStatus` | Single line text | ## Workflow Pattern 1. Add an **Airtable Node** connected to the **HTTP Request Node**. 2. Configure the Airtable node with the appropriate parameters listed above. 3. Execute the Airtable node once the configuration is complete. ## Test the Airtable Node Execute the Airtable node by selecting **Execute step** to insert the data. All data records from the HTTP Request node will populate the orders table in Airtable. ## Best Practices - Ensure that the field names in Airtable match exactly with the incoming data from the HTTP Request node to enable automatic mapping. - Test the integration with a small set of data to confirm proper configuration before scaling up. ---------------------------------------- # Filtering Orders ## Core Concepts **Conditional Logic**: A method to control the flow of data based on defined conditions. In n8n, this is achieved using nodes like the If node and the Switch node. ## Node & Parameter Details ### If Node - **Description**: Splits a workflow based on conditional logic. - **Parameters**: - `value1`: Input from another node, e.g., `{{ $json.orderStatus }}` - `Operation`: Defines how to compare values, e.g., `String is equal to` - `value2`: The value to compare against, e.g., `processing` ### Switch Node - **Description**: Similar to the If node but can handle multiple outputs. ## Configuration Instructions ### Adding the If Node 1. Hover over the arrow connection between the **HTTP Request** node and the **Airtable** node. 2. Select the **+** sign to add the If node. ### Configuring the If Node 1. Set `value1` to `{{ $json.orderStatus }}` using: - Hover over the `value1` field, select the **Expression** tab, and open the expression editor. - Drag **HTTP Request** > **orderStatus** into the **Expression** field. 2. Set **Operation** to `String is equal to`. 3. Set `value2` to `processing`. 4. Select the correct data type (boolean, date & time, number, string) for the operation. ### Inserting Data into Airtable 1. Connect the Airtable node to the If node's `true` connector. 2. Open the Airtable node window and select **Execute step** to verify data insertion based on `orderStatus`. ## Best Practices - Only insert necessary fields to improve performance and reduce computational load. Retaining unneeded fields can slow down data processing and increase storage requirements. ---------------------------------------- # Setting Values for Processing Orders In this step of the workflow, you will learn how to select and set data before transferring it to Airtable using the Edit Fields (Set) node. ## Edit Fields (Set) Node The Edit Fields node can set completely new data as well as overwrite existing data. This node is crucial in workflows which expect incoming data from previous nodes, such as when inserting values into spreadsheets or databases. ## Configure the Edit Fields Node 1. Ensure **Mode** is set to **Manual Mapping**. 2. Drag the fields from the **Input** into the **Fields to Set**: - Drag **If** \> **orderID** as the first field. - Drag **If** \> **employeeName** as the second field. 3. Ensure that **Include Other Input Fields** is set to false. Select **Execute step**. ## Add Data to Airtable 1. Go to your Airtable base. 2. Add a new table called `processingOrders`. 3. Replace the existing columns with two new columns: - `orderID` (primary field): Number - `employeeName`: Single line text 4. Delete three empty rows in the new table. 5. Connect the Edit Fields node **connector to the** Airtable node. 6. Update the Airtable node configuration to point to the new `processingOrders` table instead of the `orders` table. 7. Test your Airtable node to ensure it inserts records into the new `processingOrders` table. ---------------------------------------- # Calculating Booked Orders ## Code Node Overview The **Code node** in n8n allows you to write custom JavaScript code for processing data. It operates in two modes: - **Run Once for All Items**: Processes all input items as a group. - **Run Once for Each Item**: Executes code for each input item individually. Data passed between nodes is structured as an array of objects in the following JSON format: ```json [ { "json": { "apple": "beets", "carrot": { "dill": 1 } }, "binary": { "apple-picture": { "data": "....", "mimeType": "image/png", "fileExtension": "png", "fileName": "example.png" } } }, ... ] ``` ## Configure the Code Node To calculate total booked orders and their value, configure the Code node with the following settings: - Connect the Code node to the `false` branch of the **If node**. - **Mode**: Select **Run Once for All Items**. - **Language**: Select **JavaScript**. ### JavaScript Code Example Place the following code in the **Code** box: ```javascript let items = $input.all(); let totalBooked = items.length; let bookedSum = 0; for (let i = 0; i < items.length; i++) { bookedSum += items[i].json.orderPrice; } return [{ json: { totalBooked, bookedSum } }]; ``` ### Return Format Ensure to return the result in the following format: ```javascript return [{ json: { totalBooked, bookedSum } }]; ``` ## Error Handling If the data structure is incorrect, an error will be shown: `Error: Always an Array of items has to be returned!` Execute the step to view the output of the Code node. ---------------------------------------- Built with ❤️ by Synaptiv AI ---------------------------------------- # Notifying the Team ## Overview This section describes how to send messages to a Discord channel using the Discord node in n8n workflows. ## Discord Node Configuration 1. **Add a Discord node connected to the Code node.** 2. **Select Message Action:** - Choose **Send a message**. 3. **Configure the following parameters:** - **Connection Type**: Select **Webhook**. - **Credential for Discord Webhook**: - Select **Create New Credential**. - Copy the **Webhook URL** from the course sign-up email and paste it into the **Webhook URL** field. - Select **Save** and close the credentials dialog. - **Operation**: Select **Send a Message**. - **Message**: - Select the **Expression** tab on the right side of the Message field. - Use the following expression: ```json { "text": "This week we've {{$json[\"totalBooked\"]}} booked orders with a total value of {{$json[\"bookedSum\"]}}. My Unique ID: {{ $('HTTP Request').params[\"headerParameters\"][\"parameters\"][0][\"value\"] }}" } ``` 4. **Execute the step** in the Discord node. If configured correctly, the message should appear in the specified Discord channel (`#course-level-1`). ---------------------------------------- # Scheduling the Workflow ## Schedule Trigger Node To schedule your workflow to run automatically, use the **Schedule Trigger** node, which allows workflows to run periodically based on fixed dates, times, or intervals. ### Removing the Manual Trigger Node 1. Select the Manual Trigger node connected to your HTTP Request node. 2. Click the trash can icon to delete it. ### Adding the Schedule Trigger Node 1. Open the nodes panel and search for **Schedule Trigger**. 2. Select the Schedule Trigger from the search results. #### Schedule Trigger Configuration Parameters - **Trigger Interval**: Select **Weeks**. - **Weeks Between Triggers**: Enter `1`. - **Trigger on weekdays**: Select **Monday** (remove **Sunday** if added by default). - **Trigger at Hour**: Select **9am**. - **Trigger at Minute**: Enter `0`. **Important Note**: Set the correct timezone for your [n8n instance](https://docs.n8n.io/manage-cloud/set-cloud-timezone/) or the [workflow's settings](https://docs.n8n.io/workflows/settings/). The Schedule Trigger node will use the workflow's timezone if set; otherwise, it will fall back to the n8n instance's timezone. ### Connecting the Schedule Trigger Node Return to the canvas and connect your Schedule Trigger node to the HTTP Request node by dragging the arrow from it to the HTTP Request node. ---------------------------------------- # Activating and Examining the Workflow ## Activating a Workflow To activate your workflow, set the **Inactive** toggle in the top navigation of the Editor UI to be **Activated**. A workflow will run automatically every time a trigger node receives input or meets a condition. ## Workflow Executions - An execution represents a completed run of a workflow, from the first to the last node. - n8n logs workflow executions, allowing you to see if the workflow succeeded or failed. - To view the executions for a specific workflow, switch to the **Executions** tab when the workflow is open. - To access the execution log for the entire n8n instance: - Select **Overview** - Then select the **Executions** tab in the main panel. ### Executions Window Information - **Name**: The name of the workflow - **Started At**: The date and time when the workflow started - **Status**: The workflow status (Waiting, Running, Succeeded, Cancelled, or Failed) and execution duration - **Execution ID**: The ID of the workflow execution You can filter displayed **Executions** by workflow and by status: **Any Status**, **Failed**, **Cancelled**, **Running**, **Success**, or **Waiting**. ## Workflow Settings Access the **Workflow Settings** by selecting the three dots in the upper right corner of the Editor UI when the workflow is open, then select **Settings**. ### Configurable Settings - **Execution Order**: Choose the execution logic for multi-branch workflows (default is `v1`). - **Error Workflow**: A workflow to run if the current workflow fails. - **This workflow can be called by**: Workflows allowed to call this workflow using the **Execute Sub-workflow node**. - **Timezone**: The timezone for the current workflow, important for the **Schedule Trigger node**. - **Save failed production executions**: Set if execution data should be saved when it fails (default is to save). - **Save successful production executions**: Set if execution data should be saved when it succeeds (default is to save). - **Save manual executions**: Set if executions started from the Editor UI should be saved (default is to save). - **Save execution progress**: Set if execution data of each node should be saved (default is to not save). - **Timeout Workflow**: Whether to cancel a workflow execution after a specific period of time (default is to not timeout). ---------------------------------------- # Exporting and Importing Workflows ## Workflows as JSON Files You can save n8n workflows locally as JSON files. This allows sharing workflows with others or importing workflows from them. ### Sharing Credentials Exported workflow JSON files include credential names and IDs. While IDs aren't sensitive, names could be. HTTP Request nodes may include authentication headers when imported from cURL. Remove or anonymize this information before sharing. ## Export and Import Methods You can export and import workflows in three ways: ### 1. From the Editor UI Menu - **Export**: From the top navigation bar, select the three dots in the upper right, then select **Download** to download the current workflow as a JSON file. - **Import**: From the top navigation bar, select the three dots in the upper right, then select **Import from URL** (to import a published workflow) or **Import from File** (to import from a JSON file). ### 2. From the Editor UI Canvas - **Export**: Select all nodes on the canvas and use `Ctrl` + `C` to copy the workflow JSON, which can be pasted into a file or shared directly. - **Import**: Paste copied workflow JSON directly into the canvas with `Ctrl` + `V`. ### 3. From the Command Line - **Export**: Refer to the [full list of commands](https://docs.n8n.io/hosting/cli-commands/) for exporting workflows or credentials. - **Import**: Refer to the [full list of commands](https://docs.n8n.io/hosting/cli-commands/#import-workflows-and-credentials) for importing workflows or credentials. ---------------------------------------- # Quiz Information - Pass the quiz with a minimum of 80% correct answers in each part. - The quiz can be taken multiple times. - There is no time limit for answering the questions. ---------------------------------------- # Level Two Course Overview ## Course Objectives - Automate complex business processes. - Utilize n8n data structures. - Process various data types: XML, HTML, date, time, and binary data. - Merge data from different sources: database, spreadsheet, CRM. - Employ functions and JavaScript in the [Code node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/). - Manage error workflows. ## Prerequisites - **n8n setup**: Use the [self-hosted version](https://docs.n8n.io/hosting/installation/npm/) or [n8n Cloud](https://docs.n8n.io/manage-cloud/overview/). - **User ID**: Obtain a unique ID for course credentials. - **Basic n8n skills**: Recommended to complete the [Level 1 course](https://docs.n8n.io/courses/level-one/). - **Basic JavaScript understanding**. ## Course Duration - Estimated completion time: **two hours**. ## Course Completion - Milestones to demonstrate acquisition of knowledge: - Build the [main workflow](https://docs.n8n.io/courses/level-two/chapter-5/chapter-5.0/). - Pass the course [quiz](https://n8n-community.typeform.com/to/r9hDbytg). ## Progress Tracking - Track progress using a unique ID at [progress verification](https://internal.users.n8n.cloud/webhook/course-level-2/verify). ---------------------------------------- # Understanding the Data Structure ## Data structure of n8n n8n nodes function as an Extract, Transform, Load (ETL) tool. Data between nodes must be in a format recognized by each node, specifically an array of objects. ### Array of Objects - An **array** is a list of values, which can be empty or contain several elements, identified by index starting from 0. - An **object** stores key-value pairs, where values can be accessed via key names. **Example:** ```javascript var turtles = [ { name: 'Michelangelo', color: 'orange', }, { name: 'Donatello', color: 'purple', }, { name: 'Raphael', color: 'red', }, { name: 'Leonardo', color: 'blue', } ]; ``` Data sent from one node to another is structured as an array of JSON objects, termed as **items**. ## Creating Data Sets with the Code Node Use the **Code node** to define your array of objects as follows: **Example:** ```javascript return [ { json: { apple: 'beets', } } ]; ``` To represent Ninja turtles: ```javascript var turtles = [ { json: { name: 'Michelangelo', color: 'orange' } }, { json: { name: 'Donatello', color: 'purple' } }, { json: { name: 'Raphael', color: 'red' } }, { json: { name: 'Leonardo', color: 'blue' } } ]; ``` ### JSON Objects Each object in the array must have a `json` key. If omitted, n8n (version 0.166.0 and above) will add it automatically. ### Nested Pairs To define additional properties, wrap key-value pairs in `{}`. ## Exercise In a Code node, create an array of objects named `myContacts`: **Example:** ```javascript var myContacts = [ { json: { name: 'Alice', email: { personal: 'alice@home.com', work: 'alice@wonderland.org' }, } }, { json: { name: 'Bob', email: { personal: 'bob@mail.com', work: 'contact@thebuilder.com' }, } }, ]; return myContacts; ``` ## Referencing Node Data with the Code Node To reference data from previous nodes: **Example:** ```javascript let items = $input.all(); items[0].json.workEmail = items[0].json.email['work']; return items; ``` ## Transforming Data To adapt incoming data to n8n's structure, consider: ### Operations for Data Transformation - **Split Out Node:** Separate data items. - **Aggregate Node:** Combine data items. Use the **Code node** to modify structure with these functions: - **Create Multiple Items from One Item:** ```javascript return $input.first().json.data.map(item => { return { json: item } }); ``` - **Create a Single Item from Multiple Items:** ```javascript return [ { json: { data_object: $input.all().map(item => item.json) } } ]; ``` ## Exercise 1. Use the **HTTP Request node** to make a GET request to `https://pokeapi.co/api/v2/pokemon`. 2. Use the **Split Out node** to transform data in the `results` field. 3. Use the **Code node** with: ```javascript let items = $input.all(); return items[0].json.results.map(item => { return { json: item } }); ``` ---------------------------------------- # Processing Different Data Types ## HTML and XML Data To process HTML or XML data in n8n workflows, use the **HTML node** or the **XML node**. ### HTML Node - **Use Case**: Extract HTML content of a webpage using CSS selectors. Useful for web scraping. Example: 1. **HTTP Request Node**: - **Authentication**: None - **Request Method**: GET - **URL**: `https://blog.n8n.io/` 2. **HTML Node Configuration**: - **Operation**: Extract HTML Content - **Source Data**: JSON - **JSON Property**: data - **Extraction Values**: - **Key**: title - **CSS Selector**: `.post .item-title a` - **Return Value**: HTML ### XML Node - **Use Case**: Convert XML to JSON and vice versa. Example: 1. **HTTP Request Node**: - **URL**: `https://pokeapi.co/api/v2/pokemon` - **Authentication**: None - **Request Method**: GET 2. **XML Node Configuration**: - **Mode**: JSON to XML - **Property Name**: data ## Date, Time, and Interval Data ### Data Types - **DATE**: Formats include March 29 2022, 29-03-2022, 2022/03/29 - **TIME**: Formats include 08:30:00, 20:30 - **DATETIME**: Format 2022/03/29 08:30:00 - **TIMESTAMP**: Unix timestamp formats like 1616108400 - **YEAR**: Formats like 2022 ### Nodes for Working with Dates - **Date & Time Node**: Convert date and time data to different formats. - **Schedule Trigger Node**: Schedule workflows to run at specific intervals. - **Wait Node**: Pauses workflow execution. Example: 1. **Customer Datastore Node**: Get All People action. 2. **Date & Time Node**: Round Up the created Date from the datastore to the End of Month. - Output Field Name: new-date. - Options: Include Input Fields. ## Binary Data ### Nodes for Binary Data Processing - **HTTP Request Node**: To request and send files from/to web resources. - **Read/Write Files from Disk Node**: To read and write files from/to the n8n machine. - **Convert to File Node**: Convert input data to a file. - **Extract From File Node**: Convert binary data to JSON. ### File Path Naming - **npm**: `~/my_file.json` - **n8n Cloud/Docker**: `/tmp/my_file.json` ### Binary Exercise 1 Example 1. Make an HTTP request to retrieve a PDF file: - URL: `https://media.kaspersky.com/pdf/Kaspersky_Lab_Whitepaper_Anti_blocker.pdf`. 2. Use the **Extract From File Node** to convert the PDF to JSON. ### Binary Exercise 2 Example 1. Make an HTTP request to the Poetry DB API: - URL: `https://poetrydb.org/random/1`. 2. Convert the returned data from JSON to binary: - Use **Convert to File Node** and then write to disk with **Read/Write Files From Disk Node**. ---------------------------------------- # Merging and Splitting Data ## Merging Data Merging data involves creating one data set from multiple sources or synchronizing data between multiple systems (removing duplicates, updating data). ### One-way vs. Two-way Sync - **One-way sync:** Data synchronized in one direction; changes in the main system reflect in the secondary system. - **Two-way sync:** Data synchronized in both directions; changes in either system reflect in the other. ### Merge Node In n8n, use the [Merge node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/) to merge data from two different nodes. The merging options include: - [Append](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/#append) - [Combine](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/#combine) - [Merge by Fields](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/#combine-by-matching-fields): requires input fields to match - [Merge by Position](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/#combine-by-position) - [Combine all possible combinations](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/#combine-by-all-possible-combinations) - [Choose Branch](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/#choose-branch) #### Property Input Fields To reference nested values in the Merge node parameters `Input 1 Field` and `Input 2 Field`, use dot-notation format. #### Example Workflow to Merge Data 1. Add a **Merge node** with `Input 1` from a **Customer Datastore node** and `Input 2` from a **Code node**. 2. In the **Customer Datastore node**, perform **Get All People** operation. 3. In the **Code node**, create an array with objects containing `name`, `language`, and `country` properties. 4. Experiment with different merge options in the **Merge node**. ### JSON Workflow Code Example for Merging ```json { "meta": { "templateCredsSetupCompleted": true, "instanceId": "cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7" }, "nodes": [ { "parameters": { "mode": "combine", "mergeByFields": { "values": [ { "field1": "name", "field2": "name" } ] }, "options": {} }, "id": "578365f3-26dd-4fa6-9858-f0a5fdfc413b", "name": "Merge", "type": "n8n-nodes-base.merge", "typeVersion": 2.1, "position": [720, 580] }, { "parameters": {}, "id": "71aa5aad-afdf-4f8a-bca0-34450eee8acc", "name": "When clicking \"Execute workflow\"", "type": "n8n-nodes-base.manualTrigger", "typeVersion": 1, "position": [260, 560] }, { "parameters": { "operation": "getAllPeople" }, "id": "497174fe-3cab-4160-8103-78b44efd038d", "name": "Customer Datastore (n8n training)", "type": "n8n-nodes-base.n8nTrainingCustomerDatastore", "typeVersion": 1, "position": [500, 460] }, { "parameters": { "jsCode": "return [\n {\n 'name': 'Jay Gatsby',\n 'language': 'English',\n 'country': {\n 'code': 'US',\n 'name': 'United States'\n }\n }\n];" }, "id": "387e8a1e-e796-4f05-8e75-7ce25c786c5f", "name": "Code", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [500, 720] } ], "connections": { "When clicking \"Execute workflow\"": { "main": [ [ { "node": "Customer Datastore (n8n training)", "type": "main", "index": 0 }, { "node": "Code", "type": "main", "index": 0 } ] ] }, "Customer Datastore (n8n training)": { "main": [ [ { "node": "Merge", "type": "main", "index": 0 } ] ] }, "Code": { "main": [ [ { "node": "Merge", "type": "main", "index": 1 } ] ] } } } ``` ## Looping To iterate through each element of an array or each data item, use loops. n8n generally handles repetitive processing automatically. However, for some nodes, you may need to build loops. ### Creating a Loop in n8n To create a loop, connect the output of one node back to an earlier node's input, using an **If node** to control the loop termination. ## Splitting Data in Batches To process large volumes of incoming data efficiently, use the [**Loop Over Items node**](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/). ### Example Workflow to Split Data 1. **Code node** returns URLs of RSS feeds. 2. **Loop Over Items node** with `Batch Size: 1` to iterate over the inputs. 3. **RSS Read node** to fetch data from the URLs. ### JSON Workflow Code Example for Splitting Data ```json { "meta": { "templateCredsSetupCompleted": true, "instanceId": "cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7" }, "nodes": [ { "parameters": {}, "id": "ed8dc090-ae8c-4db6-a93b-0fa873015c25", "name": "When clicking \"Execute workflow\"", "type": "n8n-nodes-base.manualTrigger", "typeVersion": 1, "position": [460, 460] }, { "parameters": { "jsCode": "let urls = [\n {\n json: {\n url: 'https://medium.com/feed/n8n-io'\n }\n },\n {\n json: {\n url: 'https://dev.to/feed/n8n'\n } \n }\n]\n\nreturn urls;" }, "id": "1df2a9bf-f970-4e04-b906-92dbbc9e8d3a", "name": "Code", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [680, 460] }, { "parameters": { "options": {} }, "id": "3cce249a-0eab-42e2-90e3-dbdf3684e012", "name": "Loop Over Items", "type": "n8n-nodes-base.splitInBatches", "typeVersion": 3, "position": [900, 460] }, { "parameters": { "url": "={{ $json.url }}", "options": {} }, "id": "50e1c1dc-9a5d-42d3-b7c0-accc31636aa6", "name": "RSS Read", "type": "n8n-nodes-base.rssFeedRead", "typeVersion": 1, "position": [1120, 460] } ], "connections": { "When clicking \"Execute workflow\"": { "main": [ [ { "node": "Code", "type": "main", "index": 0 } ] ] }, "Code": { "main": [ [ { "node": "Loop Over Items", "type": "main", "index": 0 } ] ] }, "Loop Over Items": { "main": [ null, [ { "node": "RSS Read", "type": "main", "index": 0 } ] ] }, "RSS Read": { "main": [ [ { "node": "Loop Over Items", "type": "main", "index": 0 } ] ] } } } ``` ---------------------------------------- # Dealing with Errors in Workflows ## Checking Failed Workflows n8n tracks executions of workflows. When a workflow fails, check the Executions log to investigate the failure. Open the Executions log by selecting **Executions** in the left-side panel. Select the respective execution to view it in read-only mode. ## Catching Erroring Workflows To catch failed workflows: 1. Create an **Error Workflow** using the **Error Trigger node**. 2. Set the **Error Workflow** in the Workflow Settings. 3. Use additional nodes (e.g., Slack, Discord) to send notifications. ### Error Workflow Details - Workflows using the Error Trigger node do not need to be activated. - The Error Trigger node must be the last node in a workflow. - You can set the same Error Workflow for multiple workflows. ### Exercise 1. Create a new Error Workflow. 2. Add the **Error Trigger node**. 3. Connect a notification node (e.g., Slack, Gmail). 4. Configure the monitored workflow to use the new Error Workflow. ### Example JSON Workflow Code ```json { "nodes": [ { "parameters": {}, "name": "Error Trigger", "type": "n8n-nodes-base.errorTrigger", "typeVersion": 1, "position": [ 720, -380 ] }, { "parameters": { "channel": "channelname", "text": "=This workflow {{$node[\"Error Trigger\"].json[\"workflow\"][\"name\"]}} failed.\nHave a look at it here: {{$node[\"Error Trigger\"].json[\"execution\"][\"url\"]}}", "attachments": [], "otherOptions": {} }, "name": "Slack", "type": "n8n-nodes-base.slack", "position": [ 900, -380 ], "typeVersion": 1, "credentials": { "slackApi": { "id": "17", "name": "slack_credentials" } } } ], "connections": { "Error Trigger": { "main": [ [ { "node": "Slack", "type": "main", "index": 0 } ] ] } } } ``` ## Throwing Exceptions in Workflows To throw errors for troubleshooting, include a **Stop and Error node**. Specify: - **Error Message**: Custom message about the error. - **Error Object**: Type of error. The **Stop and Error node** must be the last node in the workflow. ### When to Throw Errors Use the **Stop and Error node** to validate input data or assumptions, catching potential issues early, such as: - Wrongly formatted JSON. - Incorrect data types. - Missing values. ### Example Stop and Error Node Illustration - This node will display custom error messages for invalid data or conditions. ---------------------------------------- # Automating a Business Workflow ## Workflow Design Steps to achieve workflow automation: 1. Get and combine data from all necessary sources. 2. Sort the data and format the dates. 3. Write binary files. 4. Send notifications using email and Discord. This use case consists of three separate workflows: 1. A workflow that merges the company data with external information. 2. A workflow that generates the reports. 3. A workflow that monitors errors in the second workflow. ## Workflow Prerequisites To build the workflows, you will need the following: - An [Airtable](https://airtable.com/) account and [credentials](https://docs.n8n.io/integrations/builtin/credentials/airtable/). - A [Google](https://www.google.com/account/about/) account and [credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) to access Gmail. - A [Discord](https://discord.com/) account and webhook URL. ---------------------------------------- # Workflow 1: Merging Data ### Overview The goal is to merge customer data from Airtable with additional regional information from the REST Countries API. ### Steps to Build the Workflow 1. **Airtable Node** - Use the **Airtable node** to list the data in the Airtable table named `customers`. 2. **HTTP Request Node** - Use the **HTTP Request node** to fetch data from the REST Countries API: - URL: `https://restcountries.com/v3.1/all` - Query Parameter: - Name: `fields` - Value: `name,region,subregion` - This will return data about world countries, split into separate items. 3. **Merge Node** - Utilize the **Merge node** to combine data from Airtable and the Countries API based on country name. - Airtable Field: `customerCountry` - Countries API Field: `name.common` 4. **Update Airtable Node** - Use another **Airtable node** to update the fields `region` and `subregion` in Airtable with the data received from the Countries API. ### Workflow Representation The workflow diagram illustrates how the nodes are connected to achieve the desired merging of data. ### Nodes Overview - **Airtable Node**: Access and manage Airtable data. - **HTTP Request Node**: Make external HTTP calls to retrieve data from APIs. - **Merge Node**: Combine data from different sources based on specified criteria. ### Best Practices - Ensure correct mappings between Airtable fields and API response fields during the merging process. - Always validate the output from the API to handle cases where data may not match. ### Quiz Questions - How many items does the **HTTP Request node** return? - How many items does the **Merge node** return? - How many unique regions are assigned in the customers table? - What's the subregion assigned to customer ID 10? ---------------------------------------- # Workflow 2: Generating Reports ## Part 1: Getting Data from Different Sources 1. **HTTP Request Node** - **Method**: GET - **URL**: Dataset URL from sign-up email - **Authentication**: Generic Credential Type - **Generic Auth Type**: Header Auth - **Credentials for Header Auth**: Header Auth name and value from sign-up email - **Send Headers**: True - **Specify Headers**: Using Fields Below - **Name**: `unique_id` - **Value**: Unique ID from sign-up email 2. **Airtable Node** - **Operation**: List data from `customers` table where fields `region` and `subregion` are updated. 3. **Merge Node** - **Merge By**: Match input fields on `customerID`. 4. **Sort Node** - **Sort By**: `orderPrice` (Descending). ## Part 2: Generating File for Regional Sales 1. **If Node** - **Condition**: Display orders from `Americas` region. 2. **Convert to File Node** - **Input Format**: Transform incoming data from JSON to binary format. - **File Naming**: Based on `orderID`. 3. **Gmail Node** - **Parameters**: - Send the files using email to a specified address with an attachment. 4. **Discord Node** - **Webhook URL**: Discord URL from sign-up email. - **Text**: "I sent the file using email with the label ID `{label ID}`. My ID: " followed by the unique ID from sign-up email. ## Part 3: Generating Files for Total Sales 1. **Loop Over Items Node** - **Batch Size**: 5 2. **Set Node** - **Values**: - `customerEmail`, `customerRegion`, `customerSince`, `orderPrice` pulled from previous node. 3. **Date & Time Node** - **Change Format**: `customerSince` to MM/DD/YYYY format. - **Include Input Fields**: Yes. 4. **Convert to File Node** - **Output Format**: Create CSV spreadsheet. - **File Name**: Use expression `{{$runIndex > 0 ? 'file_low_orders':'file_high_orders'}}`. 5. **Discord Node** - **Webhook URL**: Discord URL from sign-up email. - **Text**: "I created the spreadsheet `{file name}`. My ID:" followed by unique ID from sign-up email. ## JSON Workflow Code ```json { "meta": { "templateCredsSetupCompleted": true, "instanceId": "cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7" }, "nodes": [ { "parameters": { "sendTo": "bart@n8n.io", "subject": "Your TPS Reports", "emailType": "text", "message": "Please find your TPS report attached.", "options": { "attachmentsUi": { "attachmentsBinary": [{}] } } }, "id": "d889eb42-8b34-4718-b961-38c8e7839ea6", "name": "Gmail", "type": "n8n-nodes-base.gmail", "typeVersion": 2.1, "position": [2100, 500], "credentials": { "gmailOAuth2": { "id": "HFesCcFcn1NW81yu", "name": "Gmail account 7" } } }, { "parameters": {}, "id": "c0236456-40be-4f8f-a730-e56cb62b7b5c", "name": "When clicking \"Execute workflow\"", "type": "n8n-nodes-base.manualTrigger", "typeVersion": 1, "position": [780, 600] }, { "parameters": { "url": "https://internal.users.n8n.cloud/webhook/level2-erp", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "unique_id", "value": "recFIcD6UlSyxaVMQ" } ] }, "options": {} }, "id": "cc106fa0-6630-4c84-aea4-a4c7a3c149e9", "name": "HTTP Request", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.1, "position": [1000, 500], "credentials": { "httpHeaderAuth": { "id": "qeHdJdqqqaTC69cm", "name": "Course L2 Credentials" } } }, { "parameters": { "operation": "search", "base": { "__rl": true, "value": "apprtKkVasbQDbFa1", "mode": "list", "cachedResultName": "All your base", "cachedResultUrl": "https://airtable.com/apprtKkVasbQDbFa1" }, "table": { "__rl": true, "value": "tblInZ7jeNdlUOvxZ", "mode": "list", "cachedResultName": "Course L2, Workflow 1", "cachedResultUrl": "https://airtable.com/apprtKkVasbQDbFa1/tblInZ7jeNdlUOvxZ" }, "options": {} }, "id": "e5ae1927-b531-401c-9cb2-ecf1f2836ba6", "name": "Airtable", "type": "n8n-nodes-base.airtable", "typeVersion": 2, "position": [1000, 700], "credentials": { "airtableTokenApi": { "id": "MIplo6lY3AEsdf7L", "name": "Airtable Personal Access Token account 4" } } }, { "parameters": { "mode": "combine", "mergeByFields": { "values": [ { "field1": "customerID", "field2": "customerID" } ] }, "options": {} }, "id": "1cddc984-7fca-45e0-83b8-0c502cb4c78c", "name": "Merge", "type": "n8n-nodes-base.merge", "typeVersion": 2.1, "position": [1220, 600] }, { "parameters": { "sortFieldsUi": { "sortField": [ { "fieldName": "orderPrice", "order": "descending" } ] }, "options": {} }, "id": "2f55af2e-f69b-4f61-a9e5-c7eefaad93ba", "name": "Sort", "type": "n8n-nodes-base.sort", "typeVersion": 1, "position": [1440, 600] }, { "parameters": { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict" }, "conditions": [ { "id": "d3afe65c-7c80-4caa-9d1c-33c62fbc2197", "leftValue": "={{ $json.region }}", "rightValue": "Americas", "operator": { "type": "string", "operation": "equals", "name": "filter.operator.equals" } } ], "combinator": "and" }, "options": {} }, "id": "2ed874a9-5bcf-4cc9-9b52-ea503a562892", "name": "If", "type": "n8n-nodes-base.if", "typeVersion": 2, "position": [1660, 500] }, { "parameters": { "operation": "toJson", "mode": "each", "options": { "fileName": "=report_orderID_{{ $('If').item.json.orderID }}.json" } }, "id": "d93b4429-2200-4a84-8505-16266fedfccd", "name": "Convert to File", "type": "n8n-nodes-base.convertToFile", "typeVersion": 1.1, "position": [1880, 500] }, { "parameters": { "authentication": "webhook", "content": "I sent the file using email with the label ID and wrote the binary file {file name}. My ID: 123", "options": {} }, "id": "26f43f2c-1422-40de-9f40-dd2d80926b1c", "name": "Discord", "type": "n8n-nodes-base.discord", "typeVersion": 2, "position": [2320, 500], "credentials": { "discordWebhookApi": { "id": "WEBrtPdoLrhlDYKr", "name": "L2 Course Discord Webhook account" } } }, { "parameters": { "batchSize": 5, "options": {} }, "id": "0fa1fbf6-fe77-4044-a445-c49a1db37dec", "name": "Loop Over Items", "type": "n8n-nodes-base.splitInBatches", "typeVersion": 3, "position": [1660, 700] }, { "parameters": { "assignments": { "assignments": [ { "id": "ce839b80-c50d-48f5-9a24-bb2df6fdd2ff", "name": "customerEmail", "value": "={{ $json.customerEmail }}", "type": "string" }, { "id": "0c613366-3808-45a2-89cc-b34c7b9f3fb7", "name": "region", "value": "={{ $json.region }}", "type": "string" }, { "id": "0f19a88c-deb0-4119-8965-06ed62a840b2", "name": "customerSince", "value": "={{ $json.customerSince }}", "type": "string" }, { "id": "a7e890d6-86af-4839-b5df-d2a4efe923f7", "name": "orderPrice", "value": "={{ $json.orderPrice }}", "type": "number" } ] }, "options": {} }, "id": "09b8584c-4ead-4007-a6cd-edaa4669a757", "name": "Edit Fields", "type": "n8n-nodes-base.set", "typeVersion": 3.3, "position": [1880, 700] }, { "parameters": { "operation": "formatDate", "date": "={{ $json.customerSince }}", "options": { "includeInputFields": true } }, "id": "c96fae90-e080-48dd-9bff-3e4506aafb86", "name": "Date & Time", "type": "n8n-nodes-base.dateTime", "typeVersion": 2, "position": [2100, 700] }, { "parameters": { "options": { "fileName": "={{$runIndex > 0 ? 'file_low_orders':'file_high_orders'}}" } }, "id": "43dc8634-2f16-442b-a754-89f47c51c591", "name": "Convert to File1", "type": "n8n-nodes-base.convertToFile", "typeVersion": 1.1, "position": [2320, 700] }, { "parameters": { "authentication": "webhook", "content": "I created the spreadsheet {file name}. My ID: 123", "options": {} }, "id": "05da1c22-d1f6-4ea6-9102-f74f9ae2e9d3", "name": "Discord1", "type": "n8n-nodes-base.discord", "typeVersion": 2, "position": [2540, 700], "credentials": { "discordWebhookApi": { "id": "WEBrtPdoLrhlDYKr", "name": "L2 Course Discord Webhook account" } } } ], "connections": { "Gmail": { "main": [ [ { "node": "Discord", "type": "main", "index": 0 } ] ] }, "When clicking \"Execute workflow\"": { "main": [ [ { "node": "HTTP Request", "type": "main", "index": 0 }, { "node": "Airtable", "type": "main", "index": 0 } ] ] }, "HTTP Request": { "main": [ [ { "node": "Merge", "type": "main", "index": 0 } ] ] }, "Airtable": { "main": [ [ { "node": "Merge", "type": "main", "index": 1 } ] ] }, "Merge": { "main": [ [ { "node": "Sort", "type": "main", "index": 0 } ] ] }, "Sort": { "main": [ [ { "node": "Loop Over Items", "type": "main", "index": 0 }, { "node": "If", "type": "main", "index": 0 } ] ] }, "If": { "main": [ [ { "node": "Convert to File", "type": "main", "index": 0 } ] ] }, "Convert to File": { "main": [ [ { "node": "Gmail", "type": "main", "index": 0 } ] ] }, "Loop Over Items": { "main": [ null, [ { "node": "Edit Fields", "type": "main", "index": 0 } ] ] }, "Edit Fields": { "main": [ [ { "node": "Date & Time", "type": "main", "index": 0 } ] ] }, "Date & Time": { "main": [ [ { "node": "Convert to File1", "type": "main", "index": 0 } ] ] }, "Convert to File1": { "main": [ [ { "node": "Discord1", "type": "main", "index": 0 } ] ] }, "Discord1": { "main": [ [ { "node": "Loop Over Items", "type": "main", "index": 0 } ] ] } }, "pinData": {} } ``` ---------------------------------------- Built with ❤️ by Synaptiv AI ---------------------------------------- # Workflow 3: Monitoring Workflow Errors ## Overview Create an Error workflow to monitor the main workflow for errors. ## Steps to Create the Error Workflow 1. Create a new workflow. 2. Add an **Error Trigger node** (execute as a test). 3. Connect a **Discord node** to the **Error Trigger node** and configure the following parameters: - **Webhook URL**: Discord URL received via email at course signup. - **Text**: ``` The workflow `{workflow name}` failed, with the error message: `{execution error message}`. Last node executed: `{name of the last executed node}`. Check this workflow execution here: `{execution URL}` My Unique ID: ``` Replace text in curly brackets `{}` with expressions to gather respective information from the Error Trigger node. 4. Execute the Discord node. 5. Set the newly created workflow as the **Error Workflow** for the main workflow. ## Diagram The workflow structure should be visualized as follows: [Workflow Diagram](https://docs.n8n.io/_images/courses/level-two/chapter-five/workflow3.png) ## Key Parameters of the Error Trigger Node - The **Error Trigger node** returns specific fields relating to the error encountered during workflow execution. Make sure to reference the documentation to identify exact fields and their purposes. ---------------------------------------- # Test Your Knowledge ## Quiz Information - Pass Requirement: At least 80% correct answers. - Attempts: Unlimited. - Time Limit: None. ## Next Steps - Create new workflows for personal or work use. - Explore workflows for ideas. ## Technical Content No specific APIs, nodes, or parameters are mentioned in this document. Please refer to other sections of the n8n documentation for detailed technical information regarding integrations, workflow configurations, and API usage. ---------------------------------------- # Credentials **Credentials** are private pieces of information issued by apps and services to authenticate users and allow connections and information sharing between the app or service and the n8n node. ## Accessing Credentials - Open the left menu and select **Credentials**. - **My credentials** tab shows credentials you created. - **All credentials** tab displays all credentials you can use, including those shared with you by other users. ## Related Topics - **Create and Edit Credentials**: Instructions for credential creation and modification. - **Credential Sharing**: Learn about sharing capabilities. - **Credentials Library**: Information on setting up credentials for services. ---------------------------------------- # Create and Edit Credentials Credentials are securely stored authentication information used to connect n8n workflows to external services such as APIs or databases. ## Create a Credential 1. Select the **button** in the upper-left corner of the side menu. Select Credential. 2. Choose whether to create the credential inside your personal space or a specific project. 3. Select the app or service you wish to connect to. Or: 1. Using the **Create** button in the upper-right corner from either the **Overview** page or a specific project, select Credential. 2. Determine the scope of the credential creation (personal space or project). 3. Choose the app or service you wish to connect to. You can also create a new credential in the credential drop-down when editing a node in the workflow editor. Enter the details required by your service in the credential modal. Refer to your service's page in the credentials library for guidance. When you save a credential, n8n tests it to confirm it works. ### Credentials Naming New credentials are named " _node name_ account" by default. Rename the credentials by clicking on the name. Use a naming convention that identifies the app or service, type, and purpose of the credential. ## Expressions in Credentials You can use [expressions](https://docs.n8n.io/glossary/#expression-n8n) to set credentials dynamically as your workflow runs: 1. Find the data path containing the credential in your workflow. 2. Hover over the field where you want to use an expression. 3. Toggle **Expression** on. 4. Enter your expression. ### Example Workflow #### Using the Example To load the template into your n8n instance: 1. Download the workflow JSON file. 2. Open a new workflow in your n8n instance. 3. Copy in the JSON, or select **Workflow menu** > **Import from file...**. ---------------------------------------- # Credential Sharing ## Core Concepts - **Credential Sharing**: Users can share credentials with other users for their workflows or within a project for all project members. Shared users cannot view or edit credential details. - **Ownership**: Users can share credentials they created. Project admins can share credentials created in projects. Instance owners and admins can view and share all instance credentials. ## Share a Credential To share a credential: 1. From the left menu, select either **Overview** or a project. 2. Select **Credentials** to see a list of your credentials. 3. Select the credential you want to share. 4. Select **Sharing**. 5. In the **Share with projects or users** dropdown, browse or search for the user or project with which to share. 6. Select a user or project. 7. Select **Save** to apply the changes. ## Remove Access to a Credential To unshare a credential: 1. From the left menu, select either **Overview** or a project. 2. Select **Credentials** to see a list of your credentials. 3. Select the credential you want to unshare. 4. Select **Sharing**. 5. Select the trash icon on the user or project to remove from the list of shared users and projects. 6. Select **Save** to apply the changes. ---------------------------------------- # Data in n8n Data is the information that n8n nodes receive and process. Understanding data structures and manipulation is essential when: - Creating your own node - Writing custom expressions - Using the Function or Function Item node ## Key Topics - **Data Structure** - **Data Flow within Nodes** - **Transforming Data** - **Process Data Using Code** - **Pinning and Editing Data During Workflow Development** - **Data Mapping and Item Linking** ## Data Transformation Nodes n8n provides a collection of nodes to transform data: - **Aggregate**: Group separate items into individual items. - **Limit**: Remove items beyond a defined maximum number. - **Remove Duplicates**: Identify and delete identical items across all fields or a subset of fields. - **Sort**: Organize lists in a desired order or generate a random selection. - **Split Out**: Separate a single data item containing a list into multiple items. - **Summarize**: Aggregate items together, similar to Excel pivot tables. ---------------------------------------- # Binary Data in n8n Binary data refers to any file-type data, such as image files or documents. This section details how to work with binary data within n8n. ## Working with Binary Data in Workflows n8n provides dedicated nodes to manage binary data in workflows. ### Nodes for Handling Binary Data 1. **Read/Write Files from Disk**: - Allows reading and writing files to/from the machine running n8n. - [Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile/) 2. **Convert to File**: - Converts input data into file format. - [Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.converttofile/) 3. **Extract From File**: - Extracts data from a binary format and converts it to JSON. - [Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/) #### Other Nodes for Related Tasks - **HTML**: [Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.html/) - **XML**: [Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.xml/) - **Compression**: [Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.compression/) - **Edit Image**: [Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.editimage/) - **FTP**: [Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.ftp/) To trigger a workflow based on file changes, utilize the **Local File trigger**: [Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.localfiletrigger/). For splitting or concatenating binary data items, leverage the data transformation nodes: [Documentation](https://docs.n8n.io/data/#data-transformation-nodes). ### Code for Manipulating Binary Data You can use the **Code node** to manipulate binary data in workflows. For example, to get the binary data buffer, refer to the guide: [Get the binary data buffer](https://docs.n8n.io/code/cookbook/code-node/get-binary-data-buffer/). ## Configure Binary Data Mode When Self-Hosting Configure how your self-hosted n8n instance manages binary data by adjusting the **Binary data environment variables**: [Documentation](https://docs.n8n.io/hosting/configuration/environment-variables/binary-data/). Key configurations include setting the storage path and binary data storage method. Your configuration can impact n8n scaling: [Scaling | Binary data filesystem mode](https://docs.n8n.io/hosting/scaling/binary-data/). For security, to disable reading and writing binary data, set the `NODES_EXCLUDE` environment variable. Additional information can be found at: [Environment variables | Nodes](https://docs.n8n.io/hosting/configuration/environment-variables/nodes/). ---------------------------------------- # Processing Data with Code ## Function A function is a block of code designed to perform a certain task. In n8n, you can write custom JavaScript or Python code snippets to add, remove, and update the data you receive from a node. The **Code** node gives you access to the incoming data and you can manipulate it. With this node, you can create any function you want using JavaScript code. ---------------------------------------- # Data Editing in n8n n8n allows you to edit **pinned data** for testing workflows during development. Data editing isn't available for production workflow executions. ## Edit Output Data To edit output data: 1. Run the node to load data. 2. In the **OUTPUT** view, select **JSON** to switch to JSON view. 3. Select **Edit**. 4. Edit your data. 5. Select **Save**. n8n saves your changes and pins your data. ## Use Data from Previous Executions To copy data from nodes in previous workflow executions: 1. Open the left menu. 2. Select **Executions**. 3. Browse the workflow executions list to find the desired data. 4. Select **Open Past Execution**. 5. Double click the node whose data you want to copy. 6. Switch to JSON view if it's in table layout. 7. To copy the JSON: - Highlight the JSON and use `ctrl` + `c`, or - Hover over the JSON to display the **Copy** button and select: - **Copy Item Path** or **Copy Parameter Path** for expressions to access parts of the JSON. - **Copy Value** to copy the entire JSON. 8. Return to the workflow you're working on: - Open the left menu. - Select **Workflows**. - Select **Open** and choose the workflow. 9. Open the node where you want to use the copied data. 10. If there's no data, run the node to load data. 11. Switch to JSON view in the **OUTPUT**. 12. Select **Edit**. 13. Paste in the copied data. 14. Select **Save**. n8n saves your changes and pins your data. ---------------------------------------- # Data Flow within Nodes Nodes can process multiple items. For example, configuring the Trello node to `Create-Card` and setting an expression for the `Name` parameter using the property `name-input-value` from incoming data creates a card for each item using the respective `name-input-value` of the current item. ## Example Input This input will create two cards: - One named `test1` - One named `test2` ```json [ { "name-input-value": "test1" }, { "name-input-value": "test2" } ] ``` ---------------------------------------- # Data Filtering in n8n ## Core Concepts - **Data Filtering**: A method to search and filter data within the **INPUT** and **OUTPUT** panels in n8n nodes. It is a visual filtering technique that does not alter or delete any data. ## Configuration Instructions ### Searching and Filtering Data 1. Open the desired node in n8n. 2. Select **Search** in the **INPUT** or **OUTPUT** panel. 3. Enter your search term; n8n filters the data as you type. 4. Note that the filtering is visual only—the filter resets when you close and reopen the node. ## Best Practices - Utilize data filtering to easily check the output of nodes without modifying the underlying data. ---------------------------------------- # Data Mapping Data mapping refers to referencing data from previous nodes. ## Guidance on Data Mapping - **General Mapping Scenarios**: - [Data Mapping in the UI](https://docs.n8n.io/data/data-mapping/data-mapping-ui/) - [Data Mapping in Expressions](https://docs.n8n.io/data/data-mapping/data-mapping-expressions/) - **Item Linking**: - Handle [item linking](https://docs.n8n.io/data/data-mapping/data-item-linking/) when using the Code node or building your own nodes. ---------------------------------------- # Data Item Linking ## Core Concepts - An item is a single piece of data. - Nodes receive one or more items, operate on them, and output new items. - Each item links back to previous items. ## Item Linking Concepts - Understand the behavior of items for programmatic-style nodes. - Use the Code node or expressions editor to access data from earlier items in the workflow. ## Working with the Data Path - Retrieve item data from previous nodes. - Link items when using the Code node. ## Troubleshooting - Guidance on handling errors related to item linking. ## Configuration Instructions - Implement complex behaviors with input and output data in programmatic nodes. - Access previous item data in workflows using the Code node. ---------------------------------------- # Item Linking in the Code Node ## Core Concepts n8n's item linking allows access to data from preceding items in a workflow. Each output item from a node is linked to an input item, creating a chain for accessing previous items. ### Scenarios Requiring Manual Item Linking The Code node requires manual item linking information in the following cases (when more than one incoming item exists): - Adding new items (not linked to any input). - Returning new items. - Manually controlling item linking. Use `pairedItem` to control item linking when returning data. ## Node & Parameter Details ### `pairedItem` To link to an input item, set `pairedItem` when returning data. Example for linking to the item at index 0: ```json [ { "json": { // The index of the input item that generated this output item "pairedItem": 0 } } ] ``` ### Usage Example Input Data: ```json [ { "id": "23423532", "name": "Jay Gatsby" }, { "id": "23423533", "name": "José Arcadio Buendía" }, { "id": "23423534", "name": "Max Sendak" }, { "id": "23423535", "name": "Zaphod Beeblebrox" }, { "id": "23423536", "name": "Edmund Pevensie" } ] ``` Generating New Items: ```javascript newItems = []; for (let i = 0; i < items.length; i++) { newItems.push({ "json": { "name": items[i].json.name, "aBrandNewField": "New data for item " + i } }); } return newItems; ``` *Note: `newItems` will not have `pairedItem`, making it impossible to trace back to original items.* To add `pairedItem`: ```javascript newItems = []; for (let i = 0; i < items.length; i++) { newItems.push({ "json": { "name": items[i].json.name, "aBrandNewField": "New data for item " + i }, "pairedItem": i }); } return newItems; ``` *Each new item now links back to the corresponding original item.* ---------------------------------------- # Item Linking Concepts Each output item created by a node includes metadata that links them to the input item(s) used to generate them. This creates a chain of items to access previous items, which can become complicated, especially with nodes that split or merge data. ## n8n's Automatic Item Linking n8n attempts to automatically link items under the following conditions: - **Single input, single output**: The output links to the input. - **Single input, multiple outputs**: All outputs link to that input. - **Multiple inputs and outputs**: - If input items are kept but their order is changed (or some are removed), n8n can automatically add the correct linked item information. - If the number of inputs and outputs is equal, n8n links items in order (output-1 links to input-1, output-2 to input-2, etc.). - If the counts aren't equal, or new items are created, n8n cannot automatically link items. If linking fails, and the node does not handle item linking, n8n displays an error. ## Item Linking Example Accessing linked items can vary based on the method used: UI, expressions, or the code node. ## Additional Resources - **Item Linking for Node Creators**: Instructions on handling item linking when building nodes. - **Item Linking in the Code Node**: Guidelines for managing item linking within the Code node. - **Item Linking Errors**: Information on potential errors that may occur during item linking. ---------------------------------------- # Item Linking Errors In n8n, you can reference data from any previous node using the expression syntax `$(node_name).item`. ### Item Reference Errors `.item` fails under the following conditions: - The thread is broken. - The thread points to more than one item in the previous node. To avoid these errors, you can use `.first()`, `.last()`, or `.all()[index]` instead. ### Fix for 'Info for expressions missing from previous node' Error Message: ``` ERROR: Info for expression missing from previous node ``` **Cause:** A node does not return pairing information. - **Code nodes:** Ensure you return which input items were used to produce each output item. - **Custom/community nodes:** Update the node to return which input items it uses for output. ### Fix for 'Multiple matching items for expression' Error Message: ``` ERROR: Multiple matching items for expression ``` **Cause:** Multiple items used to create a single item (e.g., from Summarize, Aggregate, or Merge nodes). **Solutions:** - Use `.first()`, `.last()`, or `.all()[index]`. - Reference a different node that contains the same information without multiple matches. ---------------------------------------- # Item Linking for Node Creators ## Overview This guide applies only to programmatic-style nodes. For declarative style nodes, n8n manages paired items automatically. n8n's item linking allows access to data from preceding items. Ensuring that output items from your node are correctly linked to their input items is crucial for the integrity of expressions in other nodes. ### Manual Item Linking If manual item linking is necessary, set `pairedItem` on each returned item: ```javascript // Use the pairedItem information of the incoming item newItem = { "json": { /* your item JSON here */ }, "pairedItem": { "item": item.pairedItem, // Optional: choose the input to use // Set this if your node combines multiple inputs "input": 0 } }; // Or set the index manually newItem = { "json": { /* your item JSON here */ }, "pairedItem": { "item": i, // Optional: choose the input to use // Set this if your node combines multiple inputs "input": 0 } }; ``` Refer to additional resources for conceptual details on item linking and decision-making regarding node building styles. ---------------------------------------- # Data Mapping in the Expressions Editor ## Accessing Linked Items ### Access the Linked Item in a Previous Node's Output When using this method, n8n retrieves the parent item from the item linking chain of the specified node. **Expression:** ```javascript {{$("").item}} ``` **Output Example:** ```json [ { "id": "23423532", "name": "Jay Gatsby" }, { "id": "23423533", "name": "José Arcadio Buendía" }, { "id": "23423534", "name": "Max Sendak" }, { "id": "23423535", "name": "Zaphod Beeblebrox" }, { "id": "23423536", "name": "Edmund Pevensie" } ] ``` **To Extract Name:** ```javascript {{$("").item.json.name}} ``` ### Access the Linked Item in the Current Node's Input In this scenario, the item linking occurs within the node itself whereby the input item connects to an output item. **Expression:** ```javascript {{$input.item}} ``` **Input Data Example:** ```json [ { "id": "23423532", "name": "Jay Gatsby" }, { "id": "23423533", "name": "José Arcadio Buendía" }, { "id": "23423534", "name": "Max Sendak" }, { "id": "23423535", "name": "Zaphod Beeblebrox" }, { "id": "23423536", "name": "Edmund Pevensie" } ] ``` **To Extract Name:** ```javascript {{$input.item.json.name}} ``` ---------------------------------------- # Data Mapping in the UI ## Core Concept Data mapping means referencing data from previous nodes without changing or transforming it. ## Mapping Methods - **Expressions Editor**: Allows custom expressions for data mapping. - **Drag and Drop**: Data can be dragged from the INPUT panel into parameters, generating the corresponding expression. ## Drag and Drop Data Mapping Procedure 1. Run your workflow to load data. 2. Open the node where you need to map data. 3. Mapping can be done in: - **Table View**: Click and hold a table heading to map top-level data or a specific field for nested data. - **JSON View**: Click and hold a key. - **Schema View**: Click and hold a key. 4. Drag the item into the desired field for usage. ### Example Expression Creation Given data: ``` { "fruit": "apples", "color": "green" } ``` To map the `fruit`, drag **fruit** from the **INPUT** into the field, creating the expression: `{{ $json.fruit }}`. This expression iterates over input items, where the field's value becomes the value of `fruit`. ### Understanding Nested Data Nested data example: ```json [ { "name": "First item", "nested": { "example-number-field": 1, "example-string-field": "apples" } }, { "name": "Second item", "nested": { "example-number-field": 2, "example-string-field": "oranges" } } ] ``` n8n displays nested data in table form, indicating nested structures visually. ## Notes For errors related to mapping and linking items, refer to Item linking errors documentation. ---------------------------------------- # Data Mocking Data mocking is simulating or faking data. It is useful for developing workflows to avoid repeated calls to data sources, work with a predictable dataset during development, and prevent overwriting live data. ## Mocking with Real Data Using Data Pinning Using [data pinning](https://docs.n8n.io/data/data-pinning/), you can load real data into your workflow and pin it in the output panel of a node. This approach allows for realistic data with only one call to the data source. ### Steps to Pin Data in a Node: 1. Run the node to load data. 2. In the **OUTPUT** view, select **Pin data**. When data pinning is active, the button is disabled, and a "This data is pinned" banner is displayed. **Note:** You cannot pin data if the output includes binary data. ## Generate Custom Data Using the Code or Edit Fields Nodes You can create a custom dataset in your workflow using either the [Code node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/) or the [Edit Fields (Set) node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/). - In the **Code node**, create any dataset and return it as the node output. - In the **Edit Fields node**, select **Add fields** to add custom data. The Edit Fields node is suitable for small tests, while the Code node is preferred for complex datasets. ## Output a Sample Data Set from the Customer Datastore Node The Customer Datastore node provides a fake dataset for testing. Add and execute the node to explore the data, particularly when you need test data without a real use-case. ---------------------------------------- # Data Pinning Data pinning allows you to save the output data of a node during workflow development, which can be reused in future executions instead of fetching fresh data. ## Benefits of Data Pinning - Avoids repeated requests to external systems during testing. - Helps manage data or usage limits by reducing resource consumption. - Ensures consistency of data across workflow tests. **Note:** Data pinning is only available for nodes with a single main output. It is not available for production workflow executions. ## Pin Data To pin data in a node: 1. Run the node to load data. 2. In the **OUTPUT** view, select **Pin data**. When active, the button is disabled and a "This data is pinned" banner is displayed in the **OUTPUT** view. **Restriction:** You cannot pin data if the output includes binary data. ## Unpin Data To unpin data and fetch fresh data on the next execution: - Select the **Unpin** link in the banner that appears when data pinning is active. ---------------------------------------- # Data Structure in n8n In n8n, all data passed between nodes is an array of objects with the following structure: ```json [ { "json": { "apple": "beets", "carrot": { "dill": 1 } }, "binary": { "apple-picture": { "data": "....", // Base64 encoded binary data (required) "mimeType": "image/png", // Best practice to set if possible (optional) "fileExtension": "png", // Best practice to set if possible (optional) "fileName": "example.png" // Best practice to set if possible (optional) } } } ] ``` ### Automatic Key Addition From version 0.166.0 onward, when using the Function or Code nodes, n8n automatically adds the `json` key if it's missing and wraps items in an array (`[]`) if needed. This is applicable only to the Function or Code nodes. Custom nodes must ensure that the data is returned with the `json` key. ## Data Item Processing Nodes can process multiple items. For example, the following input to the Trello node set to `Create-Card` will create cards named according to the `name-input-value` property of each item: ```json [ { "name-input-value": "test1" }, { "name-input-value": "test2" } ] ``` This input will create two cards: one named `test1` and the other named `test2`. ---------------------------------------- # Schema Preview Schema Preview exposes expected schema data from the previous node in the Node Editor, enabling workflow construction without credential provision. It provides visibility of expected fields without mock data. ## Using the Preview 1. Include a node with Schema Preview in your workflow. 2. Access the next node's details in the sequence to display Schema Preview data in the Node Editor. 3. Drag and drop fields from Schema Preview as input into node parameters and settings. ---------------------------------------- # Transforming Data n8n uses a predefined data structure for processing incoming data. If your incoming data does not match this structure, it must be transformed. ## Data Transformation Nodes To transform data structures into compatible formats, use the following transformation nodes: - **[Aggregate](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/)**: Groups separate items or portions of them into individual items. - **[Limit](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.limit/)**: Removes items that exceed a defined maximum number. - **[Remove Duplicates](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.removeduplicates/)**: Identifies and deletes items that are identical across all fields or a subset of fields. - **[Sort](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sort/)**: Organizes lists in a desired order or generates a random selection. - **[Split Out](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitout/)**: Separates a single data item containing a list into multiple items. - **[Summarize](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.summarize/)**: Aggregates items in a manner similar to Excel pivot tables. ---------------------------------------- # n8n Embed ## Overview n8n Embed allows users to white label n8n or incorporate it into their software as part of a commercial product. ## Support - Community forum available for assistance. - Current Embed customers can contact n8n support using the email provided with their license purchase. ## Availability n8n Embed is not available in Russia and Belarus. ## API Documentation No specific API endpoints or methods were provided in the original documentation. For more details, consult n8n's API documentation. ## Best Practices To ensure optimal usage of n8n Embed, refer to the embedded guidelines available on the n8n website. For detailed configurations, please visit the official documentation page relevant to Embed features. ## Workflow Patterns No specific workflow patterns were detailed. Users are encouraged to explore the various workflow examples and integrate them according to their specific use cases. ---------------------------------------- Built with ❤️ by Synaptiv AI ---------------------------------------- # Configuration ## Authentication n8n supports user management and can secure n8n with built-in authentication features. It supports LDAP and SAML. ### Credential Overwrites To offer OAuth login to users, credential data can be overwritten on a global basis. This data is not visible to users but is automatically used by the backend. #### Using Environment Variables Set credential overwrites using environment variable `CREDENTIALS_OVERWRITE_DATA` to `{ CREDENTIAL_NAME: { PARAMETER: VALUE }}`. Note: This method is not recommended as environment variables aren't protected. #### Using REST APIs Set `CREDENTIALS_OVERWRITE_ENDPOINT` to the path for the endpoint. It is recommended to load credential data via a custom REST endpoint. 1. Activate the endpoint with: ```shell export CREDENTIALS_OVERWRITE_ENDPOINT=send-credentials ``` 2. Example JSON file for credentials (`oauth-credentials.json`): ```json { "asanaOAuth2Api": { "clientId": "", "clientSecret": "" }, "githubOAuth2Api": { "clientId": "", "clientSecret": "" } } ``` 3. Apply it with curl: ```shell curl -H "Content-Type: application/json" --data @oauth-credentials.json http://localhost:5678/send-credentials ``` ## Environment Variables Relevant environment variables: | Variable | Type | Default | Description | |--------------------------------|----------|---------|---------------------------------------------------------------------------------------------------------| | `EXECUTIONS_TIMEOUT` | Number | `-1` | Default timeout for workflows, `-1` to disable. | | `EXECUTIONS_DATA_PRUNE` | Boolean | `true` | Deletes data of past executions on a rolling basis. | | `EXECUTIONS_DATA_MAX_AGE` | Number | `336` | Age in hours before execution data is deleted. | | `EXECUTIONS_DATA_PRUNE_MAX_COUNT` | Number | `10000` | Maximum number of executions to keep, `0` = no limit. | | `NODES_EXCLUDE` | Array | - | Nodes not to load (e.g., security risks). | | `NODES_INCLUDE` | Array | - | Nodes to load. | | `N8N_TEMPLATES_ENABLED` | Boolean | `true` | Enable or disable workflow templates. | | `N8N_TEMPLATES_HOST` | String | `https://api.n8n.io` | Custom workflow template library endpoint. | ## Backend Hooks Define external hooks that n8n executes for specific operations. ### Available Hooks | Hook | Arguments | Description | |-----------------------|-----------------------------------|---------------------------------------------------------| | `credentials.create` | `[credentialData: ICredentialsDb]` | Before new credentials are created. | | `credentials.delete` | `[id: credentialId]` | Before credentials are deleted. | | `credentials.update` | `[credentialData: ICredentialsDb]` | Before existing credentials are saved. | | `frontend.settings` | `[frontendSettings: IN8nUISettings]` | Called on n8n startup for modifying frontend data. | | `n8n.ready` | `[app: App]` | Once n8n is ready, for custom API registration. | | `n8n.stop` | | When n8n process is stopped. | | `oauth1.authenticate` | `[oAuthOptions: clientOAuth1.Options, oauthRequestData: {oauth_callback: string}]` | Before OAuth1 authentication. | | `oauth2.callback` | `[oAuth2Parameters: {...}]` | In an OAuth2 callback, to overwrite callback URL. | | `workflow.activate` | `[workflowData: IWorkflowDb]` | Before a workflow gets activated. | | `workflow.create` | `[workflowData: IWorkflowBase]` | Before a new workflow gets created. | ### Registering Hooks Set hooks by registering a hook file with the environment variable `EXTERNAL_HOOK_FILES`. Example: ```shell EXTERNAL_HOOK_FILES=/data/hook.js ``` ### Backend Hook Files Format of hook files: ```javascript module.exports = { "frontend": { "settings": [ async function (settings) { settings.oauthCallbackUrls.oauth1 = 'https://n8n.example.com/oauth1/callback'; } ] }, "workflow": { "activate": [ async function (workflowData) { const activeWorkflows = await this.dbCollections.Workflow.count({ active: true }); if (activeWorkflows > 1) { throw new Error('Active workflow limit reached.'); } } ] } }; ``` ## Frontend External Hooks Define hooks in the frontend code that n8n executes for specific operations. ### Available Hooks | Hook | Description | |---------------------------------------|-----------------------------------------------------------| | `credentials.create` | Called when a new credential is created. | | `credentialsEdit.credentialTypeChanged` | Called when an existing credential's type changes. | | `workflow.afterUpdate` | When an existing workflow is updated. | ### Registering Frontend Hooks Add a script tag in `editor-ui/public/index.html`: ```html ``` ### Frontend Hook Files Format for frontend external hook files: ```javascript window.n8nExternalHooks = { nodeView: { mount: [ function (store, meta) { // do something }, ] } }; ``` ### Frontend Hook Functions Each hook function can be invoked with arguments such as `store` (the Vuex store object) and `metadata` (hook data). ---------------------------------------- # Deployment ## User Data n8n recommends storing user data using [Rook](https://rook.io/). In case of server downtime, a new instance should start on another machine using the same data, negating the need for backups except in catastrophic failure or user account reactivation within the retention period (two weeks for n8n Cloud). ## Backups Create nightly backups by attaching another container and copying all data to this second container to minimize RAM usage and server load. ## Restarting If your instance is down or restarting, missed executions (e.g., Cron or Webhook nodes) are not recoverable. For 100% uptime, build a proxy in front caching the data. ---------------------------------------- # Workflow Management in Embed ## Overview When managing an embedded n8n deployment across multiple users, you have two options for running similar workflows: - **Create a workflow for each user**: - Pros: No limitations on workflow triggers. - Cons: Requires managing multiple workflows. - **Create a single workflow that takes user credentials**: - Pros: Simplified management (only one workflow to change). - Cons: Your product must call the workflow to run it. **Warning**: The APIs referenced are subject to change. Check for functionality with each version upgrade. ## Workflow per User ### Steps to Follow 1. **Obtain user credentials**: Capture all credentials for any required node/service. 2. **Create user credentials**: Set up credentials in n8n. 3. **Create the workflow**: Best practice is to duplicate a base workflow for new users. ### 1. Obtain User Credentials Credentials needed depend on the specific workflow. ### 2. Create User Credentials #### Using the Editor UI 1. Select **Credentials** > **New**. 2. Choose the **Credential type** (e.g., Airtable). 3. Enter corresponding credential details and select associated nodes. 4. Click **Create** to save. #### Using the API Endpoint to create credentials: ``` POST https:///rest/credentials ``` Request body example: ```json { "name":"MyAirtable", "type":"airtableApi", "nodesAccess":[ { "nodeType":"n8n-nodes-base.airtable" } ], "data":{ "apiKey":"q12we34r5t67yu" } } ``` Response includes the ID of the new credentials. ### 3. Create the Workflow 1. Duplicate the base workflow using the Editor UI or API. 2. Update nodes to use the respective user’s credentials. #### Using the Editor UI 1. Open the template workflow. 2. Select **Workflows** > **Duplicate** and name the new workflow. 3. Update the nodes to use user-specific credentials and activate the workflow. #### Using the API 1. Fetch JSON of the template workflow: ``` GET https:///rest/workflows/ ``` 2. Create a new workflow using the updated JSON: ``` POST https:///rest/workflows ``` 3. Activate the new workflow using: ``` PATCH https:///rest/workflows/ ``` Include `{"active": true}` in the JSON payload. ## Single Workflow ### Steps to Implement 1. **Obtain credentials**: Same as above. 2. **Create user credentials**: Same as above. 3. **Create the workflow**: - This needs to be triggered by a **Webhook** node. - Incoming webhook must contain user credentials. ### Call the Workflow To execute the workflow for any user, call the webhook providing necessary credentials and parameters. ### Important Notes - Ensure the production URL is used for the Webhook node. - Use [Webhook node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/) for configuring webhook. ---------------------------------------- # Prerequisites ## Feature Availability Embed requires an embed license. ## Component Requirements | Component | Sizing | Supported | | --- | --- | --- | | CPU/vCPU | Minimum 10 CPU cycles, scaling as needed | Any public or private cloud | | Database | 512 MB - 4 GB SSD | SQLite or PostgreSQL | | Memory | 320 MB - 2 GB | | ## CPU Considerations n8n isn't CPU intensive; smaller instances from providers such as AWS and GCP are generally sufficient. Prioritize memory requirements when planning your infrastructure. ## Database Considerations n8n uses its database to store credentials, past executions, and workflows. The default is SQLite if no database exists. - Recommend dedicated database instances to avoid dependencies and performance issues. - For PostgreSQL: The database must exist, and the user must have full permissions on all tables. ### Best Practices - Use SSD storage. - Ensure database volumes are persisted in containerized cloud environments. - Avoid using the `tablePrefix` configuration option in Postgres. - Monitor changelogs and revert migrations if downgrading. - Implement basic database security measures like IP allow lists and backups. ## Memory Considerations An n8n instance typically requires minimal memory (~100MB at idle). Memory requirements vary based on workflows and data processed. The Code node can create data copies that may consume additional resources when handling large files. ---------------------------------------- # White Labelling ## Feature Availability - Embed requires an embed license. ## Prerequisites - Required tools on the development machine: - Git - Node.js and npm (minimum version Node 18.17.0) ### Repository Setup 1. Create a fork of [n8n's repository](https://github.com/n8n-io/n8n) and clone your new repository. ```bash git clone https://github.com//n8n.git n8n cd n8n ``` 2. Install dependencies, build, and start n8n. ```bash npm install npm run build npm run start ``` ## Development Process - Use `npm run dev` for automatic rebuilding and restarting while developing. ## Theme Colors - Customize theme colors in: - [packages/design-system/src/css/_tokens.scss](https://github.com/n8n-io/n8n/blob/master/packages/design-system/src/css/_tokens.scss) - [packages/design-system/src/css/_tokens.dark.scss](https://github.com/n8n-io/n8n/blob/master/packages/design-system/src/css/_tokens.dark.scss) Example of changing primary color: ```scss @mixin theme { --color-primary-h: 204; --color-primary-s: 100%; --color-primary-l: 50%; } ``` ## Theme Logos - Change logo assets in: - [packages/editor-ui/public](https://github.com/n8n-io/n8n/tree/master/packages/editor-ui/public) - Files to replace: - favicon-16x16.png - favicon-32x32.png - favicon.ico - n8n-logo.svg - n8n-logo-collapsed.svg - n8n-logo-expanded.svg ### SCSS Customization Customize SCSS styles in: - [MainSidebar.vue](https://github.com/n8n-io/n8n/blob/master/packages/editor-ui/src/components/MainSidebar.vue) ```scss .logoItem { display: flex; justify-content: space-between; height: $header-height; line-height: $header-height; margin: 0 !important; border-radius: 0 !important; border-bottom: var(--border-width-base) var(--border-style-base) var(--color-background-xlight); cursor: default; &:hover, &:global(.is-active):hover { background-color: initial !important; } * { vertical-align: middle; } .icon { height: 18px; position: relative; left: 6px; } } ``` ## Text Localization - Modify text occurrences in: - [packages/editor-ui/src/plugins/i18n/locales/en.json](https://github.com/n8n-io/n8n/blob/master/packages/editor-ui/src/plugins/i18n/locales/en.json) Example of adding a brand name in localization file: ```json { "_brand.name": "My Brand", "about.aboutN8n": "About @:_brand.name", "about.n8nVersion": "@:_brand.name Version" } ``` ## Window Title Customization - Edit window title in: - [packages/editor-ui/index.html](https://github.com/n8n-io/n8n/blob/master/packages/editor-ui/index.html) - [packages/editor-ui/src/components/mixins/titleChange.ts](https://github.com/n8n-io/n8n/blob/master/packages/editor-ui/src/components/mixins/titleChange.ts) Example for changing the title in `index.html`: ```html My Brand - Workflow Automation ``` Example for changing the title in `titleChange.ts`: ```javascript $titleSet(workflow: string, status: WorkflowTitleStatus) { // replace n8n prefix window.document.title = `My Brand - ${icon} ${workflow}`; }, $titleReset() { // replace n8n prefix document.title = `My Brand - Workflow Automation`; }, ``` ---------------------------------------- # Workflow Templates ## Feature Availability Embed requires an embed license. n8n provides a library of workflow templates. When embedding n8n, you can: - Continue to use n8n's workflow templates library (default behavior) - Disable workflow templates - Create your own workflow templates library ## Disable Workflow Templates Set the following environment variable: ```bash N8N_TEMPLATES_ENABLED=false ``` ## Use Your Own Workflow Templates Library Set the following environment variable: ```bash N8N_TEMPLATES_HOST= ``` ## Endpoints Your API must provide the same endpoints and data structure as n8n's. The endpoints are: | Method | Path | | --- | --- | | GET | /templates/workflows/ `` | | GET | /templates/search | | GET | /templates/collections/ `` | | GET | /templates/collections | | GET | /templates/categories | | GET | /health | ## Query Parameters The `/templates/search` endpoint accepts the following query parameters: | Parameter | Type | Description | | --- | --- | --- | | `page` | integer | The page of results to return | | `rows` | integer | The maximum number of results to return per page | | `category` | comma-separated list of strings | The categories to search within | | `search` | string | The search query | The `/templates/collections` endpoint accepts the following query parameters: | Parameter | Type | Description | | --- | --- | --- | | `category` | comma-separated list of strings | The categories to search within | | `search` | string | The search query | ## Data Schema ### Workflow Item Data Schema ```json { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Generated schema for Root", "type": "object", "properties": { "id": { "type": "number" }, "name": { "type": "string" }, "totalViews": { "type": "number" }, "price": {}, "purchaseUrl": {}, "recentViews": { "type": "number" }, "createdAt": { "type": "string" }, "user": { "type": "object", "properties": { "username": { "type": "string" }, "verified": { "type": "boolean" } }, "required": [ "username", "verified" ] }, "nodes": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "number" }, "icon": { "type": "string" }, "name": { "type": "string" }, "codex": { "type": "object", "properties": { "data": { "type": "object", "properties": { "details": { "type": "string" }, "resources": { "type": "object", "properties": { "generic": { "type": "array", "items": { "type": "object", "properties": { "url": { "type": "string" }, "icon": { "type": "string" }, "label": { "type": "string" } }, "required": [ "url", "label" ] } }, "primaryDocumentation": { "type": "array", "items": { "type": "object", "properties": { "url": { "type": "string" } }, "required": [ "url" ] } } }, "required": [ "primaryDocumentation" ] }, "categories": { "type": "array", "items": { "type": "string" } }, "nodeVersion": { "type": "string" }, "codexVersion": { "type": "string" } }, "required": [ "categories" ] } } }, "group": { "type": "string" }, "defaults": { "type": "object", "properties": { "name": { "type": "string" }, "color": { "type": "string" } }, "required": [ "name" ] }, "iconData": { "type": "object", "properties": { "icon": { "type": "string" }, "type": { "type": "string" }, "fileBuffer": { "type": "string" } }, "required": [ "type" ] }, "displayName": { "type": "string" }, "typeVersion": { "type": "number" }, "nodeCategories": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "number" }, "name": { "type": "string" } }, "required": [ "id", "name" ] } } }, "required": [ "id", "icon", "name", "codex", "group", "defaults", "iconData", "displayName", "typeVersion" ] } } }, "required": [ "id", "name", "totalViews", "price", "purchaseUrl", "recentViews", "createdAt", "user", "nodes" ] } ``` ### Category Item Data Schema ```json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "id": { "type": "number" }, "name": { "type": "string" } }, "required": [ "id", "name" ] } ``` ### Collection Item Data Schema ```json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "id": { "type": "number" }, "rank": { "type": "number" }, "name": { "type": "string" }, "totalViews": {}, "createdAt": { "type": "string" }, "workflows": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "number" } }, "required": [ "id" ] } }, "nodes": { "type": "array", "items": {} } }, "required": [ "id", "rank", "name", "totalViews", "createdAt", "workflows", "nodes" ] } ``` ---------------------------------------- # External Secrets ## Feature Availability - External secrets are available on Enterprise Self-hosted and Enterprise Cloud plans. - Supports: AWS Secrets Manager, Azure Key Vault, GCP Secrets Manager, Infisical, HashiCorp Vault. - Not supported: HashiCorp Vault Secrets. ## Connect n8n to Your Secrets Store ### Secret Naming Conventions - Only supports alphanumeric characters (`a-z`, `A-Z`, `0-9`) and underscores. - Only plaintext values for secrets are supported. ### Setup Steps 1. Go to **Settings** > **External Secrets** in n8n. 2. Select **Set Up** for your provider. 3. Enter credentials depending on the provider: - **Azure Key Vault**: Vault Name, Tenant ID, Client ID, Client Secret. - **AWS Secrets Manager**: Access Key ID, Secret Access Key, Region. - IAM Policy for access to all secrets: ```json { "Version": "2012-10-17", "Statement": [ { "Sid": "AccessAllSecrets", "Effect": "Allow", "Action": [ "secretsmanager:ListSecrets", "secretsmanager:BatchGetSecretValue", "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "*" } ] } ``` - Policy for specific secrets: ```json { "Version": "2012-10-17", "Statement": [ { "Sid": "ListingSecrets", "Effect": "Allow", "Action": [ "secretsmanager:ListSecrets", "secretsmanager:BatchGetSecretValue" ], "Resource": "*" }, { "Sid": "RetrievingSecrets", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": [ "arn:aws:secretsmanager:us-west-2:123456789000:secret:n8n*" ] } ] } ``` - **HashiCorp Vault**: Vault URL, Authentication Method, Namespace (optional). Refer to the relevant authentication method documentation. - **Infisical**: Service Token. Ensure to select the correct environment when creating your token. - **Google Cloud Platform**: Service Account Key (JSON) for a service account with roles: `Secret Manager Secret Accessor`, `Secret Manager Secret Viewer`. 4. **Save** configuration. 5. Enable the provider. ## Use Secrets in n8n Credentials To access a secret: 1. Create a new or edit existing credential. 2. Hover on the desired field, select **Expression**. 3. Enter the expression for the secret: ```plaintext {{ $secrets.. }} ``` ## Using External Secrets with n8n Environments Different environments can be connected to different vaults/projects using external secrets for credential management. ## Using External Secrets in Projects You must be an instance owner or admin to use external secrets in an RBAC project. ## Troubleshooting - Infisical version changes may affect connectivity. Report issues as needed. - Only set external secrets on credentials owned by instance owners or admins to ensure proper resolution in production. ---------------------------------------- Built with ❤️ by Synaptiv AI ---------------------------------------- ## Flow Logic in n8n n8n allows representation of complex logic in workflows, including: - **Splitting with Conditionals** - **Merging Data** - **Looping** - **Waiting** - **Sub-Workflows** - **Error Handling** - **Execution Order in Multi-Branch Workflows** ### Core Nodes When building logic in n8n, use the following core nodes: - **Splitting:** - [IF](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/) - [Switch](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/) - **Merging:** - [Merge](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/) - [Compare Datasets](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.comparedatasets/) - [Code](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/) - **Looping:** - [IF](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/) - [Loop Over Items](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/) - **Waiting:** - [Wait](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/) - **Sub-Workflows:** - [Execute Workflow](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow/) - [Execute Workflow Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflowtrigger/) - **Error Handling:** - [Stop And Error](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.stopanderror/) - [Error Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/) ---------------------------------------- # Error Handling in n8n ## Core Concepts Error handling is a vital part of designing flow logic in n8n. An error workflow allows controlling responses to workflow execution failures effectively. ## Investigating Errors To investigate failed executions, consider the following options: - Review your Executions: - Single Workflow: [Single Workflow Executions](https://docs.n8n.io/workflows/executions/single-workflow-executions/) - All Workflows: [All Executions](https://docs.n8n.io/workflows/executions/all-executions/) - Load Data from Previous Execution: [Debug](https://docs.n8n.io/workflows/executions/debug/) - Enable [Log Streaming](https://docs.n8n.io/log-streaming/). ## Create and Set an Error Workflow To set an error workflow: 1. Create a new workflow, starting with the [Error Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/). 2. Name the workflow, e.g., `Error Handler`. 3. Save the workflow. 4. In the workflow where you want to invoke this error workflow: - Navigate to **Options** > **Settings**. - In **Error workflow**, select the created workflow (Error Handler). - Save the settings. This error workflow will run when the associated workflow encounters an error. ## Error Data The default error data received by the Error Trigger includes: ```json { "execution": { "id": "231", "url": "https://n8n.example.com/execution/231", "retryOf": "34", "error": { "message": "Example Error Message", "stack": "Stacktrace" }, "lastNodeExecuted": "Node With Error", "mode": "manual" }, "workflow": { "id": "1", "name": "Example Workflow" } } ``` The following details may vary based on the context of the error: - `execution.id` and `execution.url` are absent if the error is in the trigger node of the main workflow. - `execution.retryOf` is only present when the execution is a retry of a failed execution. In cases where errors arise from the trigger node: ```json { "trigger": { "error": { "context": {}, "name": "WorkflowActivationError", "cause": { "message": "", "stack": "" }, "timestamp": 1654609328787, "message": "", "node": {} }, "mode": "trigger" }, "workflow": { "id": "", "name": "" } } ``` ## Cause a Workflow Execution Failure using Stop And Error To enforce failure conditions and trigger the error workflow, you can use the [Stop And Error](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.stopanderror/) node in your workflow. This is useful for scenarios such as erroneous node settings or memory overflow. --- This document provides comprehensive coverage on error handling in n8n workflows, focusing on key elements like error workflow setup, error data structure, and failure handling mechanisms. ---------------------------------------- # Execution Order in Multi-Branch Workflows n8n's node execution order is determined based on the version of n8n used: - **Workflows before version 1.0:** Executes the first node of each branch, then the second node of each branch, and so on. - **Workflows in version 1.0 and above:** Executes each branch in turn, completing one branch before starting another. The order of branches is determined by their position on the canvas, from topmost to bottommost. If branches are at the same height, the leftmost branch executes first. ## Configuration Instructions You can change the execution order in your workflow settings. ---------------------------------------- # Looping in n8n Looping allows the processing of multiple items or repeated actions within n8n workflows. Nodes process inputs as individual items and produce output without requiring explicit loops. ## Executing nodes once To prevent a node from processing all incoming items, toggle the **Execute Once** parameter in the **Settings** tab. This is useful for handling multiple items but only needing to act on the first. ## Creating loops While n8n usually automatically handles iteration for incoming items, there are cases where manual loops are necessary. Refer to the “Node exceptions” section for nodes requiring explicit loops. ### Loop until a condition is met Connect the output of one node to the input of a previous node. Add an [IF](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/) node to control when to stop looping. ### Loop until all items are processed Use the [Loop Over Items](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/) node to process each item individually. Set **Batch Size** to `1` for single item processing. This node batches data for processing and avoids API rate limits. ## Node exceptions Certain nodes and operations require manual loops: - **CrateDB**: Executes once for `insert` and `update`. - **Code**: In **Run Once for All Items** mode processes all items based on code snippet. - **Execute Workflow**: In **Run Once for All Items** mode. - **HTTP Request**: Requires manual pagination handling. - **Microsoft SQL**: Executes once for `insert`, `update`, and `delete`. - **MongoDB**: Executes once for `insert` and `update`. - **QuestDB**: Executes once for `insert`. - **Redis**: Executes only once for incoming data. - **RSS Read**: Executes once for the requested URL. - **TimescaleDB**: Executes once for `insert` and `update`. ---------------------------------------- # Merging Data in n8n Merging brings multiple data streams together using various nodes based on workflow requirements. ## Node Types for Merging Data - **Merge Node**: Combine data from different sources into one. - **Code Node**: Merge data from multiple executions of a node or multiple nodes for complex scenarios. - **Compare Datasets Node**: Compare, merge, and output data streams based on the comparison. ## Merge Data from Different Data Streams If your workflow splits, use the Merge node to combine the separate streams back into one. The Merge node documentation provides details on each of the merge operations. ## Merge Data from Different Nodes You can use the Merge node to combine data generated by multiple nodes even if the workflow hasn't split into separate streams. ## Merge Data from Multiple Node Executions Use the Code node to merge data from multiple node executions, useful in Looping scenarios. This applies when a node executes multiple times during a single workflow execution. ## Compare, Merge, and Split Again The Compare Datasets node compares data streams before merging them and outputs up to four different data streams. ---------------------------------------- # Splitting Workflows with Conditional Nodes Splitting uses the **IF** or **Switch** nodes. It transforms a single-branch workflow into a multi-branch workflow, which is essential for representing complex logic in n8n. ## Nodes 1. **IF Node**: A node used to evaluate a condition and execute different branches based on whether the condition is true or false. 2. **Switch Node**: Allows for multiple condition checks, branching the workflow based on the evaluated condition. ## Workflow Example - A user submits a bug which begins a workflow. - If the issue is marked as urgent, the workflow branches accordingly. - Additional branching can occur based on the user's support plan. Refer to the specific documentation for detailed usage: - [IF Node Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/) - [Switch Node Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/) ---------------------------------------- # Sub-workflows You can call one workflow from another workflow, allowing you to build modular workflows. Creating sub-workflows uses the **Execute Workflow** and **Execute Sub-workflow Trigger** nodes. ## Set up and use a sub-workflow ### Create the sub-workflow 1. Create a new workflow. 2. Optionally create a sub-workflow from an existing parent workflow using the **Execute Sub-workflow** node, select **Database** and **From list** options, then select **Create a sub-workflow**. 3. Configure calls to the sub-workflow: 1. Select the **Options** menu > **Settings**, and change the **This workflow can be called by** setting. 2. Add the **Execute Sub-workflow** trigger node. 3. Set the **Input data mode**: - **Define using fields below**. - **Define using JSON example**. - **Accept all data**. 4. Add other nodes as needed and save the sub-workflow. **Note:** Sub-workflow must not contain errors; load data into the sub-workflow before building. 1. Create the sub-workflow and add the **Execute Sub-workflow Trigger**. 2. Set the node's **Input data mode**. 3. In the sub-workflow settings, set **Save successful production executions** to **Save**. 4. Run the parent workflow and follow steps to load data from previous executions. 5. Adjust the **Input data mode** as necessary. ### Call the sub-workflow 1. Open the workflow where the sub-workflow will be called. 2. Add the **Execute Sub-workflow** node. 3. Set the sub-workflow you want to call by ID, local file, JSON parameter, or URL. 4. Fill in the required input items. 5. Save the workflow. When executed, data will be sent to the sub-workflow. You can follow the execution flow between parent and sub-workflows. ## How data passes between workflows 1. The **Execute Sub-workflow** node passes data to the **Execute Sub-workflow Trigger** node. 2. The last node of the sub-workflow sends data back to the parent workflow's **Execute Sub-workflow** node. ## Sub-workflow conversion Refer to sub-workflow conversion for how to divide existing workflows into sub-workflows. ---------------------------------------- # Waiting Node in n8n **Core Concept** The Waiting feature allows pausing a workflow during execution. The workflow can resume from the same point using the same data, which is beneficial for rate limiting or waiting for external events. It can wait for a specified duration or until a webhook triggers. **Node Details** - **Node Name**: Wait - **Functionality**: Used to pause a workflow mid-execution. - **Reference**: For more usage details, refer to the [Wait Node Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/). **Usage Example** n8n provides a workflow template showcasing [Rate limiting and waiting for external events](https://n8n.io/workflows/1749-rate-limiting-and-waiting-for-external-events/). ---------------------------------------- # n8n Glossary ## AI agent AI agents are systems capable of responding to requests, making decisions, and performing tasks for users using large language models (LLMs). ## AI chain AI chains interact with LLMs in sequences of calls without persistent memory, making them unsuitable for referencing previous context. ## AI embedding Embeddings are numerical representations of data using vectors, allowing AI to interpret complex data and relationships. ## AI groundedness Groundedness measures how accurately an AI model's responses reflect source information, with grounded responses based on source documents. ## AI reranking Reranking refines the order of documents to improve search relevance, used in RAG and other applications. ## AI memory Memory in AI allows tools to persist message context across interactions, facilitating continuous conversations without re-sending context. ## AI retrieval-augmented generation (RAG) RAG provides LLMs access to external information, retrieving documents to enhance responses with up-to-date knowledge. ## AI tool In AI, a tool is an additional resource the AI can use for specific functionality when responding to requests. ## AI vector store Vector stores are databases for storing numerical representations of information called embeddings. ## API APIs (Application Programming Interfaces) provide programmatic access to data and functionality, simplifying software interactions with external systems. ## Canvas (n8n) The canvas is the main interface in n8n for building workflows by adding and connecting nodes. ## Cluster node (n8n) Cluster nodes in n8n are groups of nodes that work together, consisting of a root node and sub nodes to extend functionality. ## Credential (n8n) Credentials store authentication information (username, password, API key, OAuth secrets) for connecting with apps and services. ## Data pinning (n8n) Data pinning freezes the output data of a node temporarily during workflow development to ensure predictable data without repeated requests. ## Editor (n8n) The n8n editor UI allows creating and managing workflows, with a canvas for composing and panels for accessing UI features. ## Entitlement (n8n) Entitlements grant access to plan-restricted features for n8n instances. Floating entitlements can be reassigned among instances. ## Evaluation (n8n) Evaluation tags and organizes execution history for workflow performance comparison over time, particularly for AI-centered workflows. ## Expression (n8n) Expressions enable dynamic population of node parameters using JavaScript code, allowing values from previous nodes or workflows. ## LangChain LangChain is an AI-development framework for working with LLMs, providing a system for linking components to build applications. ## Large language model (LLM) LLMs are AI models designed for natural language processing, trained on large data sets to develop probabilistic language models. ## Node (n8n) Nodes are components in n8n that define workflow execution, allow data manipulation, and connect with external services. ## Project (n8n) Projects organize workflows, variables, and credentials into groups for easier management and collaboration. ## Root node (n8n) A root node defines the main functionality of a cluster node, with sub nodes extending its capabilities. ## Sub node (n8n) Sub nodes in cluster nodes extend the root node's functionality, providing access to specific services or processing capabilities. ## Template (n8n) Templates are pre-built workflows available for import, requiring credential input and configuration adjustments. ## Trigger node (n8n) A trigger node executes the workflow based on specific conditions, essential for all production workflows. ## Workflow (n8n) A workflow in n8n is a collection of nodes that automate a process, executing sequentially upon trigger conditions. ---------------------------------------- # Contribution Guidelines for n8n ## Share Workflows When sharing workflows in the community forum for debugging, use code blocks: ``` ```json // your JSON workflow here ``` ``` ## Contribute a Workflow Template You can submit your workflows to n8n's template library. Refer to the [n8n Creator hub](https://www.notion.so/n8n/n8n-Creator-hub-7bd2cbe0fce0449198ecb23ff4a2f76f) for information on how to submit templates. ## Build a Node Create an integration for a third-party service. Refer to the documentation on [node creation](https://docs.n8n.io/integrations/creating-nodes/overview/) for guidance on creating and publishing a community node. ## Code Contribution To contribute to n8n's codebase: - Fix reported [issues](https://github.com/n8n-io/n8n/issues) on GitHub. - Follow the [CONTRIBUTING guide](https://github.com/n8n-io/n8n/blob/master/CONTRIBUTING.md) to set up your development environment. - Add functionality to existing third-party integrations or new features to n8n. ## Documentation Contribution Contribute to n8n documentation by documenting nodes or fixing issues. - The documentation repository is [here](https://github.com/n8n-io/n8n-docs). - Contribution guidelines can be found [here](https://github.com/n8n-io/n8n-docs/blob/master/CONTRIBUTING.md). ## Blogging Contribution You can submit articles for the n8n blog: 1. Email your idea to [marketing@n8n.io](mailto:marketing@n8n.io) with the subject "Blog contribution: [Your Topic]." 2. Submit a draft in Google Docs following the [style guide](https://www.notion.so/97dc73436a624933b75ddc941a361b70?pvs=21). Include any example workflows at the end. 3. Provide a second Google Doc for author credit. ## Referral Program Refer a candidate for open positions: 1. Review job descriptions and requirements. 2. Email [Jobs at n8n](mailto:jobs@n8n.io) with the subject "Employee referral - [job title]" and details about the candidate. 3. The referral must apply through the [careers page](https://n8n.io/careers). ## Important Notes - Consider participating in community forums to support other members. - Contributions in various forms—code, documentation, workflows, and blog posts—are valuable and appreciated. ---------------------------------------- # Help with n8n ## Support Options - **Forum**: Ask for support in the n8n community forum for answers from both the n8n support team and community members. - **Email Support**: For Cloud instance issues or enterprise customer support, contact [help@n8n.io](mailto:help@n8n.io). ## About n8n Debug Tool To provide debugging information while seeking help: 1. Open the left-side panel. 2. Select **Help**. 3. Select **About n8n**. 4. The **About n8n** modal opens with current instance information. 5. Select **Copy debug information** to copy and paste into your forum post or support email. ### Manual Information for Earlier Versions If you do not see the **Copy debug** option (available from version 1.49.0), manually provide the following information in your support request: - n8n version - Database type - n8n EXECUTIONS_PROCESS setting - How n8n is running (Docker, npm, n8n cloud) - Operating system ---------------------------------------- # Self-hosting n8n ## Installation and Server Setup - Install n8n on any platform using **npm** or **Docker**. ## Configuration - Configure n8n using **environment variables**. ## Users and Authentication - Set up **user authentication** for your n8n instance. ## Scaling - Manage data, modes, and processes for **scaling n8n**. ## Securing n8n - Set up **SSL**, **SSO**, or **2FA** to secure your n8n instance. ## Self-hosting Knowledge Prerequisites - Requires technical knowledge in: - Setting up and configuring servers and containers - Managing application resources and scaling - Securing servers and applications - Configuring n8n ## Best Practices - Recommended for expert users to avoid data loss, security issues, and downtime. If inexperienced, consider using n8n Cloud. ---------------------------------------- # Database Structure ## Database and Query Technology n8n uses SQLite as the default database. The structure is similar across other databases but data types may differ. n8n uses TypeORM for queries and migrations. DBeaver can be used to inspect the n8n database. ## Tables The following tables are created during setup in n8n: ### auth_identity Stores details of external authentication providers for SAML. ### auth_provider_sync_history Stores the history of a SAML connection. ### credentials_entity Stores credentials used for authentication with integrations. ### event_destinations Contains configurations for log streaming destinations. ### execution_data Contains the workflow at runtime and execution data. ### execution_entity Stores saved workflow executions. ### execution_metadata Stores custom execution data. ### installed_nodes Lists community nodes installed in the n8n instance. ### installed_packages Details npm community node packages installed in the n8n instance. ### migrations Logs all database migrations. ### project Lists projects in the n8n instance. ### project_relation Describes the relationship between users and projects, including user role types. ### role Not currently used; for future work on custom roles. ### settings Records custom instance settings which cannot be controlled via environment variables. Includes instance owner setup, user management setup, and license key. ### shared_credentials Maps credentials to users. ### shared_workflow Maps workflows to users. ### tag_entity Lists all workflow tags created in the n8n instance. ### user Contains user data. ### variables Stores variables. ### webhook_entity Records active webhooks in the n8n instance workflows. ### workflow_entity Contains saved workflows in the n8n instance. ### workflow_history Stores previous versions of workflows. ### workflow_statistics Counts workflow IDs and their status. ### workflows_tags Maps tags to workflows. ---------------------------------------- # Architecture n8n's underlying architecture is essential for: - Embedding n8n - Customizing n8n's default databases ### Core Concepts n8n is a workflow automation tool that allows users to integrate various services and automate tasks. Understanding its architecture is crucial for effective customization and embedding. ### Configuration Instructions - **Custom Databases:** You can configure n8n to use a database of your choice. This allows for greater control over data management and storage options. ### Best Practices - Familiarize yourself with n8n's architecture to optimize embedding and customization processes. Engaging with the community can also provide insights and clarifications regarding specific use cases. ---------------------------------------- # CLI Commands for n8n n8n includes a CLI (command line interface) for performing actions such as starting workflows, exporting, and importing workflows and credentials. ## Running CLI Commands ### npm Use the `n8n` command directly. ### Docker Execute within your Docker container: ```bash docker exec -u node -it ``` ## Start a Workflow Execute a saved workflow by its ID: ```bash n8n execute --id ``` ## Change the Active Status of a Workflow Change the active status of a workflow by its ID: ```bash n8n update:workflow --id= --active=false n8n update:workflow --id= --active=true ``` Set the active status for all workflows: ```bash n8n update:workflow --all --active=false n8n update:workflow --all --active=true ``` ## Export Workflows and Credentials ### Command Flags - `--help`: Help prompt. - `--all`: Exports all workflows/credentials. - `--backup`: Sets `--all --pretty --separate` for backups (optionally set `--output`). - `--id`: The ID of the workflow to export. - `--output`: Outputs file name or directory if using separate files. - `--pretty`: Formats the output for readability. - `--separate`: Exports one file per workflow (requires directory with `--output`). - `--decrypted`: Exports credentials in plain text. ### Workflows Export all workflows to standard output: ```bash n8n export:workflow --all ``` Export a workflow by its ID: ```bash n8n export:workflow --id= --output=file.json ``` Export all workflows to a directory: ```bash n8n export:workflow --all --output=backups/latest/file.json ``` Use the backup flag: ```bash n8n export:workflow --backup --output=backups/latest/ ``` ### Credentials Export all credentials to standard output: ```bash n8n export:credentials --all ``` Export credentials by their ID: ```bash n8n export:credentials --id= --output=file.json ``` Export all credentials to a directory: ```bash n8n export:credentials --all --output=backups/latest/file.json ``` Use the backup flag: ```bash n8n export:credentials --backup --output=backups/latest/ ``` Export all credentials in plain text: ```bash n8n export:credentials --all --decrypted --output=backups/decrypted.json ``` ## Import Workflows and Credentials ### Available Flags - `--help`: Help prompt. - `--input`: Input file name or directory for `--separate`. - `--projectId`: Import to a specific project (not used with `--userId`). - `--separate`: Imports `*.json` files from directory provided by `--input`. - `--userId`: Import to a specific user (not used with `--projectId`). ### Workflows Import a workflow from a specific file: ```bash n8n import:workflow --input=file.json ``` Import all workflow files from a directory: ```bash n8n import:workflow --separate --input=backups/latest/ ``` ### Credentials Import credentials from a specific file: ```bash n8n import:credentials --input=file.json ``` Import all credentials files from a directory: ```bash n8n import:credentials --separate --input=backups/latest/ ``` ## License Management ### Clear License Reset n8n to default features: ```bash n8n license:clear ``` ### Display License Info Show existing license information: ```bash n8n license:info ``` ## User Management Reset user management: ```bash n8n user-management:reset ``` ### Disable MFA for a User Disable MFA for users: ```bash n8n mfa:disable --email=johndoe@example.com ``` ### Disable LDAP Reset LDAP settings: ```bash n8n ldap:reset ``` ## Uninstall Community Nodes and Credentials ### Command Flags - `--help`: Show CLI help. - `--credential`: The credential type. - `--package`: Package name of the community node. - `--uninstall`: Uninstalls the node. - `--userId`: User ID of the credential owner. ### Nodes Uninstall a community node: ```bash n8n community-node --uninstall --package ``` ### Example Uninstall a specific community node: ```bash n8n community-node --uninstall --package n8n-nodes-evolution-api ``` ### Credentials Uninstall a community node credential: ```bash n8n community-node --uninstall --credential --userId ``` ## Security Audit Run a security audit on your n8n instance: ```bash n8n audit ``` ---------------------------------------- # Community Edition Features The community edition includes almost the complete feature set of n8n, except for the following features: ### Excluded Features - Custom Variables - Environments - External secrets - External storage for binary data - Log streaming (Logging is included) - Multi-main mode (Queue mode is included) - Projects - SSO (SAML, LDAP) - Sharing (workflows, credentials) - Version control using Git - Workflow history (One day available with registration) ### Registered Community Edition You can unlock extra features by registering your n8n community edition with your email to receive a license key. #### Features Unlocked by Registration - Folders: Organize workflows into folders - Debug in editor: Copy and pin execution data when working on a workflow - One day of workflow history: 24 hours of workflow history to revert to previous workflow versions - Custom execution data: Save, find, and annotate execution metadata #### Registration Process To register a new community edition instance, select the option during initial account creation. To register an existing instance: 1. Select the three dots icon in the lower-left corner. 2. Select Settings and then Usage and plan. 3. Select Unlock to enter your email and then select Send me a free license key. 4. Check your email for the account you entered. Once you have a license key, activate it via the link in the license email or through Options > Settings > Usage and plan by selecting Enter activation key. The license will not expire after activation, though unlocked features may change in the future. ---------------------------------------- # Configuration Examples This section contains examples for how to configure n8n to solve particular use cases. ## Isolate n8n Instructions for isolating n8n from other applications. ## Configure the Base URL Instructions for setting a base URL for n8n. ## Configure Custom SSL Certificate Authorities Instructions for configuring custom SSL certificate authorities. ## Set a Custom Encryption Key Instructions for setting a custom encryption key for n8n. ## Configure Workflow Timeouts Instructions for configuring workflow timeouts. ## Specify Custom Nodes Location Instructions for specifying a custom location for nodes. ## Enable Modules in Code Node Instructions for enabling modules in the Code node. ## Set the Timezone Instructions for setting the timezone for n8n. ## Specify User Folder Path Instructions for specifying the path to user folders. ## Configure Webhook URLs with Reverse Proxy Instructions for configuring webhook URLs with reverse proxy. ## Enable Prometheus Metrics Instructions for enabling Prometheus metrics in n8n. ---------------------------------------- # Configure the Base URL for n8n's Front End Access To configure the Base URL for n8n's front end to connect to the back end's REST API, set the `VUE_APP_URL_BASE_API` environmental variable. This configuration is necessary when hosting n8n's front end and back end separately. ## Steps 1. Requires a manual UI build. It cannot be used with the default n8n Docker image, which has the default setting for this variable as `/` (root domain). 2. Set the `VUE_APP_URL_BASE_API` variable as follows: ```bash export VUE_APP_URL_BASE_API=https://n8n.example.com/ ``` ## Reference Refer to the [Environment variables reference](https://docs.n8n.io/hosting/configuration/environment-variables/deployment/) for additional information on this variable. ---------------------------------------- # Specify location for your custom nodes Every user can add custom nodes that get loaded by n8n on startup. The default location is in the subfolder `.n8n/custom` of the user who started n8n. You can define more folders with an environment variable: ``` export N8N_CUSTOM_EXTENSIONS="/home/jim/n8n/custom-nodes;/data/n8n/nodes" ``` Refer to Environment variables reference for more information on this variable. ---------------------------------------- # Configure n8n to use your own certificate authority or self-signed certificate You can add your own certificate authority (CA) or self-signed certificate to n8n. This means you are able to trust a certain SSL certificate instead of trusting all invalid certificates, which is a potential security risk. **Available in version:** 1.42.0 and above. To use this feature, place your certificates in a folder and mount the folder to `/opt/custom-certificates` in the container. ## Docker The examples assume you have a folder called `pki` that contains your certificates. ### Docker CLI When using the CLI, use the `-v` flag: ```bash docker run -it --rm \ --name n8n \ -p 5678:5678 \ -v ./pki:/opt/custom-certificates \ docker.n8n.io/n8nio/n8n ``` ### Docker Compose ```yaml name: n8n services: n8n: volumes: - ./pki:/opt/custom-certificates container_name: n8n ports: - 5678:5678 image: docker.n8n.io/n8nio/n8n ``` Set the correct permissions for the imported certificates after the container is running (assuming `n8n` as the container name): ```bash docker exec --user 0 n8n chown -R 1000:1000 /opt/custom-certificates ``` ---------------------------------------- # Set a custom encryption key n8n creates a random encryption key automatically on the first launch and saves it in the `~/.n8n` folder. This key is used to encrypt the credentials before saving them to the database. If the key isn't present in the settings file, it can be set using an environment variable for a custom key. In queue mode, the encryption key environment variable must be specified for all workers. ## Environment Variable - **Name**: `N8N_ENCRYPTION_KEY` - **Usage**: ```bash export N8N_ENCRYPTION_KEY= ``` Refer to the [Environment variables reference](https://docs.n8n.io/hosting/configuration/environment-variables/deployment/) for more information on this variable. ---------------------------------------- # Configure Workflow Timeout Settings A workflow times out and gets canceled after a specified time (in seconds). If the workflow runs in the main process, a soft timeout happens after the current node finishes. If it runs in its own process, n8n attempts a soft timeout first, then kills the process after waiting for a fifth of the given timeout duration. ## Environment Variables - `EXECUTIONS_TIMEOUT`: Default is `-1`. To set the timeout to one hour: ```bash export EXECUTIONS_TIMEOUT=3600 ``` - `EXECUTIONS_TIMEOUT_MAX`: Set maximum execution time (in seconds) for each workflow individually. To set maximum execution time to two hours: ```bash export EXECUTIONS_TIMEOUT_MAX=7200 ``` For more information on these variables, refer to the [Environment variables reference](https://docs.n8n.io/hosting/configuration/environment-variables/executions/). ---------------------------------------- # Isolate n8n To prevent your n8n instance from connecting to n8n's servers, set the following environment variables to false: ```plaintext N8N_DIAGNOSTICS_ENABLED=false N8N_VERSION_NOTIFICATIONS_ENABLED=false N8N_TEMPLATES_ENABLED=false ``` Unset n8n's diagnostics configuration: ```plaintext EXTERNAL_FRONTEND_HOOKS_URLS= N8N_DIAGNOSTICS_CONFIG_FRONTEND= N8N_DIAGNOSTICS_CONFIG_BACKEND= ``` Refer to the [Environment variables reference](https://docs.n8n.io/hosting/configuration/environment-variables/deployment/) for more information on these variables. ---------------------------------------- # Enable Modules in Code Node The Code node restricts importing modules for security reasons. To lift this restriction for built-in and external modules, set the following environment variables: - `NODE_FUNCTION_ALLOW_BUILTIN`: Allow built-in modules - `NODE_FUNCTION_ALLOW_EXTERNAL`: Allow external modules sourced from the n8n/node_modules directory. External module support is disabled if this variable is not set. ## Environment Variable Examples ```bash # Allows usage of all builtin modules export NODE_FUNCTION_ALLOW_BUILTIN=* # Allows usage of only crypto export NODE_FUNCTION_ALLOW_BUILTIN=crypto # Allows usage of only crypto and fs export NODE_FUNCTION_ALLOW_BUILTIN=crypto,fs # Allow usage of external npm modules export NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash ``` Refer to the [Environment Variables Reference](https://docs.n8n.io/hosting/configuration/environment-variables/nodes/) for more details. ---------------------------------------- # Enable Prometheus Metrics To collect and expose metrics, n8n uses the `prom-client` library. The `/metrics` endpoint is disabled by default but can be enabled using the `N8N_METRICS` environment variable. ## Configuration ```bash export N8N_METRICS=true ``` Refer to the respective Environment Variables (`N8N_METRICS_INCLUDE_*`) for configuring which metrics and labels should be exposed. Both `main` and `worker` instances can expose metrics. ## Queue Metrics To enable queue metrics, set the `N8N_METRICS_INCLUDE_QUEUE_METRICS` environment variable to `true`. You can adjust the refresh rate with `N8N_METRICS_QUEUE_METRICS_INTERVAL`. Queue metrics are only available for the `main` instance in single-main mode. ### Metrics Overview ```plaintext # HELP n8n_scaling_mode_queue_jobs_active Current number of jobs being processed across all workers in scaling mode. # TYPE n8n_scaling_mode_queue_jobs_active gauge n8n_scaling_mode_queue_jobs_active 0 # HELP n8n_scaling_mode_queue_jobs_completed Total number of jobs completed across all workers in scaling mode since instance start. # TYPE n8n_scaling_mode_queue_jobs_completed counter n8n_scaling_mode_queue_jobs_completed 0 # HELP n8n_scaling_mode_queue_jobs_failed Total number of jobs failed across all workers in scaling mode since instance start. # TYPE n8n_scaling_mode_queue_jobs_failed counter n8n_scaling_mode_queue_jobs_failed 0 # HELP n8n_scaling_mode_queue_jobs_waiting Current number of enqueued jobs waiting for pickup in scaling mode. # TYPE n8n_scaling_mode_queue_jobs_waiting gauge n8n_scaling_mode_queue_jobs_waiting 0 ``` ---------------------------------------- # Set the self-hosted instance timezone The default timezone is `America/New_York`. To set a different default timezone, set `GENERIC_TIMEZONE` to the desired value. For example, to set the timezone to Berlin (Germany): ```bash export GENERIC_TIMEZONE=Europe/Berlin ``` Refer to the [Environment variables reference](https://docs.n8n.io/hosting/configuration/environment-variables/timezone-localization/) for more information on this variable. ---------------------------------------- # Specify User Folder Path n8n saves user-specific data such as the encryption key, SQLite database file, and the tunnel ID (if used) in the subfolder `.n8n` of the user who started n8n. You can overwrite the user folder using an environment variable. ## Environment Variable To specify a custom user folder path, set the `N8N_USER_FOLDER` environment variable as follows: ```bash export N8N_USER_FOLDER=/home/jim/n8n ``` Refer to the Environment variables reference for more information on this variable. ---------------------------------------- # Configure n8n Webhooks with Reverse Proxy n8n creates the webhook URL by combining `N8N_PROTOCOL`, `N8N_HOST`, and `N8N_PORT`. If n8n runs behind a reverse proxy, it is necessary to set the webhook URL manually to ensure correct registration with external services. ## Configuration Example ```bash export WEBHOOK_URL=https://n8n.example.com/ ``` Refer to [Environment Variables Reference](https://docs.n8n.io/hosting/configuration/environment-variables/endpoints/) for more information on this variable. ---------------------------------------- # Configuration Methods You can change n8n's settings using environment variables. For a full list of available configurations, see [Environment Variables](https://docs.n8n.io/hosting/configuration/environment-variables/). ## Set Environment Variables by Command Line ### npm Set your desired environment variables in the terminal using the `export` command: ```bash export = ``` ### Docker In Docker, use the `-e` flag from the command line: ```bash docker run -it --rm \ --name n8n \ -p 5678:5678 \ -e N8N_TEMPLATES_ENABLED="false" \ docker.n8n.io/n8nio/n8n ``` ## Set Environment Variables Using a File You can also configure n8n using a configuration file. Only define the values that need to be different from the default in your configuration file. You can use multiple files. ### npm Set the path to the JSON configuration file using the environment variable `N8N_CONFIG_FILES`: ```bash # Bash - Single file export N8N_CONFIG_FILES=//my-config.json # Bash - Multiple files are comma-separated export N8N_CONFIG_FILES=//my-config.json,//production.json # PowerShell - Single file, persist for current user [Environment]::SetEnvironmentVariable('N8N_CONFIG_FILES', '\config.json', 'User') ``` Example file: ```json { "executions": { "saveDataOnSuccess": "none" }, "generic": { "timezone": "Europe/Berlin" }, "nodes": { "exclude": "[\"n8n-nodes-base.executeCommand\",\"n8n-nodes-base.writeBinaryFile\"]" } } ``` ### Docker In Docker, set your environment variables in the `n8n: environment:` element of your `docker-compose.yaml` file: ```yaml n8n: environment: - N8N_TEMPLATES_ENABLED=false ``` ### Keeping Sensitive Data in Separate Files You can append `_FILE` to individual environment variables to provide their configuration in a separate file, enabling you to avoid passing sensitive details using environment variables. Examples include: ```bash CREDENTIALS_OVERWRITE_DATA_FILE=/path/to/credentials_data DB_TYPE_FILE=/path/to/db_type DB_POSTGRESDB_DATABASE_FILE=/path/to/database_name DB_POSTGRESDB_HOST_FILE=/path/to/database_host DB_POSTGRESDB_PORT_FILE=/path/to/database_port DB_POSTGRESDB_USER_FILE=/path/to/database_user DB_POSTGRESDB_PASSWORD_FILE=/path/to/database_password DB_POSTGRESDB_SCHEMA_FILE=/path/to/database_schema DB_POSTGRESDB_SSL_CA_FILE=/path/to/ssl_ca DB_POSTGRESDB_SSL_CERT_FILE=/path/to/ssl_cert DB_POSTGRESDB_SSL_KEY_FILE=/path/to/ssl_key DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED_FILE=/path/to/ssl_reject_unauth ``` Refer to [Environment Variables](https://docs.n8n.io/hosting/configuration/environment-variables/) for details on each variable. ---------------------------------------- # Environment Variables Overview This section lists the environment variables that can be used to change n8n's configuration settings when self-hosting n8n. ## File-based Configuration You can provide a configuration file for n8n. You can also append `_FILE` to certain variables to provide their configuration in a separate file. ### Environment Variables - **BINARY_DATA** - **CREDENTIALS** - **DATABASE** - **DEPLOYMENT** - **ENDPOINTS** - **EXECUTIONS** - **EXTERNAL_DATA_STORAGE** - **EXTERNAL_HOOKS** - **EXTERNAL_SECRETS** - **INSIGHTS** - **LOGS** - **LICENSE** - **NODES** - **QUEUE_MODE** - **SECURITY** - **SOURCE_CONTROL** - **TASK_RUNNERS** - **TIMEZONE_AND_LOCALIZATION** - **USER_MANAGEMENT_AND_2FA** - **WORKFLOWS** ---------------------------------------- # Binary Data Environment Variables ## File-based configuration You can add `_FILE` to individual variables to provide their configuration in a separate file. By default, n8n uses memory to store binary data. Enterprise users can choose to use an external service instead. ## Environment Variables | Variable | Type | Default | Description | | --- | --- | --- | --- | | `N8N_AVAILABLE_BINARY_DATA_MODES` | String | `filesystem` | A comma-separated list of available binary data modes. | | `N8N_BINARY_DATA_STORAGE_PATH` | String | `N8N_USER_FOLDER/binaryData` | The path where n8n stores binary data. | | `N8N_DEFAULT_BINARY_DATA_MODE` | String | `default` | The default binary data mode. `default` keeps binary data in memory. Set to `filesystem` to use the filesystem, or `s3` to AWS S3. Note that binary data pruning operates on the active binary data mode. If your instance stored data in S3 and you later switched to filesystem mode, n8n only prunes binary data in the filesystem. This may change in the future. | ---------------------------------------- # Credentials Environment Variables ## File-Based Configuration You can add `_FILE` to individual variables to provide their configuration in a separate file. ## Environment Variables for Credential Overwrites | Variable | Type | Default | Description | | --- | --- | --- | --- | | `CREDENTIALS_OVERWRITE_DATA`
`_FILE` | \* | - | Overwrites for credentials. | | `CREDENTIALS_OVERWRITE_ENDPOINT` | String | - | The API endpoint to fetch credentials. | | `CREDENTIALS_DEFAULT_NAME` | String | `My credentials` | The default name for credentials. | ---------------------------------------- # Database Environment Variables ## File-based Configuration Add `_FILE` to individual variables to provide their configuration in a separate file. ## Default Database By default, n8n uses SQLite. It also supports PostgreSQL. Support for MySQL and MariaDB was removed in v1.0. ## Environment Variables ### Common Variables | Variable | Type | Default | Description | | --- | --- | --- | --- | | `DB_TYPE`
/ `_FILE` | Enum string:
`sqlite`, `postgresdb` | `sqlite` | The database to use. | | `DB_TABLE_PREFIX` | \* | - | Prefix for table names. | | `DB_PING_INTERVAL_SECONDS` | Number | `2` | Interval between pings to the database to check connection. | ### PostgreSQL-Specific Variables | Variable | Type | Default | Description | | --- | --- | --- | --- | | `DB_POSTGRESDB_DATABASE`
/ `_FILE` | String | `n8n` | Name of PostgreSQL database. | | `DB_POSTGRESDB_HOST`
/ `_FILE` | String | `localhost` | PostgreSQL host. | | `DB_POSTGRESDB_PORT`
/ `_FILE` | Number | `5432` | PostgreSQL port. | | `DB_POSTGRESDB_USER`
/ `_FILE` | String | `postgres` | PostgreSQL user. | | `DB_POSTGRESDB_PASSWORD`
/ `_FILE` | String | - | PostgreSQL password. | | `DB_POSTGRESDB_POOL_SIZE`
/ `_FILE` | Number | `2` | Number of parallel open Postgres connections. | | `DB_POSTGRESDB_CONNECTION_TIMEOUT`
/ `_FILE` | Number | `20000` | Postgres connection timeout (ms). | | `DB_POSTGRESDB_IDLE_CONNECTION_TIMEOUT`
/ `_FILE` | Number | `30000` | Time before an idle connection is evicted. | | `DB_POSTGRESDB_SCHEMA`
/ `_FILE` | String | `public` | PostgreSQL schema. | | `DB_POSTGRESDB_SSL_ENABLED`
/ `_FILE` | Boolean | `false` | Enable SSL if CA, CERT or KEY is defined. | | `DB_POSTGRESDB_SSL_CA`
/ `_FILE` | String | - | PostgreSQL SSL certificate authority. | | `DB_POSTGRESDB_SSL_CERT`
/ `_FILE` | String | - | PostgreSQL SSL certificate. | | `DB_POSTGRESDB_SSL_KEY`
/ `_FILE` | String | - | PostgreSQL SSL key. | | `DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED`
/ `_FILE` | Boolean | `true` | Reject unauthorized SSL connections. | ### SQLite-Specific Variables | Variable | Type | Default | Description | | --- | --- | --- | --- | | `DB_SQLITE_POOL_SIZE` | Number | `0` | Opens SQLite file in WAL or rollback journal mode. | | `DB_SQLITE_VACUUM_ON_STARTUP` | Boolean | `false` | Runs VACUUM operation on startup to optimize the database. | ---------------------------------------- # Deployment Environment Variables ## File-based Configuration Add `_FILE` to individual variables to provide their configuration in a separate file. ## Deployment Configuration Options | Variable | Type | Default | Description | |---------------------------------------------|-------------------------------------|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `N8N_EDITOR_BASE_URL` | String | - | Public URL for the editor; used for emails and SAML authentication redirect. | | `N8N_CONFIG_FILES` | String | - | Path to JSON configuration file. | | `N8N_DISABLE_UI` | Boolean | `false` | Set to `true` to disable the UI. | | `N8N_PREVIEW_MODE` | Boolean | `false` | Set to `true` to run in preview mode. | | `N8N_TEMPLATES_ENABLED` | Boolean | `false` | Enables workflow templates (true) or disable (false). | | `N8N_TEMPLATES_HOST` | String | `https://api.n8n.io` | Change for custom workflow template library; your API must match n8n's endpoint structure. | | `N8N_ENCRYPTION_KEY` | String | Random key generated by n8n | Provide a custom key for encrypting credentials in the database. | | `N8N_USER_FOLDER` | String | `user-folder` | Path where n8n creates the `.n8n` folder for user-specific data. | | `N8N_PATH` | String | `/` | The path n8n deploys to. | | `N8N_HOST` | String | `localhost` | Host name n8n runs on. | | `N8N_PORT` | Number | `5678` | The HTTP port n8n runs on. | | `N8N_LISTEN_ADDRESS` | String | `0.0.0.0` | IP address n8n should listen on. | | `N8N_PROTOCOL` | Enum string: `http`, `https` | `http` | Protocol used to reach n8n. | | `N8N_SSL_KEY` | String | - | SSL key for HTTPS protocol. | | `N8N_SSL_CERT` | String | - | SSL certificate for HTTPS protocol. | | `N8N_PERSONALIZATION_ENABLED` | Boolean | `true` | Whether to ask users personalization questions. | | `N8N_VERSION_NOTIFICATIONS_ENABLED` | Boolean | `true` | Sends notifications of new versions and security updates when enabled. | | `N8N_VERSION_NOTIFICATIONS_ENDPOINT` | String | `https://api.n8n.io/versions/` | Endpoint to retrieve version information. | | `N8N_VERSION_NOTIFICATIONS_INFO_URL` | String | `https://docs.n8n.io/getting-started/installation/updating.html` | URL for more information displayed in New Versions panel. | | `N8N_DIAGNOSTICS_ENABLED` | Boolean | `true` | Shares selected, anonymous telemetry with n8n; disabling this prevents enabling Ask AI in the Code node. | | `N8N_DIAGNOSTICS_CONFIG_FRONTEND` | String | `1zPn9bgWPzlQc0p8Gj1uiK6DOTn;https://telemetry.n8n.io` | Telemetry configuration for the frontend. | | `N8N_DIAGNOSTICS_CONFIG_BACKEND` | String | `1zPn7YoGC3ZXE9zLeTKLuQCB4F6;https://telemetry.n8n.io/v1/batch` | Telemetry configuration for the backend. | | `N8N_PUSH_BACKEND` | String | `websocket` | Choose between server-sent events (`sse`) or WebSockets (`websocket`) to send changes to the UI. | | `VUE_APP_URL_BASE_API` | String | `http://localhost:5678/` | Used when building the `n8n-editor-ui` package to set how the frontend reaches the backend API. | | `N8N_HIRING_BANNER_ENABLED` | Boolean | `true` | Whether to show the n8n hiring banner in the console. | | `N8N_PUBLIC_API_SWAGGERUI_DISABLED` | Boolean | `false` | Whether the Swagger UI (API playground) is disabled. | | `N8N_PUBLIC_API_DISABLED` | Boolean | `false` | Whether to disable the public API. | | `N8N_PUBLIC_API_ENDPOINT` | String | `api` | Path for public API endpoints. | | `N8N_GRACEFUL_SHUTDOWN_TIMEOUT` | Number | `30` | Time in seconds for n8n process to wait for components to shut down before exiting. | | `N8N_DEV_RELOAD` | Boolean | `false` | Set to `true` for automatic reload or restart when changes occur in source code files during development. | | `N8N_REINSTALL_MISSING_PACKAGES` | Boolean | `false` | If `true`, n8n automatically attempts to reinstall missing packages. | | `N8N_TUNNEL_SUBDOMAIN` | String | - | Specifies the subdomain for the n8n tunnel; generates a random subdomain if not set. | | `N8N_PROXY_HOPS` | Number | `0` | Number of reverse proxies n8n is running behind. | ---------------------------------------- # Endpoints Environment Variables ## File-based Configuration Add `_FILE` to individual variables to provide their configuration in a separate file. ## Environment Variables for Customizing Endpoints in n8n | Variable | Type | Default | Description | |-----------------------------------------------------|---------|----------------------------|-------------------------------------------------------------------------------------------------------------------| | `N8N_PAYLOAD_SIZE_MAX` | Number | `16` | The maximum payload size in MiB. | | `N8N_FORMDATA_FILE_SIZE_MAX` | Number | `200` | Max payload size for files in form-data webhook payloads in MiB. | | `N8N_METRICS` | Boolean | `false` | Whether to enable the `/metrics` endpoint. | | `N8N_METRICS_PREFIX` | String | `n8n_` | Optional prefix for n8n specific metrics names. | | `N8N_METRICS_INCLUDE_DEFAULT_METRICS` | Boolean | `true` | Whether to expose default system and node.js metrics. | | `N8N_METRICS_INCLUDE_CACHE_METRICS` | Boolean | `false` | Whether to include metrics for cache hits and misses. | | `N8N_METRICS_INCLUDE_MESSAGE_EVENT_BUS_METRICS` | Boolean | `false` | Whether to include metrics for events. | | `N8N_METRICS_INCLUDE_WORKFLOW_ID_LABEL` | Boolean | `false` | Whether to include a label for the workflow ID on workflow metrics. | | `N8N_METRICS_INCLUDE_NODE_TYPE_LABEL` | Boolean | `false` | Whether to include a label for the node type on node metrics. | | `N8N_METRICS_INCLUDE_CREDENTIAL_TYPE_LABEL` | Boolean | `false` | Whether to include a label for the credential type on credential metrics. | | `N8N_METRICS_INCLUDE_API_ENDPOINTS` | Boolean | `false` | Whether to expose metrics for API endpoints. | | `N8N_METRICS_INCLUDE_API_PATH_LABEL` | Boolean | `false` | Whether to include a label for the path of API invocations. | | `N8N_METRICS_INCLUDE_API_METHOD_LABEL` | Boolean | `false` | Whether to include a label for the HTTP method of API invocations. | | `N8N_METRICS_INCLUDE_API_STATUS_CODE_LABEL` | Boolean | `false` | Whether to include a label for the HTTP status code of API invocations. | | `N8N_METRICS_INCLUDE_QUEUE_METRICS` | Boolean | `false` | Whether to include metrics for jobs in scaling mode. Not supported in multi-main setup. | | `N8N_METRICS_QUEUE_METRICS_INTERVAL` | Integer | `20` | How often (in seconds) to update queue metrics. | | `N8N_ENDPOINT_REST` | String | `rest` | The path used for REST endpoint. | | `N8N_ENDPOINT_WEBHOOK` | String | `webhook` | The path used for webhook endpoint. | | `N8N_ENDPOINT_WEBHOOK_TEST` | String | `webhook-test` | The path used for test-webhook endpoint. | | `N8N_ENDPOINT_WEBHOOK_WAIT` | String | `webhook-waiting` | The path used for waiting-webhook endpoint. | | `WEBHOOK_URL` | String | - | Used to manually provide the Webhook URL when running n8n behind a reverse proxy. | | `N8N_DISABLE_PRODUCTION_MAIN_PROCESS` | Boolean | `false` | Disable production webhooks from main process. | ---------------------------------------- # Executions Environment Variables ## File-based Configuration You can add `_FILE` to individual variables to provide their configuration in a separate file. ## Environment Variables for Workflow Execution Settings | Variable | Type | Default | Description | |--------------------------------------------|-------------------------------------------------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------| | `EXECUTIONS_MODE` | Enum string: `regular`, `queue` | `regular` | Whether executions should run directly or using queue. | | `EXECUTIONS_TIMEOUT` | Number | `-1` | Sets a default timeout (in seconds) to all workflows after which n8n stops their execution. Users can override this for individual workflows. | | `EXECUTIONS_TIMEOUT_MAX` | Number | `3600` | The maximum execution time (in seconds) that users can set for an individual workflow. | | `EXECUTIONS_DATA_SAVE_ON_ERROR` | Enum string: `all`, `none` | `all` | Whether n8n saves execution data on error. | | `EXECUTIONS_DATA_SAVE_ON_SUCCESS` | Enum string: `all`, `none` | `all` | Whether n8n saves execution data on success. | | `EXECUTIONS_DATA_SAVE_ON_PROGRESS` | Boolean | `false` | Whether to save progress for each node executed (true) or not (false). | | `EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS` | Boolean | `true` | Whether to save data of executions when started manually. | | `EXECUTIONS_DATA_PRUNE` | Boolean | `true` | Whether to delete data of past executions on a rolling basis. | | `EXECUTIONS_DATA_MAX_AGE` | Number | `336` | The execution age (in hours) before it's deleted. | | `EXECUTIONS_DATA_PRUNE_MAX_COUNT` | Number | `10000` | Maximum number of executions to keep in the database. 0 = no limit. | | `EXECUTIONS_DATA_HARD_DELETE_BUFFER` | Number | `1` | How old (hours) the finished execution data has to be to get hard-deleted. | | `EXECUTIONS_DATA_PRUNE_HARD_DELETE_INTERVAL` | Number | `15` | How often (minutes) execution data should be hard-deleted. | | `EXECUTIONS_DATA_PRUNE_SOFT_DELETE_INTERVAL` | Number | `60` | How often (minutes) execution data should be soft-deleted. | | `N8N_CONCURRENCY_PRODUCTION_LIMIT` | Number | `-1` | Max production executions allowed to run concurrently, in both regular and scaling modes. `-1` to disable in regular mode. | ---------------------------------------- # External Data Storage Environment Variables ## File-based Configuration Add `_FILE` to individual variables for configuration in a separate file. ## Environment Variables | Variable | Type | Default | Description | |-----------------------------------------------|---------|---------|--------------------------------------------------------------------------------------------------| | `N8N_EXTERNAL_STORAGE_S3_HOST` | String | - | Host of the n8n bucket in S3-compatible external storage. For example, `s3.us-east-1.amazonaws.com` | | `N8N_EXTERNAL_STORAGE_S3_BUCKET_NAME` | String | - | Name of the n8n bucket in S3-compatible external storage. | | `N8N_EXTERNAL_STORAGE_S3_BUCKET_REGION` | String | - | Region of the n8n bucket in S3-compatible external storage. For example, `us-east-1` | | `N8N_EXTERNAL_STORAGE_S3_ACCESS_KEY` | String | - | Access key in S3-compatible external storage. | | `N8N_EXTERNAL_STORAGE_S3_ACCESS_SECRET` | String | - | Access secret in S3-compatible external storage. | | `N8N_EXTERNAL_STORAGE_S3_AUTH_AUTO_DETECT` | Boolean | - | Use automatic credential detection to authenticate S3 calls, ignoring access key and secret. | ---------------------------------------- # External Hooks Environment Variables ## File-based Configuration You can add `_FILE` to individual variables to provide their configuration in a separate file. Refer to the section on keeping sensitive data in separate files for more details. ## External Hooks Definition You can define external hooks that n8n executes whenever a specific operation runs. Refer to the Backend Hooks section for examples of available hooks and Hook Files for information on file formatting. ## Environment Variables Table | Variable | Type | Description | |-----------------------------------|--------|------------------------------------------------------------------------------------------------------| | `EXTERNAL_HOOK_FILES` | String | Files containing backend external hooks. Provide multiple files as a colon-separated list (" `:`"). | | `EXTERNAL_FRONTEND_HOOKS_URLS` | String | URLs to files containing frontend external hooks. Provide multiple URLs as a colon-separated list (" `:`"). | ---------------------------------------- # External Secrets Environment Variables ## File-based Configuration Add `_FILE` to individual variables to provide their configuration in a separate file. ## External Secrets Store Use an external secrets store to manage credentials for n8n. ## Environment Variables | Variable | Type | Default | Description | |----------------------------------------|--------|----------------|------------------------------------------------------| | `N8N_EXTERNAL_SECRETS_UPDATE_INTERVAL` | Number | `300` (5 minutes) | How often (in seconds) to check for secret updates. | ---------------------------------------- # Insights Environment Variables ## File-based Configuration Add `_FILE` to individual variables to provide their configuration in a separate file. ## Variable Definitions | Variable | Type | Default | Description | | --- | --- | --- | --- | | `N8N_DISABLED_MODULES` | String | - | Set to `insights` to disable the feature and metrics collection for an instance. | | `N8N_INSIGHTS_COMPACTION_BATCH_SIZE` | Number | 500 | The number of raw insights data to compact in a single batch. | | `N8N_INSIGHTS_COMPACTION_DAILY_TO_WEEKLY_THRESHOLD_DAYS` | Number | 180 | The maximum age (in days) of daily insights data to compact. | | `N8N_INSIGHTS_COMPACTION_HOURLY_TO_DAILY_THRESHOLD_DAYS` | Number | 90 | The maximum age (in days) of hourly insights data to compact. | | `N8N_INSIGHTS_COMPACTION_INTERVAL_MINUTES` | Number | 60 | Interval (in minutes) at which compaction should run. | | `N8N_INSIGHTS_FLUSH_BATCH_SIZE` | Number | 1000 | The maximum number of insights data to keep in the buffer before flushing. | | `N8N_INSIGHTS_FLUSH_INTERVAL_SECONDS` | Number | 30 | The interval (in seconds) at which the insights data should be flushed to the database. | ---------------------------------------- # License Environment Variables ## File-Based Configuration You can add `_FILE` to individual variables to provide their configuration in a separate file. ## Required Environment Variables To enable certain licensed features, you must activate your license. This can be done through the UI or by setting the following environment variables: | Variable | Type | Default | Description | |-------------------------------------------|---------|---------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `N8N_HIDE_USAGE_PAGE` | boolean | `false` | Hide the usage and plans page in the app. | | `N8N_LICENSE_ACTIVATION_KEY` | String | `''` | Activation key to initialize license. Not applicable if the n8n instance was already activated. | | `N8N_LICENSE_AUTO_RENEW_ENABLED` | Boolean | `true` | Enables (true) or disables (false) autorenewal for licenses. If disabled, you must manually renew the license every 10 days by navigating to **Settings** > **Usage and plan**, and pressing `F5`. Failure to renew the license will disable all licensed features. | | `N8N_LICENSE_DETACH_FLOATING_ON_SHUTDOWN`| Boolean | `true` | Controls whether the instance releases floating entitlements back to the pool upon shutdown. Set to `true` to allow other instances to reuse the entitlements, or `false` to retain them. For production instances that must always keep their licensed features, set this to `false`. | | `N8N_LICENSE_SERVER_URL` | String | `https://license.n8n.io/v1` | Server URL to retrieve license. | | `N8N_LICENSE_TENANT_ID` | Number | `1` | Tenant ID associated with the license. Only set this variable if explicitly instructed by n8n. | | `https_proxy_license_server` | String | `https://user:pass@proxy:port`| Proxy server URL for HTTPS requests to retrieve license. This variable name needs to be lowercase. | ---------------------------------------- # Logs environment variables ## File-based configuration You can add `_FILE` to individual variables to provide their configuration in a separate file. ## n8n logs | Variable | Type | Default | Description | |-----------------------------------|-----------------------------------------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------| | `N8N_LOG_LEVEL` | Enum string: `info`, `warn`, `error`, `debug` | `info` | Log output level. | | `N8N_LOG_OUTPUT` | Enum string: `console`, `file` | `console` | Where to output logs. Provide multiple values as a comma-separated list. | | `N8N_LOG_FORMAT` | Enum string: `text`, `json` | `text` | The log format used: `text` for human-readable messages, `json` for structured logging. | | `N8N_LOG_FILE_COUNT_MAX` | Number | `100` | Max number of log files to keep. | | `N8N_LOG_FILE_SIZE_MAX` | Number | `16` | Max size of each log file in MB. | | `N8N_LOG_FILE_LOCATION` | String | `/logs/n8n.log` | Log file location, requires `N8N_LOG_OUTPUT` set to `file`. | | `DB_LOGGING_ENABLED` | Boolean | `false` | Whether to enable database-specific logging. | | `DB_LOGGING_OPTIONS` | Enum string: `query`, `error`, `schema`, `warn`, `info`, `log` | `error` | Database log output level. To enable all logging, specify `all`. | | `DB_LOGGING_MAX_EXECUTION_TIME` | Number | `1000` | Maximum execution time (in milliseconds) before n8n logs a warning. Set to `0` to disable long-running query warning. | | `CODE_ENABLE_STDOUT` | Boolean | `false` | Set to `true` to send Code node logs to process's stdout for debugging, monitoring, or logging purposes. | | `NO_COLOR` | any | `undefined` | Set to any value to output logs without ANSI colors. | ## Log streaming | Variable | Type | Default | Description | |--------------------------------------------|---------|---------|------------------------------------------------------------------------------------------| | `N8N_EVENTBUS_CHECKUNSENTINTERVAL` | Number | `0` | How often (in milliseconds) to check for unsent event messages. Set to `0` to disable it. | | `N8N_EVENTBUS_LOGWRITER_SYNCFILEACCESS` | Boolean | `false` | Whether all file access happens synchronously within the thread (true) or not (false). | | `N8N_EVENTBUS_LOGWRITER_KEEPLOGCOUNT` | Number | `3` | Number of event log files to keep. | | `N8N_EVENTBUS_LOGWRITER_MAXFILESIZEINKB` | Number | `10240` | Maximum size (in kilo-bytes) of an event log file before a new one starts. | | `N8N_EVENTBUS_LOGWRITER_LOGBASENAME` | String | `n8nEventLog` | Basename of the event log file. | ---------------------------------------- # Nodes Environment Variables This document lists the environment variables configuration options for managing nodes in n8n, including specifying which nodes to load or exclude, importing built-in or external modules in the Code node, and enabling community nodes. | Variable | Type | Default | Description | | --- | --- | --- | --- | | `NODES_INCLUDE` | Array of strings | - | Specify which nodes to load. | | `NODES_EXCLUDE` | Array of strings | - | Specify which nodes not to load. For example, to block nodes that can be a security risk if users aren't trustworthy: `NODES_EXCLUDE: "[\"n8n-nodes-base.executeCommand\", \"n8n-nodes-base.readWriteFile\"]"` | | `NODE_FUNCTION_ALLOW_BUILTIN` | String | - | Permit users to import specific built-in modules in the Code node. Use `*` to allow all. n8n disables importing modules by default. | | `NODE_FUNCTION_ALLOW_EXTERNAL` | String | - | Permit users to import specific external modules (from `n8n/node_modules`) in the Code node. n8n disables importing modules by default. | | `NODES_ERROR_TRIGGER_TYPE` | String | `n8n-nodes-base.errorTrigger` | Specify which node type to use as Error Trigger. | | `N8N_CUSTOM_EXTENSIONS` | String | - | Specify the path to directories containing your custom nodes. | | `N8N_COMMUNITY_PACKAGES_ENABLED` | Boolean | `true` | Enables (true) or disables (false) the functionality to install and load community nodes. | | `N8N_COMMUNITY_PACKAGES_REGISTRY` | String | `https://registry.npmjs.org` | NPM registry URL to pull community packages from (license required). | | `N8N_VERIFIED_PACKAGES_ENABLED` | Boolean | `true` | Controls whether to show verified community nodes in the nodes panel for installation and use. | | `N8N_UNVERIFIED_PACKAGES_ENABLED` | Boolean | `true` | Controls whether to enable the installation and use of unverified community nodes from an NPM registry. | | `N8N_COMMUNITY_PACKAGES_PREVENT_LOADING` | Boolean | `false` | Prevents (true) or allows (false) loading installed community nodes on instance startup. | ### File-based Configuration Add `_FILE` to individual variables to provide their configuration in a separate file. ---------------------------------------- # Queue Mode Environment Variables ## File-based Configuration Add `_FILE` to individual variables to provide their configuration in a separate file. ## Queue Mode Variables | Variable | Type | Default | Description | |--------------------------------------|---------|---------|------------------------------------------------------------------------------------------------------| | `QUEUE_BULL_PREFIX` | String | - | Prefix to use for all queue keys. | | `QUEUE_BULL_REDIS_DB` | Number | `0` | The Redis database used. | | `QUEUE_BULL_REDIS_HOST` | String | `localhost` | The Redis host. | | `QUEUE_BULL_REDIS_PORT` | Number | `6379` | The Redis port used. | | `QUEUE_BULL_REDIS_USERNAME` | String | - | The Redis username (requires Redis version 6 or above). | | `QUEUE_BULL_REDIS_PASSWORD` | String | - | The Redis password. | | `QUEUE_BULL_REDIS_TIMEOUT_THRESHOLD` | Number | `10000` | The Redis timeout threshold (in ms). | | `QUEUE_BULL_REDIS_CLUSTER_NODES` | String | - | Comma-separated list of Redis Cluster nodes in `host:port` format. Uses cluster client in queue mode. | | `QUEUE_BULL_REDIS_TLS` | Boolean | `false` | Enable TLS on Redis connections. | | `QUEUE_BULL_REDIS_DUALSTACK` | Boolean | `false` | Enable dual-stack support (IPv4 and IPv6) on Redis connections. | | `QUEUE_WORKER_TIMEOUT` (deprecated) | Number | `30` | Use `N8N_GRACEFUL_SHUTDOWN_TIMEOUT` instead. Time to wait for running executions before shutdown. | | `QUEUE_HEALTH_CHECK_ACTIVE` | Boolean | `false` | Whether to enable (true) or disable (false) health checks. | | `QUEUE_HEALTH_CHECK_PORT` | Number | - | The port to serve health checks on. | | `QUEUE_WORKER_LOCK_DURATION` | Number | `30000` | Lease period for a worker on a message (in ms). | | `QUEUE_WORKER_LOCK_RENEW_TIME` | Number | `15000` | Frequency of lease renewal (in ms). | | `QUEUE_WORKER_STALLED_INTERVAL` | Number | `30000` | Frequency for checking stalled jobs (0 for never). | | `QUEUE_WORKER_MAX_STALLED_COUNT` | Number | `1` | Maximum number of times a stalled job will be re-processed. | ## Multi-main Setup Variables | Variable | Type | Default | Description | |----------------------------------------------|---------|---------|-------------------------------------------------------------------------------------------| | `N8N_MULTI_MAIN_SETUP_ENABLED` | Boolean | `false` | Whether to enable multi-main setup for queue mode (license required). | | `N8N_MULTI_MAIN_SETUP_KEY_TTL` | Number | `10` | Time to live (in seconds) for leader key in multi-main setup. | | `N8N_MULTI_MAIN_SETUP_CHECK_INTERVAL` | Number | `3` | Interval (in seconds) for leader check in multi-main setup. | ---------------------------------------- # Security Environment Variables ## File-based Configuration You can add `_FILE` to individual variables to provide their configuration in a separate file. ## Environment Variables | Variable | Type | Default | Description | | --- | --- | --- | --- | | `N8N_BLOCK_ENV_ACCESS_IN_NODE` | Boolean | `false` | Controls access to environment variables in expressions and the Code node. | | `N8N_BLOCK_FILE_ACCESS_TO_N8N_FILES` | Boolean | `true` | Blocks access to all files in the `.n8n` directory and user-defined configuration files. | | `N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS` | Boolean | `false` | Attempts to set 0600 permissions for the settings file, restricting access to the owner. | | `N8N_RESTRICT_FILE_ACCESS_TO` | String | | Limits access to specified directories, using a colon-separated list. | | `N8N_SECURITY_AUDIT_DAYS_ABANDONED_WORKFLOW` | Number | 90 | Sets the number of days to consider a workflow abandoned if not executed. | | `N8N_SECURE_COOKIE` | Boolean | `true` | Ensures cookies are only sent over HTTPS. | | `N8N_SAMESITE_COOKIE` | Enum string: `strict`, `lax`, `none` | `lax` | Controls cross-site cookie behavior:
- `strict`: First-party requests only.
- `lax`: Top-level navigation requests.
- `none`: Sent in all contexts (requires HTTPS). | ---------------------------------------- # Source Control Environment Variables ## File-based Configuration Add `_FILE` to individual variables for configuration in a separate file. For details, refer to the documentation on keeping sensitive data in separate files. n8n uses Git-based source control to manage environments. Refer to the guides on linking a Git repository to an n8n instance and configuring your source control. ## Environment Variables | Variable | Type | Default | Description | |--------------------------------------------------|--------|-----------|-------------------------------------------------------------------------------------------------------------| | `N8N_SOURCECONTROL_DEFAULT_SSH_KEY_TYPE` | String | `ed25519` | Set to `rsa` to make RSA the default SSH key type for source control setup. | ---------------------------------------- # Task Runner Environment Variables ## File-based Configuration Add `_FILE` to individual variables for file-based configuration. ## n8n Instance Environment Variables | Variable | Type | Default | Description | |--------------------------------------------|------------------------------------------|--------------------------|-------------------------------------------------------------------------------------------------------| | `N8N_RUNNERS_ENABLED` | Boolean | `false` | Are task runners enabled. | | `N8N_RUNNERS_MODE` | Enum string: `internal`, `external` | `internal` | Mode for launching and running the task runner. | | `N8N_RUNNERS_AUTH_TOKEN` | String | Random string | Shared secret for task runner authentication, required in `external` mode. | | `N8N_RUNNERS_BROKER_PORT` | Number | `5679` | Port the task broker listens on for connections. | | `N8N_RUNNERS_BROKER_LISTEN_ADDRESS` | String | `127.0.0.1` | Address the task broker listens on. | | `N8N_RUNNERS_MAX_PAYLOAD` | Number | `1,073,741,824` | Max payload size in bytes for communication between broker and runner. | | `N8N_RUNNERS_MAX_OLD_SPACE_SIZE` | String | | `--max-old-space-size` option for the task runner (in MB). | | `N8N_RUNNERS_MAX_CONCURRENCY` | Number | `5` | Number of concurrent tasks a task runner can execute. | | `N8N_RUNNERS_TASK_TIMEOUT` | Number | `60` | How long (in seconds) a task can take before it aborts. Must be greater than 0. | | `N8N_RUNNERS_HEARTBEAT_INTERVAL` | Number | `30` | Frequency (in seconds) for sending heartbeats to the broker. | ## Task Runner Launcher Environment Variables | Variable | Type | Default | Description | |--------------------------------------------|------------------------------------------|--------------------------|-------------------------------------------------------------------------------------------------------| | `N8N_RUNNERS_LAUNCHER_LOG_LEVEL` | Enum string: `debug`, `info`, `warn`, `error` | `info` | Log message verbosity. | | `N8N_RUNNERS_AUTH_TOKEN` | String | - | Shared secret for authentication. | | `N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT` | Number | `15` | Seconds to wait before shutting down an idle runner. | | `N8N_RUNNERS_TASK_BROKER_URI` | String | `http://127.0.0.1:5679` | URI of the task broker server (n8n instance). | | `N8N_RUNNERS_LAUNCHER_HEALTH_CHECK_PORT` | Number | `5680` | Port for the launcher's health check server. | | `N8N_RUNNERS_MAX_PAYLOAD` | Number | `1,073,741,824` | Max payload size in bytes for communication. | | `N8N_RUNNERS_MAX_CONCURRENCY` | Number | `5` | Number of concurrent tasks a task runner can execute. | | `NODE_OPTIONS` | String | - | [Node.js options](https://nodejs.org/api/cli.html#node_optionsoptions). | ## Task Runner Environment Variables | Variable | Type | Default | Description | |--------------------------------------------|------------------------------------------|--------------------------|-------------------------------------------------------------------------------------------------------| | `N8N_RUNNERS_GRANT_TOKEN` | String | Random string | Token for the runner to authenticate with the task broker. | | `N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT` | Number | `15` | Seconds to wait before shutting down an idle runner. | | `N8N_RUNNERS_TASK_BROKER_URI` | String | `http://127.0.0.1:5679` | URI of the task broker server (n8n instance). | | `N8N_RUNNERS_LAUNCHER_HEALTH_CHECK_PORT` | Number | `5680` | Port for the launcher's health check server. | | `N8N_RUNNERS_MAX_PAYLOAD` | Number | `1,073,741,824` | Max payload size in bytes for communication. | | `N8N_RUNNERS_MAX_CONCURRENCY` | Number | `5` | Number of concurrent tasks a task runner can execute. | | `NODE_FUNCTION_ALLOW_BUILTIN` | String | - | Permit importing specific built-in modules in the Code node. Use `*` to allow all. | | `NODE_FUNCTION_ALLOW_EXTERNAL` | String | - | Permit importing specific external modules in the Code node. | | `N8N_RUNNERS_ALLOW_PROTOTYPE_MUTATION` | Boolean | `false` | Allow prototype mutation for external libraries. | | `GENERIC_TIMEZONE` | * | `America/New_York` | Default timezone for the n8n instance. | ---------------------------------------- # Timezone and Localization Environment Variables ## File-Based Configuration You can add `_FILE` to individual variables to provide their configuration in a separate file. Refer to the configuration methods documentation for more details. ## Environment Variables | Variable | Type | Default | Description | | --- | --- | --- | --- | | `GENERIC_TIMEZONE` | \* | `America/New_York` | The n8n instance timezone. Important for schedule nodes (such as Cron). | | `N8N_DEFAULT_LOCALE` | String | `en` | A locale identifier compatible with the Accept-Language header. n8n doesn't support regional identifiers, such as `de-AT`. When running in a locale other than the default, n8n displays UI strings in the selected locale and falls back to `en` for any untranslated strings. | ---------------------------------------- # User Management SMTP and Two-Factor Authentication Environment Variables ## File-based Configuration Add `_FILE` to individual variables to provide their configuration in a separate file. ## Environment Variables | Variable | Type | Default | Description | | --- | --- | --- | --- | | `N8N_EMAIL_MODE` | String | `smtp` | Enable emails. | | `N8N_SMTP_HOST` | String | - | Your SMTP server name. | | `N8N_SMTP_PORT` | Number | - | Your SMTP server port. | | `N8N_SMTP_USER` | String | - | Your SMTP username. | | `N8N_SMTP_PASS` | String | - | Your SMTP password. | | `N8N_SMTP_OAUTH_SERVICE_CLIENT` | String | - | Client ID for 2LO with a service account. | | `N8N_SMTP_OAUTH_PRIVATE_KEY` | String | - | Private key for 2LO with a service account. | | `N8N_SMTP_SENDER` | String | - | Sender email address, can include sender name (e.g., _N8N ``_). | | `N8N_SMTP_SSL` | Boolean | `true` | Use SSL for SMTP (true) or not (false). | | `N8N_SMTP_STARTTLS` | Boolean | `true` | Use STARTTLS for SMTP (true) or not (false). | | `N8N_UM_EMAIL_TEMPLATES_INVITE` | String | - | Path to your HTML email template for invite emails. | | `N8N_UM_EMAIL_TEMPLATES_PWRESET` | String | - | Path to your HTML email template for password reset emails. | | `N8N_UM_EMAIL_TEMPLATES_WORKFLOW_SHARED` | String | - | Path to template for workflow sharing notifications. | | `N8N_UM_EMAIL_TEMPLATES_CREDENTIALS_SHARED` | String | - | Path to template for credential sharing notifications. | | `N8N_USER_MANAGEMENT_JWT_SECRET` | String | - | Specific JWT secret; n8n generates one on start by default. | | `N8N_USER_MANAGEMENT_JWT_DURATION_HOURS` | Number | 168 | Expiration date for the JWTs in hours. | | `N8N_USER_MANAGEMENT_JWT_REFRESH_TIMEOUT_HOURS` | Number | 0 | Hours before the JWT expires to automatically refresh it. | | `N8N_MFA_ENABLED` | Boolean | `true` | Enable (true) or disable (false) two-factor authentication. | ---------------------------------------- # Workflows Environment Variables ## File-based Configuration You can add `_FILE` to individual variables to provide their configuration in a separate file. ## Environment Variables | Variable | Type | Default | Description | | --- | --- | --- | --- | | `N8N_ONBOARDING_FLOW_DISABLED` | Boolean | `false` | Whether to disable onboarding tips when creating a new workflow (true) or not (false). | | `N8N_WORKFLOW_ACTIVATION_BATCH_SIZE` | Number | `1` | How many workflows to activate simultaneously during startup. | | `N8N_WORKFLOW_CALLER_POLICY_DEFAULT_OPTION` | String | `workflowsFromSameOwner` | Which workflows can call a workflow. Options are: `any`, `none`, `workflowsFromAList`, `workflowsFromSameOwner`. This feature requires Workflow sharing. | | `N8N_WORKFLOW_TAGS_DISABLED` | Boolean | `false` | Whether to disable workflow tags (true) or enable tags (false). | | `WORKFLOWS_DEFAULT_NAME` | String | `My workflow` | The default name used for new workflows. | ---------------------------------------- # Supported Databases ## Default Database - **SQLite**: Used by default to save credentials, past executions, and workflows. - **PostgresDB**: Supported as an alternative database. ## Shared Settings - **DB_TABLE_PREFIX**: Prefix for table names (default: -). ## PostgresDB Configuration To use PostgresDB, set the following environment variables: - `DB_TYPE=postgresdb` - `DB_POSTGRESDB_DATABASE` (default: 'n8n') - `DB_POSTGRESDB_HOST` (default: 'localhost') - `DB_POSTGRESDB_PORT` (default: 5432) - `DB_POSTGRESDB_USER` (default: 'postgres') - `DB_POSTGRESDB_PASSWORD` (default: empty) - `DB_POSTGRESDB_SCHEMA` (default: 'public') - `DB_POSTGRESDB_SSL_CA` (default: undefined): Path to the server's CA certificate for connection validation. - `DB_POSTGRESDB_SSL_CERT` (default: undefined): Path to the client's TLS certificate. - `DB_POSTGRESDB_SSL_KEY` (default: undefined): Path to the client's private key. - `DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED` (default: true): Specifies if TLS connections failing validation should be rejected. ### Example Configuration ```bash export DB_TYPE=postgresdb export DB_POSTGRESDB_DATABASE=n8n export DB_POSTGRESDB_HOST=postgresdb export DB_POSTGRESDB_PORT=5432 export DB_POSTGRESDB_USER=n8n export DB_POSTGRESDB_PASSWORD=n8n export DB_POSTGRESDB_SCHEMA=n8n # optional: export DB_POSTGRESDB_SSL_CA=$(pwd)/ca.crt export DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=false n8n start ``` ## Required Permissions n8n needs to create and modify the schemas of the tables it uses. Recommended permissions include: ```sql CREATE DATABASE n8n-db; CREATE USER n8n-user WITH PASSWORD 'random-password'; GRANT ALL PRIVILEGES ON DATABASE n8n-db TO n8n-user; ``` ## TLS Configuration Configurations include: - Not declaring (default): Connect with `SSL=off`. - Declaring only the CA and unauthorized flag: Connect with `SSL=on` and verify the server's signature. - Declaring `_{CERT,KEY}` along with the above: Use certificate and key for client TLS authentication. ## SQLite Configuration - **Default Database Location**: The database file is located at `~/.n8n/database.sqlite`. ---------------------------------------- # Task Runners Task runners are a mechanism to execute tasks securely and performantly, executing user-provided JavaScript code in the Code node. ## How It Works The task runner feature includes: - **Task Runner**: Executes requested tasks. - **Task Broker**: Coordinates communication between task runners and requesters. - **Task Requester**: Submits task requests. An n8n instance acts as the broker, with the Code node serving as the task requester. ## Task Runner Modes ### Internal Mode In internal mode, the n8n instance launches the task runner as a child process, sharing the same `uid` and `gid` as n8n. ### External Mode In external mode, an external orchestrator (e.g., Kubernetes) launches the task runner. Typically configured to run as a side-car container alongside n8n. Each n8n container requires its own task runner when using Queue mode. ## Setting Up External Mode ### Configuring n8n Instance in External Mode Set the following environment variables: | Environment Variables | Description | | --- | --- | | `N8N_RUNNERS_ENABLED=true` | Enables task runners. | | `N8N_RUNNERS_MODE=external` | Use task runners in external mode. | | `N8N_RUNNERS_AUTH_TOKEN=` | A shared secret task runners use to connect to the broker. | | `N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0` | Allows task broker to accept external connections. | ### Configuring Task Runners in External Mode Run a task runner container from the n8n Docker image with the following properties: | Configuration | Description | | --- | --- | | `command` | `["/usr/local/bin/task-runner-launcher", "javascript"]` | | `livenessProbe` | `GET /healthz`, port `5680` | Set these environment variables for the container: | Environment Variables | Description | | --- | --- | | `N8N_RUNNERS_AUTH_TOKEN=` | Shared secret for task runner connection to the broker. | | `N8N_RUNNERS_MAX_CONCURRENCY=5` | Number of concurrent tasks the runner can execute. | | `N8N_RUNNERS_TASK_BROKER_URI=localhost:5679` | Address of the task broker server. | | `N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=15` | Seconds of inactivity before shutting down the task runner process. | | `NODE_OPTIONS=--max-old-space-size=` | Memory limit for the task runner Node.js process. Should be lower than the container's limit. | | `GENERIC_TIMEZONE` | Same default timezone as configured for the n8n instance. | For more detailed information, see task runner environment variables documentation. ---------------------------------------- ## User Management Configuration for Self-Hosted n8n User management in n8n allows inviting users to your instance. This section outlines the steps to configure your n8n instance for user management. ### Setup Stages 1. **Configure SMTP server for user invites and password resets**. 2. **Start n8n and complete the in-app setup**. 3. **Invite users**. ### Step 1: SMTP Configuration 1. Obtain the following from your SMTP provider: - Server name - SMTP username - SMTP password - SMTP sender name 2. Set the following SMTP environment variables in your n8n instance: | Variable | Type | Description | Required? | |-----------------------------------------------|----------|-------------------------------------------------------------------------------------------------|-----------| | `N8N_EMAIL_MODE` | string | `smtp` | Required | | `N8N_SMTP_HOST` | string | Your SMTP server name | Required | | `N8N_SMTP_PORT` | number | Your SMTP server port. Default is `465`. | Optional | | `N8N_SMTP_USER` | string | Your SMTP username | Optional | | `N8N_SMTP_PASS` | string | Your SMTP password | Optional | | `N8N_SMTP_OAUTH_SERVICE_CLIENT` | string | Your OAuth service client | Optional | | `N8N_SMTP_OAUTH_PRIVATE_KEY` | string | Your OAuth private key | Optional | | `N8N_SMTP_SENDER` | string | Sender email address (can include sender name, e.g., _N8N ``_) | Required | | `N8N_SMTP_SSL` | boolean | Whether to use SSL for SMTP (`true` or `false`). Defaults to `true`. | Optional | | `N8N_UM_EMAIL_TEMPLATES_INVITE` | string | Path to your HTML email template for invites. | Optional | | `N8N_UM_EMAIL_TEMPLATES_PWRESET` | string | Path to your HTML email template for password resets. | Optional | | `N8N_UM_EMAIL_TEMPLATES_WORKFLOW_SHARED` | string | Path to the HTML template for notifying users about shared credentials. | Optional | | `N8N_UM_EMAIL_TEMPLATES_CREDENTIALS_SHARED` | string | Path to the HTML template for notifying users about shared workflows. | Optional | 3. Restart your n8n instance to apply the SMTP configurations. ### Step 2: In-App Setup 1. Open n8n; you will see a signup screen. 2. Enter your details; password must be at least eight characters with one number and one capital letter. 3. Click **Next** to log in with your new owner account. ### Step 3: Invite Users 1. Sign into your workspace with your owner account. 2. Access your **Personal Settings** by clicking on your user icon and selecting **Settings**. 3. Go to the **Users** page. 4. Click **Invite**. 5. Enter the new user's email address. 6. Click **Invite user**. An email will be sent with a link for the new user to join. ---------------------------------------- # Docker Installation ## Prerequisites - Install [Docker Desktop](https://docs.docker.com/get-docker/). - Linux users must install [Docker Engine](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/) individually. ### Latest and Next Versions - Current `latest`: 1.98.2 - Current `next`: 1.99.1 (beta) ## Starting n8n Run the following commands in your terminal: ```bash docker volume create n8n_data docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n ``` Once running, access n8n at: [http://localhost:5678](http://localhost:5678/) ## Using with PostgreSQL To use PostgreSQL with n8n, execute the following commands, replacing placeholders with your actual values: ```bash docker volume create n8n_data docker run -it --rm \ --name n8n \ -p 5678:5678 \ -e DB_TYPE=postgresdb \ -e DB_POSTGRESDB_DATABASE= \ -e DB_POSTGRESDB_HOST= \ -e DB_POSTGRESDB_PORT= \ -e DB_POSTGRESDB_USER= \ -e DB_POSTGRESDB_SCHEMA= \ -e DB_POSTGRESDB_PASSWORD= \ -v n8n_data:/home/node/.n8n \ docker.n8n.io/n8nio/n8n ``` ## Setting Timezone To set the timezone for n8n, use the following example: ```bash docker volume create n8n_data docker run -it --rm \ --name n8n \ -p 5678:5678 \ -e GENERIC_TIMEZONE="Europe/Berlin" \ -e TZ="Europe/Berlin" \ -v n8n_data:/home/node/.n8n \ docker.n8n.io/n8nio/n8n ``` ## Updating n8n To update n8n, pull the latest image: ```bash # Pull latest (stable) version docker pull docker.n8n.io/n8nio/n8n # Pull specific version docker pull docker.n8n.io/n8nio/n8n:1.81.0 # Pull next (unstable) version docker pull docker.n8n.io/n8nio/n8n:next ``` Stop and start your n8n container: ```bash # Find your container ID docker ps -a # Stop the container docker stop # Remove the container docker rm # Start the container docker run --name= [options] -d docker.n8n.io/n8nio/n8n ``` ### Updating Docker Compose If you run n8n using Docker Compose, follow these steps: ```bash # Navigate to the directory containing your docker compose file cd # Pull latest version docker compose pull # Stop and remove older version docker compose down # Start the container docker compose up -d ``` ## n8n with Tunnel For local development and testing, start n8n with the tunnel service as follows: ```bash docker volume create n8n_data docker run -it --rm \ --name n8n \ -p 5678:5678 \ -v n8n_data:/home/node/.n8n \ docker.n8n.io/n8nio/n8n \ start --tunnel ``` ---------------------------------------- # npm Installation for n8n ## Core Concepts - **Node.js Requirement**: n8n requires Node.js version 18 or above. - **Versioning**: - `latest`: For production use (Current: 1.98.2). - `next`: Most recent (Current: 1.99.1), treated as a beta. ## Try n8n with npx To try n8n without installation: ```bash npx n8n ``` Access n8n at [http://localhost:5678](http://localhost:5678). ## Install Globally with npm To install n8n globally: ```bash npm install n8n -g ``` To install or update to a specific version: ```bash npm install -g n8n@0.126.1 ``` To install the `next` version: ```bash npm install -g n8n@next ``` To start n8n, run: ```bash n8n # or n8n start ``` ## Updating n8n To update to the latest version: ```bash npm update -g n8n ``` To install the `next` version: ```bash npm install -g n8n@next ``` ## n8n with Tunnel For local development and testing: To use webhooks for external services like GitHub, run: ```bash n8n start --tunnel ``` ## Reverting an Upgrade To revert an upgrade: 1. Install the desired older version. 2. If the upgrade involved a database migration, check documentation for manual changes. 3. Run: ```bash n8n db:revert ``` Repeat the process for multiple migrations. ## Windows Troubleshooting Ensure Node.js is correctly set up according to Microsoft's guide to [Install NodeJS on Windows](https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows). ---------------------------------------- # Server Setups ## Self-host with Docker Compose - Digital Ocean - Heroku - Hetzner Cloud ## Starting Points for Kubernetes Setup - AWS - Azure - Google Cloud Platform ## Configuration Guides - Docker Compose ---------------------------------------- # Hosting n8n on Amazon Web Services ## Hosting options - AWS provides hosting options including EC2 (virtual machines) and EKS (containers with Kubernetes). - This guide uses EKS as it is suitable for scaling. ## Prerequisites 1. Install the AWS CLI tool and configure authentication. 2. Self-hosting requires expertise in: - Server and container setup - Application resource management - Security configuration ## Create a cluster To create a cluster using eksctl: ```bash eksctl create cluster --name n8n --region ``` ## Clone configuration repository Clone the n8n Kubernetes configuration: ```bash git clone https://github.com/n8n-io/n8n-kubernetes-hosting.git -b aws cd n8n-kubernetes-hosting ``` ## Configure Postgres ### Configure volume for persistent storage Define a persistent volume in `postgres-claim0-persistentvolumeclaim.yaml`: ```yaml spec: storageClassName: gp2 accessModes: - ReadWriteOnce ``` ### Postgres environment variables Set up environment variables in `postgres-secret.yaml` for database connection. ## Configure n8n ### Create a volume for file storage Define a volume in `n8n-claim0-persistentvolumeclaim.yaml`: ```yaml volumes: - name: n8n-claim0 persistentVolumeClaim: claimName: n8n-claim0 ``` ### Pod resources Define resource requests and limits in `n8n-deployment.yaml`: ```yaml resources: requests: memory: "250Mi" limits: memory: "500Mi" ``` ### Optional: Environment variables Create an `n8n-secret.yaml` for n8n configuration. ## Deployments The deployment manifests ( `n8n-deployment.yaml`, `postgres-deployment.yaml`) define: - Environment variables for pods - Container image to use - Resource consumption limits - Volume mounts ## Services The service manifests (`postgres-service.yaml`, `n8n-service.yaml`) expose services via Kubernetes load balancer on ports 5432 (Postgres) and 5678 (n8n). ## Send to Kubernetes cluster Deploy all manifests: ```bash kubectl apply -f . ``` If namespace error occurs, create namespace: ```bash kubectl apply -f namespace.yaml ``` ## Set up DNS Create a DNS record for your subdomain pointing to the load balancer URL of the n8n service. Access the service over HTTP. ## Delete resources To remove all resources created: ```bash kubectl delete -f . ``` ---------------------------------------- # Hosting n8n on Azure This guide provides instructions for self-hosting n8n on Azure using Azure Kubernetes Service (AKS) with Postgres as the database backend. ## Prerequisites - Azure command-line tool installation. - Technical knowledge in server and container setup, resource management, security, and n8n configuration. ## Hosting options - Azure Container Instances - Linux Virtual Machines - Azure Kubernetes Service (recommended for scalability) ## Open the Azure Kubernetes Service 1. Navigate to the Azure portal and select **Kubernetes services**. ## Create a cluster 1. Select **Create** > **Create a Kubernetes cluster** and follow configuration options. ## Set Kubectl context 1. Find connection details on the cluster instance page and run commands in the terminal to set the local Kubernetes context. ## Clone configuration repository Clone the necessary configuration files with: ```bash git clone https://github.com/n8n-io/n8n-kubernetes-hosting.git -b azure cd azure ``` ## Configure Postgres ### Configure volume for persistent storage - Utilize the `postgres-claim0-persistentvolumeclaim.yaml` manifest file for persistent storage. ### Postgres environment variables Edit the `postgres-secret.yaml` with necessary environment variables required for Postgres. ## Configure n8n ### Create a volume for file storage 1. Modify the `n8n-claim0-persistentvolumeclaim.yaml` to create a volume for n8n. 2. Reference the volume in the `n8n-deployment.yaml` manifest: ```yaml volumes: - name: n8n-claim0 persistentVolumeClaim: claimName: n8n-claim0 ``` ### Pod resources Specify resource limits in the `n8n-deployment.yaml`: ```yaml resources: requests: memory: "250Mi" limits: memory: "500Mi" ``` ### Optional: Environment variables Create an `n8n-secret.yaml` file to configure n8n settings. ## Deployments Use the following manifests to define the n8n and Postgres deployments: - `n8n-deployment.yaml` - `postgres-deployment.yaml` ## Services Expose services using manifests: - `postgres-service.yaml`: uses port 5432 - `n8n-service.yaml`: uses port 5678 ## Send to Kubernetes cluster Deploy all manifests with: ```bash kubectl apply -f . ``` For namespace issues, apply the namespace manifest: ```bash kubectl apply -f namespace.yaml ``` ## Set up DNS Create a DNS record for your subdomain pointing to the n8n service external IP (port 5678). ## Delete resources Remove all resources created by the manifests with: ```bash kubectl delete -f . ``` ---------------------------------------- # Hosting n8n on DigitalOcean ## Prerequisites Self-hosting n8n requires: - Server and container setup knowledge - Application resource management - Security management - n8n configuration ## Latest and Next Versions - Current `latest`: 1.98.2 - Current `next`: 1.99.1 (beta, may be unstable) ## Create a Droplet 1. Log in to DigitalOcean. 2. Select or create a project. 3. Select **Droplets** from the **Manage** menu. 4. Create a new Droplet using the Docker image from the Marketplace. ### Droplet Resources - Choose a basic shared CPU plan. - Opt for SSH key authentication (more secure than password). ## Log in to Your Droplet and Create New User 1. Log in as root. 2. Create a new user: ```bash adduser ``` 3. Grant administrative privileges: ```bash usermod -aG sudo ``` 4. Set up SSH for the new user. 5. Log out and log in via SSH as the new user. ## Clone Configuration Repository Clone the configuration repository: ```bash git clone https://github.com/n8n-io/n8n-docker-caddy.git ``` Change directory: ```bash cd n8n-docker-caddy ``` ## Default Folders and Files - `caddy_config`: Caddy configuration files. - `local_files`: Folder for n8n uploads. ## Create Docker Volumes Persist Caddy cache and n8n data: ```bash sudo docker volume create caddy_data sudo docker volume create n8n_data ``` ## Set Up DNS Create a DNS record for the subdomain pointing to the Droplet's IP address. ## Open Ports Allow incoming traffic on ports 80 and 443: ```bash sudo ufw allow 80 sudo ufw allow 443 ``` ## Configure n8n Set environment variables in the `.env` file: ```bash nano .env ``` Refer to n8n [environment variables documentation](https://docs.n8n.io/hosting/configuration/environment-variables/) for details. ## Docker Compose File The `docker-compose.yml` defines services for Caddy and n8n. Inspect it: ```bash nano docker-compose.yml ``` ## Configure Caddy Edit the `Caddyfile` in the `caddy_config` folder: ```bash nano caddy_config/Caddyfile ``` Example configuration: ```plaintext n8n.. { reverse_proxy n8n:5678 { flush_interval -1 } } ``` ## Start Docker Compose Start n8n and Caddy: ```bash sudo docker compose up -d ``` ## Test Your Setup Open the URL with your subdomain in a browser and verify access with your credentials. ## Stop n8n and Caddy Stop the services: ```bash sudo docker compose stop ``` ## Updating n8n To update n8n, follow these steps: ```bash # Navigate to the directory containing your docker-compose file cd /path/to/your/compose/file/directory # Pull latest version docker compose pull # Stop and remove older version docker compose down # Start the container docker compose up -d ``` ---------------------------------------- # Docker Compose Installation for n8n ## Core Concepts - **Self-hosting Requirements**: - Setup and configure servers and containers - Manage application resources and scaling - Secure servers and applications - Configure n8n - **Versions**: - `latest`: 1.98.2 (for production use) - `next`: 1.99.1 (beta, may be unstable) ## Configuration Instructions ### 1. Install Docker and Docker Compose **Ubuntu Installation Example**: ```bash # Remove incompatible or out-of-date Docker implementations for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done # Install prerequisite packages sudo apt-get update sudo apt-get install ca-certificates curl # Download the repo signing key sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Configure the repository echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Update and install Docker and Docker Compose sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` **Verify Installation**: ```bash docker --version docker compose version ``` ### 2. Optional: Non-root User Access **Grant Access**: ```bash sudo usermod -aG docker ${USER} # Register the `docker` group membership with current session exec sg docker newgrp ``` **For a Different User**: ```bash sudo usermod -aG docker ``` **Verify Group**: ```bash groups ``` ### 3. DNS Setup Create a dedicated subdomain pointed at your server: - **Type**: A - **Name**: `n8n` - **IP address**: (your server's IP address) ### 4. Create an `.env` File Create a project directory: ```bash mkdir n8n-compose cd n8n-compose ``` Create an `.env` file: ```plaintext # DOMAIN_NAME and SUBDOMAIN determine where n8n will be reachable DOMAIN_NAME=example.com SUBDOMAIN=n8n GENERIC_TIMEZONE=Europe/Berlin SSL_EMAIL=user@example.com ``` ### 5. Create Local Files Directory Create a directory for sharing files: ```bash mkdir local-files ``` ### 6. Create Docker Compose File Create a `compose.yaml` file: ```yaml services: traefik: image: "traefik" restart: always command: - "--api.insecure=true" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.web.http.redirections.entryPoint.to=websecure" - "--entrypoints.web.http.redirections.entrypoint.scheme=https" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true" - "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}" - "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" volumes: - traefik_data:/letsencrypt - /var/run/docker.sock:/var/run/docker.sock:ro n8n: image: docker.n8n.io/n8nio/n8n restart: always ports: - "127.0.0.1:5678:5678" labels: - traefik.enable=true - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`) - traefik.http.routers.n8n.tls=true - traefik.http.routers.n8n.entrypoints=web,websecure - traefik.http.routers.n8n.tls.certresolver=mytlschallenge environment: - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME} - N8N_PORT=5678 - N8N_PROTOCOL=https - NODE_ENV=production - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/ - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} volumes: - n8n_data:/home/node/.n8n - ./local-files:/files volumes: n8n_data: traefik_data: ``` ### 7. Start Docker Compose To start n8n: ```bash sudo docker compose up -d ``` To stop the container: ```bash sudo docker compose stop ``` ### 8. Access n8n Access n8n using the subdomain + domain combination from your `.env` configuration (e.g., `https://n8n.example.com`). Access is only available over secure HTTPS. ## Best Practices - Ensure proper security configurations are applied. - Regularly update n8n to maintain stability and security. ---------------------------------------- # Hosting n8n on Google Cloud This guide shows how to self-host n8n on Google Cloud (GCP) with Postgres as the database backend using Kubernetes to manage resources and reverse proxy. ## Prerequisites - gcloud command line tool - gke-gcloud-auth-plugin (install gcloud CLI first) Self-hosting knowledge prerequisites: - Setting up and configuring servers and containers - Managing application resources and scaling - Securing servers and applications - Configuring n8n Current versions: - Latest: 1.98.2 - Next: 1.99.1 (beta, may be unstable) ## Hosting Options Google Cloud offers options suited for hosting n8n: - Cloud Run (for containers) - Compute Engine (VMs) - Kubernetes Engine (containers managed with Kubernetes) This guide uses Google Kubernetes Engine (GKE). ## Create Project Create a new project from the Google Cloud Console: select the project dropdown menu and click **NEW PROJECT**. ## Enable the Kubernetes Engine API Enable the Kubernetes Engine API for this project by searching for "Kubernetes" in the top search bar and selecting "Kubernetes Engine", then click **ENABLE**. ## Create a Cluster From the GKE service page, select **Clusters** > **CREATE**. Choose the "Standard" cluster option (n8n does not work with "Autopilot" clusters). Leave configuration on defaults unless changes are needed. ## Set Kubectl Context Set the GCP instance as the Kubectl context using the connection string from the cluster details page. Run the displayed code snippet in the gcloud CLI. ## Clone Configuration Repository Clone the configuration files from this repository: ```bash git clone https://github.com/n8n-io/n8n-kubernetes-hosting.git -b gcp cd n8n-kubernetes-hosting ``` ## Configure Postgres ### Create Volume for Persistent Storage Create a persistent volume for the Postgres deployment, using the `storage.yaml` manifest. Modify regions in `allowedTopologies > matchedLabelExpressions > values` if needed. ### Postgres Environment Variables Set environment variables in the `postgres-secret.yaml` file (replace placeholders with your values) for database creation, used in `postgres-deployment.yaml`. ## Configure n8n ### Create Volume for File Storage Use persistent volumes to support nodes that interact with files and to persist encryption keys. The `n8n-claim0-persistentvolumeclaim.yaml` manifest is used for this purpose. ```yaml volumes: - name: n8n-claim0 persistentVolumeClaim: claimName: n8n-claim0 ``` ### Pod Resources Specify resource requests and limits in the `n8n-deployment.yaml` and `postgres-deployment.yaml`. ```yaml resources: requests: memory: "250Mi" limits: memory: "500Mi" ``` ### Optional: Environment Variables Configure n8n using environment variables by creating an `n8n-secret.yaml` file. ## Deployments The `n8n-deployment.yaml` and `postgres-deployment.yaml` define the applications to Kubernetes, including environment variables, container images, resource limits, and scaling policies. ## Services The service manifests (`postgres-service.yaml` and `n8n-service.yaml`) expose the services using the Kubernetes load balancer on ports 5432 and 5678. ## Send to Kubernetes Cluster Send all manifests to the cluster with: ```bash kubectl apply -f . ``` ### Namespace Error To resolve namespace errors, apply the namespace manifest with: ```bash kubectl apply -f namespace.yaml ``` ## Set Up DNS Create a DNS record for the subdomain pointing to the IP address of the n8n service, found in the **Services & Ingress** menu. ## Delete Resources Remove resources with: ```bash kubectl delete -f . ``` ---------------------------------------- ## Hosting n8n on Heroku This hosting guide demonstrates self-hosting n8n on Heroku using: - Docker Compose for application component management - Heroku's PostgreSQL service for data storage ### Prerequisites - Knowledge of server and container setup - Application resource management and scaling - Server and application security - n8n configuration **n8n Version Information:** - Current `latest`: 1.98.2 - Current `next`: 1.99.1 (beta version) ## Use the Deployment Template to Create a Heroku Project Use the **Deploy to Heroku** button to initiate deployment: ```html Deploy to Heroku ``` ### Configure Environment Variables Heroku pre-fills configuration from the `env` section of the `app.json` file. Important variables to configure: - **N8N_ENCRYPTION_KEY**: Used to encrypt user account details before saving to the database. - **WEBHOOK_URL**: Should match the application name for correct webhook URL. ### Deploy n8n 1. Select **Deploy app**. 2. After the build completes, links to **Manage App** or **View** the application are provided. ### Changing the Deployment Template Fork the [repository](https://github.com/n8n-io/n8n-heroku) to modify the deployment template. ### The Dockerfile The Dockerfile by default pulls the latest n8n image. To specify a version, update the image tag at the top of the `Dockerfile`. ### Heroku and Exposing Ports Heroku doesn't allow `EXPOSE` command in Docker. Use the `PORT` environment variable provided by Heroku at runtime. Access n8n on port 80 via a web browser. ### Configuring Heroku The `heroku.yml` file contains: - `setup > addons`: Defines Heroku addons (PostgreSQL database addon). - `build`: Specifies how Heroku builds the application using the Docker buildpack. ## Next Steps - Explore more about [configuring](https://docs.n8n.io/hosting/configuration/environment-variables/) and [scaling](https://docs.n8n.io/hosting/scaling/overview/) n8n. ---------------------------------------- # Hosting n8n on Hetzner Cloud ## Prerequisites Self-hosting n8n requires technical knowledge in: - Setting up and configuring servers and containers - Managing application resources and scaling - Securing servers and applications - Configuring n8n ## Current Versions - Latest: `1.98.2` - Next: `1.99.1` (beta) ## Create a Server 1. Log in to the Hetzner Cloud Console. 2. Select or create a project for the server. 3. Click **+ CREATE SERVER**. - Choose "Docker CE" under the **Image** section. - For most usage levels, select the CPX11 plan. - Use SSH for authentication. ## Log in to Your Server Use SSH to log in. Refer to the [Access with SSH/rsync/BorgBackup](https://docs.hetzner.com/robot/storage-box/access/access-ssh-rsync-borg) guide for details. ## Install Docker Compose Run the following commands to install Docker Compose: ```bash apt update && apt -y upgrade apt install docker-compose-plugin ``` ## Clone Configuration Repository Clone the necessary configuration files: ```bash git clone https://github.com/n8n-io/n8n-docker-caddy.git cd n8n-docker-caddy ``` ## Default Folders and Files - `caddy_config`: Holds Caddy configuration files. - `local_files`: For files uploaded to n8n. ## Create Docker Volumes To persist Caddy cache and n8n data, run: ```bash docker volume create caddy_data sudo docker volume create n8n_data ``` ## Set up DNS Create an "A" record for the n8n subdomain pointing to the server's IP. ## Open Ports Allow incoming traffic on ports 80 and 443: ```bash sudo ufw allow 80 sudo ufw allow 443 ``` ## Configure n8n Edit the environment variables in the `.env` file: ```bash nano .env ``` Refer to [Environment variables](https://docs.n8n.io/hosting/configuration/environment-variables/) for details. ## Docker Compose File The Docker Compose file defines services for Caddy and n8n. To view it, run: ```bash nano docker-compose.yml ``` ## Configure Caddy Edit the `Caddyfile` in the `caddy_config` folder: ```bash nano caddy_config/Caddyfile ``` Update the subdomain to match your configuration: ```caddy n8n.. { reverse_proxy n8n:5678 { flush_interval -1 } } ``` ## Start Docker Compose Start n8n and Caddy: ```bash docker compose up -d ``` ## Test Your Setup Access n8n at the subdomain you configured. ## Stop n8n and Caddy To stop the services: ```bash sudo docker compose stop ``` ## Updating n8n To update n8n, follow these steps: ```bash # Navigate to compose file directory cd /path/to/your/compose/file/directory # Pull latest version docker compose pull # Stop and remove the older version docker compose down # Start the container docker compose up -d ``` ---------------------------------------- # Update Self-Hosted n8n ## Best Practices for Updating - **Update frequently:** Avoid having to jump multiple versions at once; aim for at least once a month. - **Check Release notes** for breaking changes. - **Use Environments** to test updates before applying them to your main instance. ## Updating Instructions Refer to the documentation for your installation method: - **Installed with npm:** [Documentation](https://docs.n8n.io/hosting/installation/npm/) - **Installed with Docker:** [Documentation](https://docs.n8n.io/hosting/installation/docker/) ---------------------------------------- # Logging in n8n n8n uses the [winston](https://www.npmjs.com/package/winston) logging library for logging purposes. ## Setup To set up logging in n8n, configure the following environment variables: | Configuration Parameter | Environment Variable | Description | |-----------------------------------|--------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------| | n8n.log.level | N8N_LOG_LEVEL | The log output level. Available options: `error`, `warn`, `info`, `debug`. Default is `info`. | | n8n.log.output | N8N_LOG_OUTPUT | Where to output logs. Options: `console`, `file`. Default is `console`. | | n8n.log.file.location | N8N_LOG_FILE_LOCATION | The log file location, used if output is set to file. Default: `/logs/n8n.log`. | | n8n.log.file.maxsize | N8N_LOG_FILE_SIZE_MAX | Maximum size (in MB) for each log file. Default is 16 MB. | | n8n.log.file.maxcount | N8N_LOG_FILE_COUNT_MAX | Maximum number of log files to keep. Default is 100. | ### Example ```bash # Set the logging level to 'debug' export N8N_LOG_LEVEL=debug # Set log output to both console and a log file export N8N_LOG_OUTPUT=console,file # Set a save location for the log file export N8N_LOG_FILE_LOCATION=/home/jim/n8n/logs/n8n.log # Set a 50 MB maximum size for each log file export N8N_LOG_FILE_MAXSIZE=50 # Set 60 as the maximum number of log files to be kept export N8N_LOG_FILE_MAXCOUNT=60 ``` ## Log Levels n8n utilizes the following standard log levels: - `silent`: Outputs nothing. - `error`: Outputs only errors. - `warn`: Outputs errors and warnings. - `info`: Provides useful progress information. - `debug`: Most verbose output for debugging. ## Development Add log messages during development for better debugging. ### Implementation Details n8n uses the `LoggerProxy` class located in the `workflow` package. To initialize, call `LoggerProxy.init()` with an instance of `Logger`. This initialization occurs once, usually done in the [`start.ts`](https://github.com/n8n-io/n8n/blob/master/packages/cli/src/commands/start.ts) file. ### Adding Logs After initializing the `LoggerProxy` class, import it to any file to add logs. Logging format: ```javascript Logger.('', ...meta); ``` Where `meta` represents additional properties. ### Example ```javascript // Import LoggerProxy import { LoggerProxy as Logger } from 'n8n-workflow'; // Info-level logging of a trigger function Logger.info(`Polling trigger initiated for workflow "${workflow.name}"`, { workflowName: workflow.name, workflowId: workflow.id }); ``` ### Best Practices for Creating Logs - Craft log messages to be human-readable. - Avoid duplicating information in log messages and metadata. - Include multiple IDs (e.g., `executionId`, `workflowId`, `sessionId`) in logs. - Use node types instead of node names for consistency. ## Front-end Logs Currently, front-end logs are not available. Using `Logger` or `LoggerProxy` in the `editor-ui` package will cause errors. Implementation of this feature is planned for future versions. ---------------------------------------- # Monitoring ## API Endpoints There are three API endpoints to check the status of your instance: `/healthz`, `/healthz/readiness`, and `/metrics`. ### `/healthz` and `/healthz/readiness` - **`/healthz`**: Returns a standard HTTP status code. 200 indicates the instance is reachable but doesn't indicate DB status. - Access the endpoint: ```plaintext /healthz ``` - **`/healthz/readiness`**: Returns a HTTP status code of 200 if the DB is connected and migrated, indicating the instance is ready to accept traffic. - Access the endpoint: ```plaintext /healthz/readiness ``` ### `/metrics` - **`/metrics`**: Provides detailed information about the current status of the instance. - Access the endpoint: ```plaintext /metrics ``` - **Feature availability**: The `/metrics` endpoint isn't available on n8n Cloud. ## Enable Metrics and Healthz for Self-Hosted n8n The `/metrics` and `/healthz` endpoints are disabled by default. To enable them, configure your n8n instance: ```plaintext # metrics N8N_METRICS=true # healthz QUEUE_HEALTH_CHECK_ACTIVE=true ``` Refer to [Configuration methods](https://docs.n8n.io/hosting/configuration/configuration-methods/) for more information on configuring using environment variables. ---------------------------------------- # Binary Data in n8n Binary data refers to any file-type data, such as image files or documents, generated or processed during the execution of a workflow. ## Enable Filesystem Mode To handle binary data efficiently and avoid crashes with large files, set the `N8N_DEFAULT_BINARY_DATA_MODE` environment variable to `filesystem`. This will save binary data to disk instead of using memory. **Note:** If using queue mode, keep this variable set to `default` as filesystem mode is not supported in queue mode. ## Binary Data Pruning n8n executes binary data pruning as part of execution data pruning. If multiple binary data modes are configured, pruning operates on the active binary data mode. For instance, if data is stored in S3 and later switched to filesystem mode, n8n will only prune binary data in the filesystem. Refer to the following for additional details: - [Execution Data Pruning](https://docs.n8n.io/hosting/scaling/execution-data/#enable-data-pruning) - [External Storage](https://docs.n8n.io/hosting/scaling/external-storage/#usage) ---------------------------------------- # Self-hosted Concurrency Control Concurrency control is enabled to manage performance and prevent degradation due to excessive concurrent executions in n8n. ## Setup Instructions To enable concurrency control for production executions, set the following environment variable: ```bash export N8N_CONCURRENCY_PRODUCTION_LIMIT=20 ``` ### Important Notes: - Concurrency control applies only to production executions: those initiated from a webhook or trigger node. It does not apply to manual executions, sub-workflows, error executions, or those started from CLI. - Queued executions cannot be retried. Cancelling or deleting a queued execution removes it from the queue. - On instance startup, n8n resumes queued executions up to the concurrency limit and re-enqueues any over the limit. - Monitor concurrency control via logs to watch executions being added and released. ## Comparison to Queue Mode In queue mode, control over concurrent jobs is achieved with the `--concurrency` flag. The `N8N_CONCURRENCY_PRODUCTION_LIMIT` environment variable is utilized in both modes when set to a value other than `-1`, otherwise it defaults to the `--concurrency` flag. ---------------------------------------- # Execution Data To manage the size of the n8n database and avoid running out of storage, it is recommended to disable saving unnecessary execution data and enable the pruning of old execution data. ## Reduce Saved Data ### Environment Variables Configure the following environment variables to manage execution data saving: - **npm**: ```bash export EXECUTIONS_DATA_SAVE_ON_ERROR=all # Save executions ending in errors export EXECUTIONS_DATA_SAVE_ON_SUCCESS=all # Save successful executions export EXECUTIONS_DATA_SAVE_ON_PROGRESS=false # Don't save node progress for each execution export EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false # Don't save manually launched executions ``` - **Docker**: ```bash docker run -it --rm \ --name n8n \ -p 5678:5678 \ -e EXECUTIONS_DATA_SAVE_ON_ERROR=all \ -e EXECUTIONS_DATA_SAVE_ON_SUCCESS=none \ -e EXECUTIONS_DATA_SAVE_ON_PROGRESS=true \ -e EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false \ docker.n8n.io/n8nio/n8n ``` - **Docker Compose**: ```yaml n8n: environment: - EXECUTIONS_DATA_SAVE_ON_ERROR=all - EXECUTIONS_DATA_SAVE_ON_SUCCESS=none - EXECUTIONS_DATA_SAVE_ON_PROGRESS=true - EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false ``` ## Enable Data Pruning To enable automatic pruning of finished executions, configure the following environment variables: - **npm**: ```bash export EXECUTIONS_DATA_PRUNE=true # Activate automatic data pruning export EXECUTIONS_DATA_MAX_AGE=168 # Number of hours after execution that n8n deletes data export EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000 # Number of executions to store ``` - **Docker**: ```bash docker run -it --rm \ --name n8n \ -p 5678:5678 \ -e EXECUTIONS_DATA_PRUNE=true \ -e EXECUTIONS_DATA_MAX_AGE=168 \ docker.n8n.io/n8nio/n8n ``` - **Docker Compose**: ```yaml n8n: environment: - EXECUTIONS_DATA_PRUNE=true - EXECUTIONS_DATA_MAX_AGE=168 - EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000 ``` ### SQLite Considerations When using SQLite, the disk space of any pruned data is reused for future executions data. To free up this space, configure the `DB_SQLITE_VACUUM_ON_STARTUP` environment variable or manually run the [VACUUM](https://www.sqlite.org/lang_vacuum.html) operation. ### Binary Data Pruning Binary data pruning operates on the active binary data mode—for instance, if your instance stored data in S3 and later switched to filesystem mode, n8n only prunes binary data in the filesystem. This behavior may change in future releases. ---------------------------------------- # External Storage for Binary Data n8n can store binary data produced by workflow executions externally, which is useful for managing large amounts of binary data without relying on the filesystem. ## Storing n8n's Binary Data in S3 n8n supports AWS S3 as an external storage solution. Other S3-compatible services are not officially supported. ### Setup 1. Create and configure a bucket following the AWS documentation. 2. Use the following policy, replacing `` with the name of your created bucket: ```json { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": ["s3:*"], "Resource": ["arn:aws:s3::", "arn:aws:s3::/*"] } ] } ``` 3. Set a bucket-level lifecycle configuration to enable automatic deletion of old binary data. 4. Once the bucket is created, set the following environment variables in n8n: ```bash export N8N_EXTERNAL_STORAGE_S3_HOST=... # example: s3.us-east-1.amazonaws.com export N8N_EXTERNAL_STORAGE_S3_BUCKET_NAME=... export N8N_EXTERNAL_STORAGE_S3_BUCKET_REGION=... export N8N_EXTERNAL_STORAGE_S3_ACCESS_KEY=... export N8N_EXTERNAL_STORAGE_S3_ACCESS_SECRET=... ``` If your provider does not require a region, set `N8N_EXTERNAL_STORAGE_S3_BUCKET_REGION` to `'auto'`. 5. To tell n8n to store binary data in S3: ```bash export N8N_AVAILABLE_BINARY_DATA_MODES=filesystem,s3 export N8N_DEFAULT_BINARY_DATA_MODE=s3 ``` To automatically detect credentials: ```bash export N8N_EXTERNAL_STORAGE_S3_AUTH_AUTO_DETECT=true ``` Restart the server to apply the new configuration. ### Usage After enabling S3, n8n writes and reads binary data in the following format: ``` workflows/{workflowId}/executions/{executionId}/binary_data/{binaryFileId} ``` n8n reads older binary data from the filesystem, if `filesystem` is listed in `N8N_AVAILABLE_BINARY_DATA_MODES`. If you switch from S3 to filesystem mode, n8n continues to read data from S3 as long as `s3` is enabled. ### Binary Data Pruning Binary data pruning is based on the active binary data mode. When switching modes, pruning only occurs on the active mode's data storage. ---------------------------------------- # Memory-related Errors in n8n n8n does not restrict the amount of data each node can fetch and process. Excessive memory usage can lead to errors during workflow executions. ## Identifying Out of Memory Situations n8n provides error messages in some out-of-memory situations, such as: - **Execution stopped at this node (n8n may have run out of memory while executing it).** - **Problem running workflow** - **Connection Lost** - **503 Service Temporarily Unavailable** - **Allocation failed - JavaScript heap out of memory** (in server logs) In n8n Cloud or Docker, n8n restarts automatically when encountering memory issues, while an npm setup may require a manual restart. ## Typical Causes of Memory Issues Factors leading to increased memory usage include: - Amount of [JSON data](https://docs.n8n.io/data/data-structure/). - Size of binary data. - Number of nodes in a workflow. - Memory-heavy nodes: the [Code](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/) and older Function nodes. - Manual executions that duplicate data for the frontend. - Concurrent additional workflows. ## Avoiding Out of Memory Situations ### Increase Available Memory For self-hosting n8n, increase the provisioned memory of your instance. Upgrading plans is essential on n8n Cloud for higher memory capacity. ### Reduce Memory Consumption - Split data into smaller chunks (e.g., process 200 rows per execution instead of 10,000). - Avoid using the Code node where feasible. - Minimally use manual executions for larger datasets. - Break workflows into sub-workflows that limit data return to the main workflow. Consider adding a [Loop Over Items](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/) node to create smaller batches and an [Execute Workflow](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow/) node for sub-workflows, ensuring memory is released post-processing. ### Increase Old Memory For self-hosted setups encountering **JavaScript heap out of memory** errors, allocate additional memory to the old memory section of the V8 engine. Use the CLI option or `NODE_OPTIONS` environment variable to set the `--max-old-space-size=SIZE` parameter. ---------------------------------------- # Scaling n8n When running n8n at scale, modifications to the n8n configuration are necessary to ensure optimal performance. ## Modes of Operation n8n can operate in various modes. The `queue` mode offers the best scalability. For configuration details, refer to the documentation on [Queue mode](https://docs.n8n.io/hosting/scaling/queue-mode/). ## Performance Improvement Improving database performance can be achieved through configuring data saving and pruning. For additional information, consult the section on [Execution data](https://docs.n8n.io/hosting/scaling/execution-data/). ---------------------------------------- # Performance and Benchmarking n8n can handle up to 220 workflow executions per second on a single instance, with the ability to scale by adding more instances. ## Performance Factors The performance of n8n depends on: - The workflow type - The resources available to n8n - n8n's scaling options configuration ## Run Your Own Benchmarking To estimate performance for your use case, run n8n's benchmarking framework found in the GitHub repository at `https://github.com/n8n-io/n8n/tree/master/packages/%40n8n/benchmark`. ## Example: Single Instance Performance ### Setup: - Hardware: ECS c5a.large instance (4GB RAM) - n8n setup: Single n8n instance (running in main mode, with Postgres database) - Workflow: Webhook Trigger node, Edit Fields node ### Graph Description The graph shows the percentage of requests to the Webhook Trigger node receiving a response within 100 seconds as requests per second increase. ## Example: Multi-Instance Performance ### Setup: - Hardware: Seven ECS c5a.4xlarge instances (8GB RAM each) - n8n setup: Two webhook instances, four worker instances, one database instance (MySQL), one main instance running n8n and Redis - Workflow: Webhook Trigger node, Edit Fields node - Multi-instance setups use [Queue mode](https://docs.n8n.io/hosting/scaling/queue-mode/) ### Graph Description The graph shows the percentage of requests to the Webhook Trigger node receiving a response within 100 seconds as requests per second increase. ---------------------------------------- # Queue Mode The queue mode in n8n provides the best scalability by allowing multiple instances of n8n to be set up. ## Core Concepts - **Main Instance**: Receives workflow information and triggers but does not execute workflows. - **Worker Instances**: Execute workflows, handle multiple simultaneous executions, and communicate with the main instance. ## Process Flow 1. Main instance processes timers and webhook calls. 2. Execution ID is sent to Redis, a message broker. 3. Workers pick up messages from Redis and retrieve workflow information from the database. 4. Workers execute workflows, write results to the database, and notify Redis upon completion. ## Configuring Workers ### Set Encryption Key Set the encryption key for each worker node: ```bash export N8N_ENCRYPTION_KEY= ``` ### Set Executions Mode Set the environment variable for the main instance and workers: ```bash export EXECUTIONS_MODE=queue ``` Alternatively, set in a configuration file: ```json { "executions.mode": "queue" } ``` ### Start Redis Run Redis in a Docker container: ```bash docker run --name some-redis -p 6379:6379 -d redis ``` Configuration for n8n to interact with Redis: | Configuration File | Environment Variable | Description | | --- | --- | --- | | `queue.bull.redis.host:localhost` | `QUEUE_BULL_REDIS_HOST=localhost` | Redis host. | | `queue.bull.redis.port:6379` | `QUEUE_BULL_REDIS_PORT=6379` | Redis port. | Optional configurations: | Configuration File | Environment Variable | Description | | --- | --- | --- | | `queue.bull.redis.username:USERNAME` | `QUEUE_BULL_REDIS_USERNAME` | Redis username. | | `queue.bull.redis.password:PASSWORD` | `QUEUE_BULL_REDIS_PASSWORD` | Redis password. | | `queue.bull.redis.db:0` | `QUEUE_BULL_REDIS_DB` | Redis database index. | | `queue.bull.redis.timeoutThreshold:10000ms` | `QUEUE_BULL_REDIS_TIMEOUT_THRESHOLD` | Timeout threshold in ms. | | `queue.bull.gracefulShutdownTimeout:30` | `N8N_GRACEFUL_SHUTDOWN_TIMEOUT` | Graceful shutdown timeout in seconds. | ### Start Workers To start worker processes, run: ```bash ./packages/cli/bin/n8n worker ``` For Docker use: ```bash docker run --name n8n-queue -p 5679:5678 docker.n8n.io/n8nio/n8n worker ``` ### Worker Server Endpoints Workers expose optional endpoints: - `/healthz`: Worker status (requires `QUEUE_HEALTH_CHECK_ACTIVE`). - `/healthz/readiness`: DB and Redis readiness status (requires `QUEUE_HEALTH_CHECK_ACTIVE`). - `/metrics`: Metrics for monitoring. ## Webhook Processors Webhook processors require the `EXECUTIONS_MODE` environment variable set. Start the webhook processor with: ```bash ./packages/cli/bin/n8n webhook ``` For Docker: ```bash docker run --name n8n-queue -p 5679:5678 -e "EXECUTIONS_MODE=queue" docker.n8n.io/n8nio/n8n webhook ``` ### Configure Webhook URL Set the webhook URL: ```bash export WEBHOOK_URL=https://your-webhook-url.com ``` ## Configure Load Balancer For multiple webhook processes: - Route requests matching `/webhook/*` to webhook server pool. - All other requests to the main process. ### Disable Webhook Processing in Main Process Disable webhook handling in the main process: ```bash export N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true ``` ## Configure Worker Concurrency Define the number of jobs a worker can run in parallel: ```bash n8n worker --concurrency=5 ``` ## Multi-Main Setup In queue mode, configure multiple main processes for high availability, ensuring that: - All main processes run in queue mode and connect to Postgres and Redis. - All processes run the same n8n version. - Set `N8N_MULTI_MAIN_SETUP_ENABLED` to `true`. Leader key options: | Configuration File | Environment Variable | Description | | --- | --- | --- | | `multiMainSetup.ttl:10` | `N8N_MULTI_MAIN_SETUP_KEY_TTL=10` | TTL for leader key in seconds. | | `multiMainSetup.interval:3` | `N8N_MULTI_MAIN_SETUP_CHECK_INTERVAL=3` | Leader check interval in seconds. | ---------------------------------------- # Block Access to Nodes For security reasons, you can block users from accessing specific n8n nodes using the `NODES_EXCLUDE` environment variable. ## Exclude Nodes Update the `NODES_EXCLUDE` environment variable to include an array of strings for any nodes you want to block. Example: ```plaintext NODES_EXCLUDE: "[\"n8n-nodes-base.executeCommand\", \"n8n-nodes-base.readWriteFile\"]" ``` This setting blocks the following nodes: - [Execute Command](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executecommand/) - [Read/Write Files from Disk](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile/) Users will not be able to search for or use these nodes. ## Suggested Nodes to Block Consider blocking the following nodes based on security risks: - [Execute Command](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executecommand/) - [Read/Write Files from Disk](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile/) ## Related Resources Refer to: - [Nodes Environment Variables](https://docs.n8n.io/hosting/configuration/environment-variables/nodes/) for details on this environment variable. - [Configuration Methods](https://docs.n8n.io/hosting/configuration/configuration-methods/) for setting environment variables. ---------------------------------------- # Disable the public REST API To improve the security of your n8n installation, you can disable the public REST API by setting the following environment variable: ```bash export N8N_PUBLIC_API_DISABLED=true ``` ## Disable the API playground To disable the API playground, set the following environment variable: ```bash export N8N_PUBLIC_API_SWAGGERUI_DISABLED=true ``` ## Related Resources Refer to the following for more information on setting environment variables: - [Deployment environment variables](https://docs.n8n.io/hosting/configuration/environment-variables/deployment/) - [Configuration](https://docs.n8n.io/hosting/configuration/configuration-methods/) ---------------------------------------- # Hardening Task Runners Task runners are responsible for executing code from the Code node. To further harden your task runners, consider the following: ## Run Task Runners as Sidecars in External Mode To increase isolation between the core n8n process and the code in the Code node, run task runners in external mode. - External task runners launch as separate containers, providing a fully isolated environment to execute the JavaScript defined in the Code node. ### Configuration Instructions 1. Set up task runners in **external mode**: - Follow [this guide](https://docs.n8n.io/hosting/configuration/task-runners/#setting-up-external-mode) for configuration steps. ---------------------------------------- # Securing n8n ## High-Level Security Measures - **Security Audit**: Identify security risks. - **Set Up SSL**: Enforce secure connections. - **Set Up Single Sign-On (SSO)**: Manage user accounts. - **Two-Factor Authentication (2FA)**: Enhance user security. ## Granular Security Measures - **Disable Public API**: Prevent access if not used. - **Opt Out of Data Collection**: Prevent automatic collection of anonymous data. - **Block Certain Nodes**: Restrict availability of specific nodes for users. ---------------------------------------- # Security Audit ## Run an Audit You can run an audit using the CLI, the public API, or the n8n node. ### CLI Run the following command: ```bash n8n audit ``` ### API Make a `POST` call to the `/audit` endpoint. You must authenticate as the instance owner. ### n8n Node Add the n8n node to your workflow. Select **Resource** > **Audit** and **Operation** > **Generate**. ## Report Contents The audit generates five risk reports: ### Credentials This report shows: - Credentials not used in a workflow. - Credentials not used in an active workflow. - Credentials not used in a recently active workflow. ### Database This report shows: - Expressions used in **Execute Query** fields in SQL nodes. - Expressions used in **Query Parameters** fields in SQL nodes. - Unused **Query Parameters** fields in SQL nodes. ### File System This report lists nodes that interact with the file system. ### Nodes This report shows: - Official risky nodes (n8n built-in nodes that can expose the instance to exploits). View the list in [n8n code | Audit constants](https://github.com/n8n-io/n8n/blob/master/packages/cli/src/security-audit/constants.ts#L51), under `OFFICIAL_RISKY_NODE_TYPES`. - Community nodes. - Custom nodes. ### Instance This report shows: - Unprotected webhooks in the instance. - Missing security settings. - Whether your instance is outdated. ---------------------------------------- # Set up SSL There are two methods to support TLS/SSL in n8n. ## Use a reverse proxy (recommended) Use a reverse proxy like Traefik or a Network Load Balancer (NLB) in front of the n8n instance. This should also take care of certificate renewals. ## Pass certificates into n8n directly To pass certificates into n8n directly, set the `N8N_SSL_CERT` and `N8N_SSL_KEY` environment variables to point to your generated certificate and key file. Ensure the certificate stays renewed and up to date. Refer to these resources for more information: - [Deployment environment variables](https://docs.n8n.io/hosting/configuration/environment-variables/deployment/) - [Configuration](https://docs.n8n.io/hosting/configuration/configuration-methods/) for setting environment variables. ---------------------------------------- # Set up SAML Single Sign-On (SSO) ## Core Concepts - **SAML (Security Assertion Markup Language)**: A standard for exchanging authentication and authorization data between parties, specifically, between an identity provider and a service provider. ## Feature Availability - Available on Enterprise plans. - Requires access to the n8n instance owner account to enable and configure SAML. - Available from version 0.225.0. ## Configuration Instructions - General guide for setting up SAML in n8n: Refer to the SAML setup documentation for steps and resources for common Identity Providers (IdPs). ### Specific Guides - Okta Workforce Identity SAML setup: Follow step-by-step instructions for configuring Okta. - Troubleshooting: Check the list of things to verify if you encounter issues during setup. - Managing users with SAML: Guidance on performing user management tasks with SAML enabled. ---------------------------------------- # Opting Out of Data Collection in n8n n8n collects anonymous data from self-hosted installations. To opt out of this data telemetry collection, follow these instructions. ## How Collection Works - Data is sent to n8n as events occur, with some periodic reports (e.g., workflow execution counts sent every 6 hours). ## Environment Variables for Opting Out ### Opt Out of Telemetry Events Set the `N8N_DIAGNOSTICS_ENABLED` environment variable to false: ```bash export N8N_DIAGNOSTICS_ENABLED=false ``` ### Opt Out of Version Notifications Set the `N8N_VERSION_NOTIFICATIONS_ENABLED` environment variable to false: ```bash export N8N_VERSION_NOTIFICATIONS_ENABLED=false ``` ## Disable All Connection to n8n Servers For complete isolation from n8n's servers, refer to documentation on isolating n8n. ---------------------------------------- # Self-hosted AI Starter Kit The Self-hosted AI Starter Kit is a docker compose template for a Local AI and Low Code development environment. ## Included Components - **n8n**: Low-code platform with over 400 integrations and advanced AI components. - **Ollama**: Cross-platform LLM platform to install and run local LLMs. - **Qdrant**: Open-source high-performance vector store with a comprehensive API. - **PostgreSQL**: Data storage solution for handling large data volumes securely. ## Build Capabilities - **AI Agents**: Create agents that can schedule appointments. - **PDF Summaries**: Generate summaries of company PDFs while maintaining data privacy. - **Communication Bots**: Build smarter Slackbots for internal communications and IT operations. - **Financial Analysis**: Execute private analyses of financial documents. ## Getting Started Clone the kit from [the GitHub repository](https://github.com/n8n-io/self-hosted-ai-starter-kit) to begin setup. **Note**: The kit is designed for proof-of-concept projects and is not fully optimized for production. Customize and secure it before deploying in a production environment. ---------------------------------------- # Insights Insights provides visibility into workflow performance over time. Key components include: - **Insights Summary Banner**: Displays key metrics from the last 7 days. - **Insights Dashboard**: Offers detailed metrics and historical comparisons. - **Time Saved (Workflow ROI)**: Allows the configuration of time saved per workflow execution. ## Feature Availability - Insights Summary Banner: Available for all plans. - Insights Dashboard: Available only on Pro and Enterprise plans. ## Insights Summary Banner Metrics n8n collects the following metrics: - Total production executions - Total failed production executions - Production execution failure rate - Time saved (when set on active workflows) - Average run time (including wait time) ## Insights Dashboard On Pro and Enterprise plans, the Insights section is accessible via side navigation. Each metric is clickable for detailed charts. The dashboard table displays: - Total production executions - Failed production executions - Failure rate - Time saved - Average run time ## Insights Time Periods The insights summary banner and dashboard show: - Default: 7-day rolling window - Pro Plan: 7 and 14 days - Enterprise Plan: 24 hours, 7 days, 14 days, 30 days, 90 days, 6 months, 1 year ## Setting the Time Saved by a Workflow To set time savings for a workflow: 1. Navigate to the workflow. 2. Select the three dots menu in the top right. 3. Choose settings. 4. Update the **Estimated time saved** value and save. This configuration allows n8n to calculate total time saved based on production executions. ## Disable or Configure Insights Metrics Collection For self-hosted n8n, disable or configure insights collection using [environment variables](https://docs.n8n.io/hosting/configuration/environment-variables/insights/). ## Insights FAQs ### Which Executions are Counted? Insights only collects data from production executions, excluding manual or sub-workflow executions. ### Historic Execution Data Data collection for insights starts from version 1.89.0 onward; prior execution data will not appear in insights. ---------------------------------------- # Integrations n8n calls integrations nodes. Nodes are the entry points for retrieving data, functions to process data, or exits for sending data. They allow creation of complex workflows by connecting multiple nodes. ## Built-in Nodes n8n includes a collection of built-in integrations. Refer to the [Built-in nodes](https://docs.n8n.io/integrations/builtin/node-types/) for documentation on all n8n's built-in nodes. ## Community Nodes Community-built nodes can be installed alongside built-in nodes. Refer to [Community nodes](https://docs.n8n.io/integrations/community-nodes/installation/) for more information. ## Credential-only Nodes and Custom Operations - **Custom operations**: Some nodes do not include all possible operations supported by a product's API. You can make a custom API call using the [HTTP Request](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) node. - **Credential-only nodes**: These are integrations where n8n supports setting up credentials for use in the HTTP Request node, without providing a standalone node. Refer to [Custom operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ## Generic Integrations For services where n8n lacks a specific node or credential-only node, you can use the [HTTP Request](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) node. Details on setting up authentication and creating API calls are available on the node page. ## Additional Resources - To create your own node, refer to the [Creating Nodes](https://docs.n8n.io/integrations/creating-nodes/overview/) section. - For community-built nodes installation and management, see [Community nodes](https://docs.n8n.io/integrations/community-nodes/usage/). - For information on various nodes and their functionalities, check n8n's node libraries: [Core nodes](https://docs.n8n.io/integrations/builtin/core-nodes/), [Actions](https://docs.n8n.io/integrations/builtin/app-nodes/), and [Triggers](https://docs.n8n.io/integrations/builtin/trigger-nodes/). - For adding credentials for different nodes, refer to the [Credentials](https://docs.n8n.io/integrations/builtin/credentials/) section. ---------------------------------------- # Actions Library This section provides information about n8n's Actions. ## Node Types - **Google Sheets**: Integrates Google Sheets functionality. - **Telegram**: Allows interactions with Telegram messaging. - **MySQL**: Facilitates connections to MySQL databases. - **Slack**: Enables communication through Slack. - **Discord**: Integrates with Discord for messaging. - **Postgres**: Connects to PostgreSQL databases. - **Notion**: Facilitates interaction with Notion. - **Gmail**: Enables functionality with Gmail. - **Airtable**: Integrates Airtable functionalities. - **Google Drive**: Allows operations with Google Drive. ## Best Practices - Ensure API keys and sensitive credentials are stored securely. - Test nodes in the n8n environment before deploying workflows. - Use comments in workflows for better clarity and maintainability. ## Workflow Patterns - Use a sequence of nodes to create a cohesive process. - Connect nodes in a logical flow to maximize efficiency. ---------------------------------------- # Action Network Node Use the Action Network node to automate work in Action Network and integrate Action Network with other applications. n8n supports a wide range of Action Network features, including creating, updating, and deleting events, people, tags, and signatures. ## Credentials Refer to Action Network credentials for guidance on setting up authentication. ## Operations - **Attendance** - Create - Get - Get All - **Event** - Create - Get - Get All - **Person** - Create - Get - Get All - Update - **Person Tag** - Add - Remove - **Petition** - Create - Get - Get All - Update - **Signature** - Create - Get - Get All - Update - **Tag** - Create - Get - Get All ## What to Do If Your Operation Isn't Supported If this node doesn't support the operation you want to do, you can use the HTTP Request node to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # ActiveCampaign Node ## Core Concepts The ActiveCampaign node is used to automate tasks within ActiveCampaign and integrate it with other applications. It supports multiple operations including creating, retrieving, updating, and deleting accounts, contacts, orders, customers, and more. ## Credentials Refer to the ActiveCampaign credentials documentation for setting up authentication. ## Operations - **Account** - Create an account - Delete an account - Get data of an account - Get data of all accounts - Update an account - **Account Contact** - Create an association - Delete an association - Update an association - **Contact** - Create a contact - Delete a contact - Get data of a contact - Get data of all contacts - Update a contact - **Contact List** - Add contact to a list - Remove contact from a list - **Contact Tag** - Add a tag to a contact - Remove a tag from a contact - **Connection** - Create a connection - Delete a connection - Get data of a connection - Get data of all connections - Update a connection - **Deal** - Create a deal - Delete a deal - Get data of a deal - Get data of all deals - Update a deal - Create a deal note - Update a deal note - **E-commerce Order** - Create an order - Delete an order - Get data of an order - Get data of all orders - Update an order - **E-commerce Customer** - Create an e-commerce customer - Delete an e-commerce customer - Get data of an e-commerce customer - Get data of all e-commerce customers - Update an e-commerce customer - **E-commerce Order Products** - Get data of all order products - Get data of an ordered product - Get data of an order's products - **List** - Get all lists - **Tag** - Create a tag - Delete a tag - Get data of a tag - Get data of all tags - Update a tag ## Best Practices If a required operation is not supported by the ActiveCampaign node, utilize the HTTP Request node to call the ActiveCampaign API. Configure the HTTP Request node with the following steps: 1. Select **Authentication** > **Predefined Credential Type**. 2. Choose the desired service. 3. Select your credential. Refer to the Custom API operations documentation for further details. ---------------------------------------- # Adalo Node Documentation ## Overview The Adalo node automates tasks in Adalo and integrates it with other applications. It supports operations like creating, getting, updating, and deleting databases, records, and collections. ## Operations - **Collection** - **Create**: Create a new collection. - **Delete**: Delete an existing collection. - **Get**: Retrieve details of a specific collection. - **Get Many**: Retrieve a list of collections. - **Update**: Update details of an existing collection. ## Credentials Refer to [Adalo credentials](https://docs.n8n.io/integrations/builtin/credentials/adalo/) for guidance on authentication setup. ## HTTP Request Node If an operation is unsupported, use the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the desired service. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Affinity Node Documentation Use the Affinity node to automate work in Affinity and integrate with other applications. n8n supports a wide range of Affinity features, including creating, retrieving, updating, and deleting lists, entries, organizations, and persons. ## Credentials Refer to Affinity credentials for guidance on setting up authentication. ## Operations - **List** - Get a list - Get all lists - **List Entry** - Create a list entry - Delete a list entry - Get a list entry - Get all list entries - **Organization** - Create an organization - Delete an organization - Get an organization - Get all organizations - Update an organization - **Person** - Create a person - Delete a person - Get a person - Get all persons - Update a person ## Templates and Examples Browse Affinity integration templates or search all templates. ---------------------------------------- # Agile CRM Node Use the Agile CRM node to automate work in Agile CRM, and integrate Agile CRM with other applications. n8n has built-in support for a wide range of Agile CRM features, including creating, getting, updating, and deleting companies, contracts, and deals. ## Operations - **Company** - Create a new company - Delete a company - Get a company - Get all companies - Update company properties - **Contact** - Create a new contact - Delete a contact - Get a contact - Get all contacts - Update contact properties - **Deal** - Create a new deal - Delete a deal - Get a deal - Get all deals - Update deal properties ## Credentials Refer to Agile CRM credentials documentation for guidance on setting up authentication. This node can enhance the capabilities of an AI agent, allowing many parameters to be set automatically or with AI-directed information. More details can be found in the AI tool parameters documentation. ---------------------------------------- # Airtable Node Documentation Use the Airtable node to automate work in Airtable and integrate Airtable with other applications. n8n supports various Airtable operations, including creating, reading, listing, updating, and deleting tables. ## Credentials Refer to Airtable credentials for guidance on setting up authentication. ## Operations - Append data to a table - Delete data from a table - List data from a table - Read data from a table - Update data in a table ## Node Reference ### Get the Record ID To fetch data for a particular record, you need the Record ID. There are two methods to retrieve the Record ID: #### Create a Record ID Column in Airtable To create a `Record ID` column in your table, refer to Airtable documentation on finding IDs. #### Use the List Operation To get the Record ID of your record, utilize the **List** operation of the Airtable node. This operation returns the Record ID along with the fields. ### Filter Records When Using the List Operation To filter records from your Airtable base, use the **Filter By Formula** option. 1. Select 'List' from the **Operation** dropdown list. 2. Enter the base ID and the table name in the **Base ID** and **Table** fields, respectively. 3. Click on **Add Option** and select 'Filter By Formula' from the dropdown list. 4. Enter the desired formula in the **Filter By Formula** field. For example, `{Organization}='n8n'` returns all users belonging to the organization `n8n`. To exclude users, use `NOT({Organization}='n8n')`. Refer to Airtable’s formula field reference for more information. ## What to Do If Your Operation Isn't Supported If the desired operation isn't supported by this node, use the HTTP Request node to call the service's API. Use the credential created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service you wish to connect to. 3. Select your credential. Refer to Custom API operations for more details. ## Common Issues For common errors or issues and suggested resolutions, refer to n8n's common issues documentation. ---------------------------------------- # Airtop Node Documentation Use the Airtop node to automate work in Airtop and integrate Airtop with other applications, enabling control of a cloud-based web browser for tasks like querying, scraping, and interacting with web pages. ## Credentials Refer to [Airtop credentials](https://docs.n8n.io/integrations/builtin/credentials/airtop/) for guidance on setting up authentication. ## Operations - **Session** - Create session - Save profile on termination - Terminate session - **Window** - Create a new browser window - Load URL - Take screenshot - Close window - **Extraction** - Query page - Query page with pagination - Smart scrape page - **Interaction** - Click an element - Hover on an element - Type ## Node Reference ### Create a Session and Window Create an Airtop browser session to get a **Session ID**, then use it to create a new browser window. After this, you can use any extraction or interaction operation. ### Extract Content Extract content from a web browser using these operations: - **Query page**: Extract information from the current window. - **Query page with pagination**: Extract information from pages with pagination or infinite scrolling. - **Smart scrape page**: Get the window content as markdown. Get JSON responses by using the **JSON Output Schema** parameter in query operations. ### Interacting with Pages Click, hover, or type on elements by describing the element you want to interact with. ### Terminate a Session End your session to save resources. Sessions are automatically terminated based on the **Idle Timeout** set in the **Create Session** operation or can be manually terminated using the **Terminate Session** operation. ## Best Practices If this node doesn't support the operation you want, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # AMQP Sender Node Use the AMQP Sender node to automate work in AMQP Sender and integrate with other applications. n8n supports sending messages through AMQP Sender. ## Credentials Refer to AMQP Sender credentials for guidance on setting up authentication. ## Operations - **Send message**: Sends a message to the specified AMQP queue. ## API Documentation Refer to the relevant sections within n8n documentation for API endpoints and methods related to AMQP integration. ## Best Practices Follow best practices when setting up AMQP Sender nodes, including ensuring correct authentication and message formatting. ---------------------------------------- # APITemplate.io Node Use the APITemplate.io node to automate work in APITemplate.io and integrate with other applications. n8n supports various APITemplate.io features, including getting and creating accounts and PDFs. ## Credentials Refer to [APITemplate.io credentials](https://docs.n8n.io/integrations/builtin/credentials/apitemplateio/) for guidance on setting up authentication. ## Operations - **Account** - **Get** - **Image** - **Create** - **PDF** - **Create** ## Alternative Integration If an operation isn't supported, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Asana Node Use the Asana node to automate work in Asana and integrate Asana with other applications. n8n supports a wide range of Asana features, including creating, updating, deleting, and getting users, tasks, projects, and subtasks. ## Credentials Refer to Asana credentials for guidance on setting up authentication. ## Update Requirement Upgrade to n8n 1.22.2 or above due to changes in Asana's API as of 17th January 2023. ## Operations - **Project** - Create a new project - Delete a project - Get a project - Get all projects - Update a project - **Subtask** - Create a subtask - Get all subtasks - **Task** - Create a task - Delete a task - Get a task - Get all tasks - Move a task - Search for tasks - Update a task - **Task Comment** - Add a comment to a task - Remove a comment from a task - **Task Tag** - Add a tag to a task - Remove a tag from a task - **Task Project** - Add a task to a project - Remove a task from a project - **User** - Get a user - Get all users ## Unsupported Operations If this node doesn't support the operation you want to do, use the HTTP Request node to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Automizy Node Documentation Use the Automizy node to automate work in Automizy and integrate it with other applications. n8n supports a wide range of Automizy features, including managing contacts and lists. ## Credentials Refer to Automizy credentials for guidance on setting up authentication. ## Operations ### Contact Operations - **Create a contact** - **Delete a contact** - **Get a contact** - **Get all contacts** - **Update a contact** ### List Operations - **Create a list** - **Delete a list** - **Get a list** - **Get all lists** - **Update a list** ---------------------------------------- # Autopilot Node Use the Autopilot node to automate work in Autopilot and integrate with other applications. n8n supports a range of Autopilot features, including creating, deleting, and updating contacts, as well as adding contacts to a list. ## Credentials Refer to Autopilot credentials for guidance on setting up authentication. ## Operations - **Contact** - Create/Update a contact - Delete a contact - Get a contact - Get all contacts - **Contact Journey** - Add contact to list - **Contact List** - Add contact to list - Check if contact is on list - Get all contacts on list - Remove a contact from a list - **List** - Create a list - Get all lists ## Templates and Examples - **Twitch Auto-Clip-Generator:** Fetch from Streamers, Clip & Edit on Autopilot - **Add new contacts from Autopilot to Airtable** - **Manage contacts via Autopilot** ---------------------------------------- # AWS Certificate Manager Node Use the AWS Certificate Manager node to automate work in AWS Certificate Manager, and integrate AWS Certificate Manager with other applications. n8n supports various AWS Certificate Manager features, including creating, deleting, getting, and renewing SSL certificates. ## Operations - **Certificate** - **Delete**: Remove a specified SSL certificate. - **Get**: Retrieve details of a specific SSL certificate. - **Get Many**: Retrieve details of multiple SSL certificates. - **Get Metadata**: Obtain metadata associated with a specific SSL certificate. - **Renew**: Renew an existing SSL certificate. ## Credentials Refer to the [AWS Certificate Manager credentials](https://docs.n8n.io/integrations/builtin/credentials/aws/) for guidance on setting up authentication. ## HTTP Request Node for Unsupported Operations If the AWS Certificate Manager node does not support the operation you want to perform: 1. Use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. 2. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 3. Select the service you wish to connect to. 4. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # AWS Comprehend Node Use the AWS Comprehend node to automate work in AWS Comprehend, integrating it with other applications. n8n provides support for various AWS Comprehend features, including text analysis. ## Operations - **Identify the dominant language** - **Analyze the sentiment of the text** ## Credentials Refer to the [AWS Comprehend credentials](https://docs.n8n.io/integrations/builtin/credentials/aws/) for guidance on setting up authentication. ## HTTP Request Node for Unsupported Operations If the desired operation isn't supported by the AWS Comprehend node, use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # AWS DynamoDB Node Use the AWS DynamoDB node to automate work in AWS DynamoDB and integrate it with other applications. The node supports various AWS DynamoDB features, including creating, reading, updating, and deleting items. ## Credentials Refer to AWS credentials for guidance on setting up authentication. ## Operations - **Item** - **Create**: Create a new record or update the current one if it already exists (upsert/put). - **Delete**: Delete an item. - **Get**: Get an item. - **Get All**: Get all items. ## Additional Integration If an operation isn't supported by this node, use the HTTP Request node to call the service's API with the credentials previously created for the service: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # AWS Elastic Load Balancing Node Use the AWS Elastic Load Balancing node to automate tasks in AWS ELB and integrate AWS ELB with other applications. This node supports a wide range of AWS ELB features, including adding, getting, removing, and deleting certificates and load balancers. ## Credentials Refer to AWS ELB credentials for guidance on setting up authentication. ## Operations - **Listener Certificate** - Add - Get Many - Remove - **Load Balancer** - Create - Delete - Get - Get Many This node supports creating and managing application and network load balancers. It does not currently support gateway load balancers. ## HTTP Request Node If this node doesn't support the operation you want to perform, you can use the HTTP Request node to call the service's API. **Steps:** 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # AWS Lambda Node Use the AWS Lambda node to automate work in AWS Lambda and integrate it with other applications. This node supports various AWS Lambda features, including invoking functions. ## Credentials Refer to AWS Lambda credentials documentation for guidance on setting up authentication. ## Operations - **Invoke a function** ## Configuration Instructions If the node does not support the operation you want, use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # AWS Rekognition Node Use the AWS Rekognition node to automate work in AWS Rekognition and integrate it with other applications. n8n supports a wide range of AWS Rekognition features, including image analysis. ## Credentials Refer to AWS Rekognition credentials for guidance on setting up authentication. ## Operations **Image** - **Analyze** ## What to Do If Your Operation Isn't Supported If this node doesn't support the operation you want to do, use the HTTP Request node to call the service's API. Use the credential you created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # AWS S3 Node Documentation The AWS S3 node automates tasks in AWS S3 and integrates it with other applications. It supports operations such as creating and deleting buckets, copying and downloading files, and retrieving folder information. ## Credentials Refer to AWS credentials documentation for setting up authentication. ## Operations ### Bucket Operations - **Create a bucket** - **Delete a bucket** - **Get all buckets** - **Search within a bucket** ### File Operations - **Copy a file** - **Delete a file** - **Download a file** - **Get all files** - **Upload a file** ### Folder Operations - **Create a folder** - **Delete a folder** - **Get all folders** ## Handling Unsupported Operations If the desired operation is unsupported, use the HTTP Request node to call the service's API. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Choose your credential. For further information, refer to custom API operations documentation. ---------------------------------------- # AWS SES Node Use the AWS SES node to automate work in AWS SES and integrate AWS SES with other applications. It supports a wide range of AWS SES features, including creating, getting, deleting, sending, updating, and adding templates and emails. ## Credentials Refer to AWS SES credentials for guidance on setting up authentication. ## Operations - **Custom Verification Email** - Create a new custom verification email template - Delete an existing custom verification email template - Get the custom email verification template - Get all the existing custom verification email templates for your account - Add an email address to the list of identities - Update an existing custom verification email template - **Email** - Send - Send Template - **Template** - Create a template - Delete a template - Get a template - Get all templates - Update a template ## What to Do If Your Operation Isn't Supported If the desired operation isn't supported, you can use the HTTP Request node to call the service's API. Configure it as follows: 1. In the HTTP Request node, select **Authentication > Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # AWS SNS Node Documentation Use the AWS SNS node to automate work in AWS SNS, integrating it with other applications. n8n supports various AWS SNS features, including publishing messages. ## Credentials Refer to [AWS SNS credentials](https://docs.n8n.io/integrations/builtin/credentials/aws/) for guidance on setting up authentication. ## Operations - **Publish a message to a topic** ## Alternatives for Unsupported Operations If an operation isn’t supported, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # AWS SQS Node Use the AWS SQS node to automate work in AWS SNS and integrate AWS SQS with other applications. n8n supports a wide range of AWS SQS features, including sending messages. ## Credentials Refer to the [AWS SQS credentials](https://docs.n8n.io/integrations/builtin/credentials/aws/) for guidance on setting up authentication. ## Operations - **Send a message to a queue**. ## Custom API Operations If this node doesn't support the operation you want to perform, you can use the HTTP Request node to call the service's API. Steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # AWS Textract Node Documentation ## Description The AWS Textract node automates work in AWS Textract and integrates it with other applications. It supports various features, including invoice analysis. ## Credentials Refer to the AWS Textract credentials documentation for guidance on setting up authentication. ## Operations The following operation is supported by the AWS Textract node: - **Analyze Receipt or Invoice** ## Using HTTP Request Node If an operation isn't supported, the HTTP Request node can be used to call the service's API using the credentials created for the service. ### Steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to the Custom API operations documentation for more information. ---------------------------------------- # AWS Transcribe Node Use the AWS Transcribe node to automate work in AWS Transcribe, including creating, deleting, and retrieving transcription jobs. ## Credentials Refer to [AWS Transcribe credentials](https://docs.n8n.io/integrations/builtin/credentials/aws/) for guidance on setting up authentication. ## Operations - **Create a transcription job** - **Delete a transcription job** - **Get a transcription job** - **Get all transcription jobs** ## HTTP Request Node Integration If the desired operation isn't supported by the AWS Transcribe node, use the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Azure Cosmos DB Node Documentation Use the Azure Cosmos DB node to automate work in Azure Cosmos DB and integrate it with other applications. n8n supports a wide range of Azure Cosmos DB features, including creating, getting, updating, and deleting containers and items. ## Operations - **Container**: - **Create** - **Delete** - **Get** - **Get Many** - **Item**: - **Create** - **Delete** - **Get** - **Get Many** - **Execute Query** - **Update** ## Credentials Authentication information for this node can be found [here](https://docs.n8n.io/integrations/builtin/credentials/azurecosmosdb/). ## What to Do If Your Operation Isn't Supported If the desired operation isn't supported by this node, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Choose your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Azure Storage Node Documentation The Azure Storage node supports a wide range of features for automating work within the Azure Storage service or integrating it with other services in your workflow. ## Credentials Authentication information for the Azure Storage node can be found [here](https://docs.n8n.io/integrations/builtin/credentials/azurestorage/). ## Operations ### Blob - **Create blob**: Create a new blob or replace an existing one. - **Delete blob**: Delete an existing blob. - **Get blob**: Retrieve data for a specific blob. - **Get many blobs**: Retrieve a list of blobs. ### Container - **Create container**: Create a new container. - **Delete container**: Delete an existing container. - **Get container**: Retrieve data for a specific container. - **Get many containers**: Retrieve a list of containers. ## What to Do If Your Operation Isn't Supported If the operation you want to perform isn't supported by this node, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Choose your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # BambooHR Node Documentation Use the BambooHR node to automate work in BambooHR and integrate it with other applications. n8n supports a variety of BambooHR features, including creating, deleting, downloading, and retrieving company reports and employee documents. ## Credentials For guidance on setting up authentication, refer to [BambooHR credentials](https://docs.n8n.io/integrations/builtin/credentials/bamboohr/). ## Operations - **Company Report** - Get a company report - **Employee** - Create an employee - Get an employee - Get all employees - Update an employee - **Employee Document** - Delete an employee document - Download an employee document - Get all employee documents - Update an employee document - Upload an employee document - **File** - Delete a company file - Download a company file - Get all company files - Update a company file - Upload a company file ## Templates and Examples Browse [BambooHR integration templates](https://n8n.io/integrations/bamboohr/) or [search all templates](https://n8n.io/workflows/). ---------------------------------------- # Bannerbear Node Documentation Use the Bannerbear node to automate work in Bannerbear, and integrate Bannerbear with other applications. n8n supports a wide range of Bannerbear features, including creating and getting images and templates. ## Credentials Refer to Bannerbear credentials for guidance on setting up authentication. ## Operations - **Image** - Create an image - Get an image - **Template** - Get a template - Get all templates ## Templates and Examples - Render custom text over images - Send Airtable data as tasks to Trello Refer to the [Bannerbear integration templates](https://n8n.io/integrations/bannerbear/) for additional resources. ---------------------------------------- # Baserow Node Documentation Use the Baserow node to automate work in Baserow and integrate Baserow with other applications. n8n supports various Baserow features, including creating, getting, retrieving, and updating rows. ## Credentials Refer to [Baserow credentials](https://docs.n8n.io/integrations/builtin/credentials/baserow/) for guidance on setting up authentication. ## Operations - **Row** - Create a row - Delete a row - Retrieve a row - Retrieve all rows - Update a row ## AI Tool Usage This node can enhance the capabilities of an AI agent, allowing parameters to be set automatically or directed by AI. More information can be found in the [AI tool parameters documentation](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/). ---------------------------------------- # Beeminder Node Use the Beeminder node to automate work in Beeminder and integrate it with other applications. n8n supports a range of Beeminder features including creating, deleting, and updating data points. ## Credentials Refer to Beeminder credentials for guidance on setting up authentication. ## Operations - **data point** - Create data point for a goal - Delete a data point - Get all data points for a goal - Update a data point ## What to do if your operation isn't supported If this node doesn't support the operation you want, you can use the HTTP Request node to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Bitly Node Documentation Use the Bitly node to automate work in Bitly and integrate Bitly with other applications. n8n has built-in support for various Bitly features, including creating, getting, and updating links. ## Credentials Refer to Bitly credentials for guidance on setting up authentication. ## Operations - **Link** - **Create a link** - **Get a link** - **Update a link** ## What to Do If Your Operation Isn't Supported If this node doesn't support the operation you want to do, you can use the HTTP Request node to call the service's API. Use the credential you created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Bitwarden Node Documentation Use the Bitwarden node to automate work in Bitwarden and integrate with other applications. n8n supports various Bitwarden features, including creating, getting, deleting, and updating collections, events, groups, and members. ## Credentials Refer to Bitwarden credentials for guidance on setting up authentication. ## Operations - **Collection** - Delete - Get - Get All - Update - **Event** - Get All - **Group** - Create - Delete - Get - Get All - Get Members - Update - Update Members - **Member** - Create - Delete - Get - Get All - Get Groups - Update - Update Groups ---------------------------------------- # Box Node Documentation Use the Box node to automate work in Box and integrate Box with other applications. It supports a wide range of Box features, including creating, copying, deleting, searching, uploading, and downloading files and folders. ## Credentials Refer to Box credentials for guidance on setting up authentication. ## Operations - **File** - Copy a file - Delete a file - Download a file - Get a file - Search files - Share a file - Upload a file - **Folder** - Create a folder - Get a folder - Delete a folder - Search files - Share a folder - Update folder ## What to Do If Your Operation Isn't Supported If this node doesn't support the operation you want to do, you can use the HTTP Request node to call the service's API. ### Steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Brandfetch Node Documentation Use the Brandfetch node to automate tasks in Brandfetch and integrate with other applications. n8n supports various Brandfetch features, including retrieving company information. ## Credentials Refer to Brandfetch credentials for guidance on setting up authentication. ## Operations - **Return a company's colors** - **Return a company's data** - **Return a company's fonts** - **Return a company's industry** - **Return a company's logo & icon** ---------------------------------------- # Brevo Node Documentation Use the Brevo node to automate tasks in Brevo and integrate it with other applications. n8n supports various Brevo features, including contact management and email sending. ## Credentials For authentication setup, refer to [Brevo credentials](https://docs.n8n.io/integrations/builtin/credentials/brevo/). ## Operations - **Contact** - Create - Create or Update - Delete - Get - Get All - Update - **Contact Attribute** - Create - Delete - Get All - Update - **Email** - Send - Send Template - **Sender** - Create - Delete - Get All ## What to Do If Your Operation Isn't Supported If the desired operation isn't supported by this node, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. ### Steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service you wish to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Bubble Node The Bubble node enables automation within Bubble and integration with other applications. n8n supports various Bubble features, including: ## Operations - **Object** - **Create**: Create an object in Bubble. - **Delete**: Delete an object from Bubble. - **Get**: Retrieve a specific object from Bubble. - **Get All**: Retrieve all objects from Bubble. - **Update**: Update an existing object in Bubble. ## Credentials Refer to Bubble credentials for guidance on setting up authentication. ## Additional Features This node can enhance the capabilities of an AI agent, allowing many parameters to be set automatically or directed by AI. Information on AI tool parameters can be found in the AI tool parameters documentation. ---------------------------------------- # Chargebee Node Documentation Use the Chargebee node to automate work in Chargebee and integrate Chargebee with other applications. The Chargebee node supports various operations, including creating customers, returning invoices, and canceling subscriptions. ## Credentials Refer to Chargebee credentials for guidance on setting up authentication. ## Operations - **Customer** - Create a customer - **Invoice** - Return the invoices - Get URL for the invoice PDF - **Subscription** - Cancel a subscription - Delete a subscription ---------------------------------------- # CircleCI Node Documentation ## Overview Use the CircleCI node to automate work in CircleCI and integrate CircleCI with other applications. n8n supports a wide range of CircleCI features, including getting and triggering pipelines. ## Credentials Refer to [CircleCI credentials](https://docs.n8n.io/integrations/builtin/credentials/circleci/) for guidance on setting up authentication. ## Operations - **Pipeline** - Get a pipeline - Get all pipelines - Trigger a pipeline ## Templates and Examples Browse CircleCI integration templates or search all templates at n8n.io integrations. ---------------------------------------- # Webex by Cisco Node Documentation Use the Webex by Cisco node to automate work in Webex and integrate Webex with other applications. n8n supports a wide range of Webex features, including creating, getting, updating, and deleting meetings and messages. ## Credentials Refer to [Webex credentials](https://docs.n8n.io/integrations/builtin/credentials/ciscowebex/) for guidance on setting up authentication. ## Operations ### Meeting - **Create**: Create a new meeting. - **Delete**: Delete a specific meeting. - **Get**: Retrieve details of a specific meeting. - **Get All**: Retrieve details of all meetings. - **Update**: Update an existing meeting. ### Message - **Create**: Send a new message. - **Delete**: Delete a specific message. - **Get**: Retrieve details of a specific message. - **Get All**: Retrieve all messages. - **Update**: Update an existing message. ## Custom API Operations If this node doesn't support the operation you need, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the Webex API. ### Steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select Webex as the service to connect to. 3. Choose the credential you created for this service. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Clearbit Node Documentation Use the Clearbit node to automate work in Clearbit and integrate Clearbit with other applications. n8n supports various Clearbit features, including autocompleting and looking up companies and persons. ## Credentials Refer to Clearbit credentials for guidance on setting up authentication. ## Operations - **Company** - Auto-complete company names and retrieve logo and domain. - Look up person and company data based on an email or domain. - **Person** - Look up a person and company data based on an email or domain. ---------------------------------------- # ClickUp Node Documentation ## Core Concepts The ClickUp node allows automating tasks and integrating ClickUp with other applications. It supports a variety of features, including creating, retrieving, deleting, and updating resources like folders, checklists, tags, comments, and goals. ## Credentials Refer to ClickUp credentials documentation for guidance on setting up authentication. ## Operations ### Checklist - Create a checklist - Delete a checklist - Update a checklist ### Checklist Item - Create a checklist item - Delete a checklist item - Update a checklist item ### Comment - Create a comment - Delete a comment - Get all comments - Update a comment ### Folder - Create a folder - Delete a folder - Get a folder - Get all folders - Update a folder ### Goal - Create a goal - Delete a goal - Get a goal - Get all goals - Update a goal ### Goal Key Result - Create a key result - Delete a key result - Update a key result ### List - Create a list - Retrieve list's custom fields - Delete a list - Get a list - Get all lists - Get list members - Update a list ### Space Tag - Create a space tag - Delete a space tag - Get all space tags - Update a space tag ### Task - Create a task - Delete a task - Get a task - Get all tasks - Get task members - Set a custom field - Update a task ### Task List - Add a task to a list - Remove a task from a list ### Task Tag - Add a tag to a task - Remove a tag from a task ### Task Dependency - Create a task dependency - Delete a task dependency ### Time Entry - Create a time entry - Delete a time entry - Get a time entry - Get all time entries - Start a time entry - Stop the current running timer - Update a time entry ### Time Entry Tag - Add tag to time entry - Get all time entry tags - Remove tag from time entry ## What to Do If Your Operation Isn't Supported If the desired operation is unsupported, use the HTTP Request node to call the ClickUp API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your created credential. Refer to documentation on custom API operations for more information. ---------------------------------------- # Clockify Node Documentation Use the Clockify node to automate work in Clockify and integrate Clockify with other applications. n8n supports various Clockify features, including creating, updating, getting, and deleting tasks, time entries, projects, and tags. ## Credentials Refer to [Clockify credentials](https://docs.n8n.io/integrations/builtin/credentials/clockify/) for guidance on setting up authentication. ## Operations - **Project** - Create a project - Delete a project - Get a project - Get all projects - Update a project - **Tag** - Create a tag - Delete a tag - Get all tags - Update a tag - **Task** - Create a task - Delete a task - Get a task - Get all tasks - Update a task - **Time Entry** - Create a time entry - Delete a time entry - Get time entry - Update a time entry ## If Your Operation Isn't Supported If this node doesn't support the operation you want to do, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. Use the credential created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Cloudflare Node Documentation Use the Cloudflare node to automate work in Cloudflare and integrate Cloudflare with other applications. n8n supports various Cloudflare features, including managing zone certificates. ## Credentials Refer to [Cloudflare credentials](https://docs.n8n.io/integrations/builtin/credentials/cloudflare/) for guidance on setting up authentication. ## Operations - **Zone Certificate** - **Delete** - Description: Removes a specified zone certificate. - **Get** - Description: Retrieves information about a specific zone certificate. - **Get Many** - Description: Retrieves information about multiple zone certificates. - **Upload** - Description: Uploads a new zone certificate. ## What to Do if Your Operation Isn't Supported Use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API for unsupported operations. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Choose your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Cockpit Node Documentation ## Core Concepts The Cockpit node is designed to automate tasks within Cockpit and enable integration with other applications. It supports various Cockpit features, including the creation of collection entries, data storage from form submissions, and retrieval of singletons. ## Credentials Refer to the [Cockpit credentials](https://docs.n8n.io/integrations/builtin/credentials/cockpit/) for guidance on setting up authentication. ## Operations - **Collection** - Create a collection entry - Get all collection entries - Update a collection entry - **Form** - Store data from a form submission - **Singleton** - Get a singleton ## Templates and Examples - Browse [Cockpit integration templates](https://n8n.io/integrations/cockpit/). - Search all templates at [n8n templates](https://n8n.io/workflows/). ---------------------------------------- # Coda Node Documentation Use the Coda node to automate work in Coda, integrating it with other applications. n8n supports various Coda features, including creating, getting, and deleting controls, formulas, tables, and views. ## Credentials Refer to Coda credentials for guidance on setting up authentication. ## Operations - **Control** - Get a control - Get all controls - **Formula** - Get a formula - Get all formulas - **Table** - Create/Insert a row - Delete one or multiple rows - Get all columns - Get all the rows - Get a column - Get a row - Push a button - **View** - Delete view row - Get a view - Get all views - Get all views columns - Get all views rows - Update row - Push view button ## Templates and Examples Browse Coda integration templates or search all templates. ---------------------------------------- # CoinGecko Node Documentation ## Core Concepts The CoinGecko node is used to automate work in CoinGecko and integrate it with other applications. It supports various features of CoinGecko, including retrieving data related to coins and events. ## Operations ### Coin Operations - **Get a candlestick open-high-low-close chart** for the selected currency. - **Get current data** for a coin. - **Get all coins.** - **Get historical data** (name, price, market, stats) at a given date for a coin. - **Get prices and market-related data** for all trading pairs matching the selected currency. - **Get historical market data**, including price, market cap, and 24h volume (granularity automatic). - **Get the current price** of any cryptocurrency in any other supported currencies. - **Get coin tickers.** ### Event Operations - **Get all events.** ## Best Practices When integrating the CoinGecko node with AI functionalities, many parameters can be configured automatically or influenced by AI. For further details, refer to the [AI tool parameters documentation](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/). ## Code Examples No specific code examples provided in the extracted content. Further examples might be included in templates or integration workflows. ## Templates and Examples - **Analyze Crypto Market with CoinGecko: Volatility Metrics & Investment Signals** - **Tracking your crypto portfolio in Airtable** - **Get the price of BTC in EUR and send an SMS** ---------------------------------------- # Contentful Node Use the Contentful node to automate work in Contentful and integrate Contentful with other applications. n8n supports various Contentful features, including assets, content types, entries, locales, and spaces. ## Credentials Refer to [Contentful credentials](https://docs.n8n.io/integrations/builtin/credentials/contentful/) for guidance on setting up authentication. ## Operations - **Asset** - Get - Get All - **Content Type** - Get - **Entry** - Get - Get All - **Locale** - Get All - **Space** - Get ***Code Example:*** ```json { "nodes": [ { "parameters": { "operation": "getAll" }, "name": "Contentful" } ] } ``` ## Best Practices Ensure you configure the Contentful credentials correctly to enable successful operations. It's recommended to test each function in a controlled environment before deploying them in production workflows. ## Workflow Patterns Use the Contentful node to connect to other nodes that handle data manipulation or integration, creating flexible workflows that automate processes across applications. ---------------------------------------- # Copper Node Use the Copper node to automate work in Copper and integrate it with other applications. n8n supports operations for managing companies, customer sources, leads, projects, and tasks. ## Credentials Refer to [Copper credentials](https://docs.n8n.io/integrations/builtin/credentials/copper/) for guidance on setting up authentication. ## Operations - **Company** - Create - Delete - Get - Get All - Update - **Customer Source** - Get All - **Lead** - Create - Delete - Get - Get All - Update - **Opportunity** - Create - Delete - Get - Get All - Update - **Person** - Create - Delete - Get - Get All - Update - **Project** - Create - Delete - Get - Get All - Update - **Task** - Create - Delete - Get - Get All - Update - **User** - Get All ## Templates and Examples Browse [Copper integration templates](https://n8n.io/integrations/copper/), or search all templates [here](https://n8n.io/workflows/). ---------------------------------------- # Cortex Node Documentation ## Overview Use the Cortex node to automate work in Cortex and integrate Cortex with other applications. n8n supports various Cortex features, including executing analyzers and responders, as well as getting job details. ## Credentials Refer to [Cortex credentials](https://docs.n8n.io/integrations/builtin/credentials/cortex/) for guidance on setting up authentication. ## Operations - **Analyzer** - Execute Analyzer - **Job** - Get job details - Get job report - **Responder** - Execute Responder ## Custom API Operations If the desired operation is not supported by the Cortex node, you can utilize the HTTP Request node to call the service's API. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # CrateDB Node Documentation Use the CrateDB node to automate work in CrateDB and integrate it with other applications. ## Operations - **Execute an SQL query** - **Insert rows in database** - **Update rows in database** ## Node Reference ### Specify a Column's Data Type To specify a column's data type, append the column name with `:type`, where `type` is the data type for the column. For example, to specify the type `int` for the column **id** and type `text` for the column **name**, use the following snippet in the **Columns** field: ```plaintext id:int,name:text ``` ## Credentials Refer to the [CrateDB credentials](https://docs.n8n.io/integrations/builtin/credentials/cratedb/) for guidance on setting up authentication. ---------------------------------------- # crowd.dev Node Documentation Use the crowd.dev node to automate work in crowd.dev and integrate it with other applications. n8n supports functionalities for managing members, notes, organizations, and tasks. ## Credentials Authentication information for this node can be found [here](https://docs.n8n.io/integrations/builtin/credentials/crowddev/). ## Operations - **Activity** - Create or Update with a Member - Create - **Automation** - Create - Destroy - Find - List - Update - **Member** - Create or Update - Delete - Find - Update - **Note** - Create - Delete - Find - Update - **Organization** - Create - Delete - Find - Update - **Task** - Create - Delete - Find - Update ## Related Resources A trigger node for crowd.dev is available. Documentation for the trigger node can be found [here](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.crowddevtrigger/). Refer to [crowd.dev's documentation](https://docs.crowd.dev/reference/getting-started-with-crowd-dev-api) for more information. ## Custom Operations If the desired operation isn't supported, use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Customer.io Node The Customer.io node automates tasks in Customer.io and integrates with other applications. It supports features such as creating and updating customers, tracking events, and retrieving campaigns. ## Operations - **Customer** - Create/Update a customer. - Delete a customer. - **Event** - Track a customer event. - Track an anonymous event. - **Campaign** - Get - Get All - Get Metrics - **Segment** - Add Customer - Remove Customer ## Credentials Refer to Customer.io credentials for guidance on setting up authentication. ## HTTP Request Node If a desired operation is not supported by the Customer.io node, use the HTTP Request node to call the Customer.io API. ### Steps to configure the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the desired service. 3. Choose your credential. Refer to Custom API operations for more information. ---------------------------------------- # DeepL Node Documentation ## Overview The DeepL node automates tasks in DeepL and integrates it with other applications. It supports a variety of DeepL features, including language translation. ## Credentials Refer to [DeepL credentials](https://docs.n8n.io/integrations/builtin/credentials/deepl/) for authentication setup guidance. ## Operations - **Language** - **Translate Data**: Translate text from one language to another. ## Configuration Instructions To use the DeepL node to enhance AI agent capabilities, many parameters can be set automatically or informed by AI. Refer to the [AI tool parameters documentation](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/) for details. ### Using HTTP Request Node If the required operation is not supported, utilize the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Demio Node Use the Demio node to automate work in Demio and integrate Demio with other applications. n8n supports various Demio features, including retrieving and registering events and reports. ## Credentials Refer to Demio credentials for guidance on setting up authentication. ## Operations - **Event** - Get an event - Get all events - Register someone to an event - **Report** - Get an event report ---------------------------------------- # DHL Node Use the DHL node to automate work within the DHL platform and integrate DHL with other applications, supporting various features including tracking shipments. ## Credentials Refer to DHL credentials for guidance on setting up authentication. ## Operations - **Shipment** - **Get Tracking Details**: Retrieve current tracking information for shipments. ## Best Practices - This node can be utilized as an AI tool to enhance the capabilities of an AI agent. Parameters can be set automatically or influenced by AI. ## Related Resources - [DHL Integration Templates](https://n8n.io/integrations/dhl/) - [Using AI Tool Parameters](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/) ---------------------------------------- # Discord Node Documentation Use the Discord node to automate work in Discord and integrate it with other applications. This node supports a range of Discord features, including sending messages in a channel and managing channels. ## Credentials Refer to Discord credentials for guidance on setting up authentication. ## Operations - **Channel** - Create - Delete - Get - Get Many - Update - **Message** - Delete - Get - Get Many - React with Emoji - Send - Send and Wait for Response - **Member** - Get Many - Role Add - Role Remove ## Waiting for a Response Using the **Send and Wait for a Response** operation, you can send a message and pause workflow execution until a user confirms the action or provides more information. ### Response Type Choose between the following types of waiting and approval actions: - **Approval**: Users can approve or disapprove directly from the message. - **Free Text**: Users can submit a response using a form. - **Custom Form**: Users submit a response with a custom-built form. #### Configuration Options - **Limit Wait Time**: Set a time limit for the workflow to automatically resume execution. - **Append n8n Attribution**: Option to mention that the message was sent automatically with n8n. ### Customizations - **Approval Response**: Present only an approval button or both approval and disapproval buttons; customize button labels. - **Free Text Response**: Customize the button label, form title and description, and response button label. - **Custom Form Response**: Build forms and customize each element per the n8n Form trigger’s form elements. ## Common Issues For common errors or issues and suggested resolution steps, refer to Common Issues. ## Alternative API Operation If an operation isn't supported by the Discord node, use the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service to connect to and select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Discourse Node Documentation Use the Discourse node to automate tasks and integrate Discourse with other applications. It supports operations for managing categories, groups, posts, and users. ## Credentials Refer to Discourse credentials for guidance on setting up authentication. ## Operations - **Category** - Create a category - Get all categories - Update a category - **Group** - Create a group - Get a group - Get all groups - Update a group - **Post** - Create a post - Get a post - Get all posts - Update a post - **User** - Create a user - Get a user - Get all users - **User Group** - Create a user to group - Remove user from group ## Custom API Operations If this node doesn't support the desired operation, use the HTTP Request node to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Disqus Node Documentation Use the Disqus node to automate work in Disqus and integrate with other applications. n8n supports a wide range of Disqus features. ## Credentials Refer to [Disqus credentials](https://docs.n8n.io/integrations/builtin/credentials/disqus/) for setting up authentication. ## Operations - **Forum** - Return forum details - Return a list of categories within a forum - Return a list of threads within a forum - Return a list of posts within a forum ## Best Practices - For setting up the Disqus node efficiently, ensure that you have the correct authentication credentials configured as per the guidelines in the credentials section. ## Templates and Examples - Browse Disqus integration templates for practical usage examples. ---------------------------------------- # Drift Node Use the Drift node to automate work in Drift and integrate Drift with other applications. n8n supports a wide range of Drift features, including creating, updating, deleting, and getting contacts. ## Operations - **Contact** - Create a contact - Get custom attributes - Delete a contact - Get a contact - Update a contact ## Credentials Refer to [Drift credentials](https://docs.n8n.io/integrations/builtin/credentials/drift/) for guidance on setting up authentication. ## HTTP Request Node If the Drift node doesn't support the operation you want to perform, you can use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Dropbox Node Documentation ## Core Concepts The Dropbox node allows automation and integration with Dropbox. It supports various features such as creating, downloading, moving, and copying files and folders. ## Credentials Refer to Dropbox credentials for guidance on setting up authentication. ## Operations The following operations are supported by the Dropbox node: ### File Operations - **Copy a file** - **Delete a file** - **Download a file** - **Move a file** - **Upload a file** ### Folder Operations - **Copy a folder** - **Create a folder** - **Delete a folder** - **Return the files and folders in a given folder** - **Move a folder** ### Search - **Query** ## Best Practices If an operation is not supported by the Dropbox node, use the HTTP Request node to call the Dropbox API directly. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Dropcontact Node Documentation ## Overview The Dropcontact node integrates with Dropcontact to automate tasks, including fetching contacts. ## Credentials Refer to [Dropcontact credentials](https://docs.n8n.io/integrations/builtin/credentials/dropcontact/) for guidance on setting up authentication. ## Operations - **Contact** - **Enrich** - **Fetch Request** ## Handling Unsupported Operations If the Dropcontact node does not support the desired operation, use the **HTTP Request node** to call the service's API. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # E-goi Node ## Overview Use the E-goi node to automate work in E-goi and integrate E-goi with other applications. n8n supports a range of E-goi features, including creating, updating, deleting, and retrieving contacts. ## Credentials Refer to E-goi credentials documentation for guidance on setting up authentication. ## Operations ### Contact - **Create a member** - **Get a member** - **Get all members** - **Update a member** ## Templates and Examples Browse E-goi integration templates or search all templates for additional resources. ---------------------------------------- # Elasticsearch Node Documentation ## Overview The Elasticsearch node automates work in Elasticsearch and integrates it with other applications. It supports operations like creating, updating, deleting, and retrieving documents and indexes. ## Credentials Refer to Elasticsearch credentials documentation for authentication setup. ## Operations - **Document** - Create a document - Delete a document - Get a document - Get all documents - Update a document - **Index** - Create an index - Delete an index - Get an index - Get all indexes ## Using the HTTP Request Node If an operation is not supported by the Elasticsearch node, use the HTTP Request node to call the service's API. Steps: 1. Select **Authentication** > **Predefined Credential Type** in the HTTP Request node. 2. Choose the service to connect to. 3. Select your credential. Refer to Custom API operations documentation for further information. ---------------------------------------- # Elastic Security Node Use the Elastic Security node to automate work in Elastic Security and integrate with other applications. n8n supports various Elastic Security features, including creating, updating, deleting, retrieving, and managing cases. ## Credentials Refer to [Elastic Security credentials](https://docs.n8n.io/integrations/builtin/credentials/elasticsecurity/) for guidance on setting up authentication. ## Operations - **Case** - Create a case - Delete a case - Get a case - Retrieve all cases - Retrieve a summary of all case activity - Update a case - **Case Comment** - Add a comment to a case - Get a case comment - Retrieve all case comments - Remove a comment from a case - Update a comment in a case - **Case Tag** - Add a tag to a case - Remove a tag from a case - **Connector** - Create a connector ## Templates and Examples Browse Elastic Security integration templates or search all templates. ---------------------------------------- # Emelia Node Use the Emelia node to automate work in Emelia and integrate Emelia with other applications. It supports various operations related to campaigns and contact lists. ## Credentials Refer to [Emelia credentials](https://docs.n8n.io/integrations/builtin/credentials/emelia/) for guidance on setting up authentication. ## Operations - **Campaign** - Add Contact - Create - Get - Get All - Pause - Start - **Contact List** - Add - Get All ## Templates and Examples Explore integration templates related to Emelia or search for various templates in the n8n workflow repository. ---------------------------------------- # ERPNext Node Documentation ## Overview The ERPNext node automates tasks in ERPNext and integrates it with other applications. It supports various ERPNext features, including document creation, updates, retrieval, and deletion. ## Credentials Refer to [ERPNext credentials](https://docs.n8n.io/integrations/builtin/credentials/erpnext/) for setup guidance on authentication. ## Operations - **Create a document** - **Delete a document** - **Retrieve a document** - **Retrieve all documents** - **Update a document** ## What to Do If Your Operation Isn't Supported If the desired operation is unsupported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API by following these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Facebook Graph API Node Documentation Use the Facebook Graph API node to automate work in Facebook Graph API and integrate it with other applications. It supports various operations including GET, POST, DELETE. ## Operations - **Default** - GET - POST - DELETE - **Video Uploads** - GET - POST - DELETE ## Parameters - **Host URL**: The host URL for the request. - **Default**: Requests are sent to `graph.facebook.com`. - **Video**: Requests are sent to `graph-video.facebook.com` for video uploads only. - **HTTP Request Method**: Choose from: - **GET** - **POST** - **DELETE** - **Graph API Version**: Version of the [Facebook Graph API](https://developers.facebook.com/docs/graph-api/changelog) used for the request. - **Node**: The node on which to operate, e.g., `//feed`. Refer to the [official Facebook Developer documentation](https://developers.facebook.com/docs/graph-api/using-graph-api). - **Edge**: Represents collections of objects attached to the node. - **Ignore SSL Issues**: Allows downloading the response even if SSL certificate validation fails. - **Send Binary File**: Available for `POST` operations. If enabled, binary data is sent as the body. Requires: - **Input Binary Field**: Name of the binary property containing the data for the file upload. ---------------------------------------- # FileMaker Node Documentation ## Description The FileMaker node allows automation of tasks within FileMaker and integration with other applications. It supports features such as creating, finding, getting, editing, and duplicating records. ## Credentials Refer to the [FileMaker credentials](https://docs.n8n.io/integrations/builtin/credentials/filemaker/) for authentication setup guidance. ## Operations The FileMaker node supports the following operations: - Find Records - Get Records - Get Records by Id - Perform Script - Create Record - Edit Record - Duplicate Record - Delete Record ## Technical Templates and Examples - **Create, update, and retrieve a record from FileMaker** - **Convert FileMaker Data API to Flat File Array** - **Integrate Xero with FileMaker using Webhooks** ### Best Practices Utilizing this node can enhance AI capabilities by automatically setting many parameters through AI-driven data. For details, refer to the [AI tool parameters documentation](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/). ---------------------------------------- # Flow Node Documentation ## Overview The Flow node in n8n automates tasks within Flow and integrates Flow with other applications, supporting various operations such as creating, updating, and retrieving tasks. ## Credentials Refer to Flow credentials for setting up authentication. ## Operations - **Task Operations** - **Create a new task**: Creates a new task in Flow. - **Update a task**: Updates an existing task in Flow. - **Get a task**: Retrieves a specific task from Flow. - **Get all the tasks**: Retrieves all tasks from Flow. ## Best Practices It is recommended to familiarize yourself with the Flow API and its capabilities to fully leverage the potential of n8n integrations. ## Configuration Instructions For detailed setup guidance, please refer to the relevant n8n documentation and integrate Flow accordingly. ---------------------------------------- # Freshdesk Node Use the Freshdesk node to automate work in Freshdesk and integrate Freshdesk with other applications. n8n has built-in support for a wide range of Freshdesk features, including creating, updating, deleting, and retrieving contacts and tickets. ## Credentials Refer to [Freshdesk credentials](https://docs.n8n.io/integrations/builtin/credentials/freshdesk/) for guidance on setting up authentication. ## Operations - **Contact** - **Create a new contact** - **Delete a contact** - **Get a contact** - **Get all contacts** - **Update a contact** - **Ticket** - **Create a new ticket** - **Delete a ticket** - **Get a ticket** - **Get all tickets** - **Update a ticket** ---------------------------------------- # Freshservice Node Documentation Use the Freshservice node to automate work in Freshservice and integrate it with other applications. ## Credentials Refer to Freshservice credentials for guidance on setting up authentication. ## Operations - **Agent** - Create an agent - Delete an agent - Retrieve an agent - Retrieve all agents - Update an agent - **Agent Group** - Create an agent group - Delete an agent group - Retrieve an agent group - Retrieve all agent groups - Update an agent group - **Agent Role** - Retrieve an agent role - Retrieve all agent roles - **Announcement** - Create an announcement - Delete an announcement - Retrieve an announcement - Retrieve all announcements - Update an announcement - **Asset Type** - Create an asset type - Delete an asset type - Retrieve an asset type - Retrieve all asset types - Update an asset type - **Change** - Create a change - Delete a change - Retrieve a change - Retrieve all changes - Update a change - **Department** - Create a department - Delete a department - Retrieve a department - Retrieve all departments - Update a department - **Location** - Create a location - Delete a location - Retrieve a location - Retrieve all locations - Update a location - **Problem** - Create a problem - Delete a problem - Retrieve a problem - Retrieve all problems - Update a problem - **Product** - Create a product - Delete a product - Retrieve a product - Retrieve all products - Update a product - **Release** - Create a release - Delete a release - Retrieve a release - Retrieve all releases - Update a release - **Requester** - Create a requester - Delete a requester - Retrieve a requester - Retrieve all requesters - Update a requester - **Requester Group** - Create a requester group - Delete a requester group - Retrieve a requester group - Retrieve all requester groups - Update a requester group - **Software** - Create a software application - Delete a software application - Retrieve a software application - Retrieve all software applications - Update a software application - **Ticket** - Create a ticket - Delete a ticket - Retrieve a ticket - Retrieve all tickets - Update a ticket ## Templates and Examples Browse Freshservice integration templates or search all templates. ---------------------------------------- # Freshworks CRM Node Documentation Use the Freshworks CRM node to automate work in Freshworks CRM and integrate with other applications. n8n supports a range of Freshworks CRM features including creating, updating, deleting, and retrieving accounts, appointments, contacts, deals, notes, and sales activity. ## Credentials Refer to Freshworks CRM credentials for guidance on setting up authentication. ## Operations ### Account - Create an account - Delete an account - Retrieve an account - Retrieve all accounts - Update an account ### Appointment - Create an appointment - Delete an appointment - Retrieve an appointment - Retrieve all appointments - Update an appointment ### Contact - Create a contact - Delete a contact - Retrieve a contact - Retrieve all contacts - Update a contact ### Deal - Create a deal - Delete a deal - Retrieve a deal - Retrieve all deals - Update a deal ### Note - Create a note - Delete a note - Update a note ### Sales Activity - Retrieve a sales activity - Retrieve all sales activities ### Task - Create a task - Delete a task - Retrieve a task - Retrieve all tasks - Update a task ## What to Do If Your Operation Isn't Supported If this node doesn't support the operation you want, you can use the HTTP Request node to call the service's API. Use credentials created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # GetResponse Node Documentation Use the GetResponse node to automate work in GetResponse and integrate it with other applications. n8n supports a range of GetResponse features, including creating, updating, deleting, and retrieving contacts. ## Credentials Refer to GetResponse credentials documentation for guidance on setting up authentication. ## Operations - **Contact** - Create a new contact - Delete a contact - Get a contact - Get all contacts - Update contact properties ## Custom API Operations If the node doesn't support the operation you want to perform, use the HTTP Request node to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations documentation for more information. ---------------------------------------- # Ghost Node Documentation ## Overview Use the Ghost node to automate work in Ghost, integrating it with other applications. n8n supports various Ghost features including creating, updating, deleting, and retrieving posts through the Admin and Content API. ## Credentials Refer to [Ghost credentials](https://docs.n8n.io/integrations/builtin/credentials/ghost/) for authentication setup. ## Operations ### Admin API - **Post Operations** - Create a post - Delete a post - Get a post - Get all posts - Update a post ### Content API - **Post Operations** - Get a post - Get all posts ## Configuration Instructions If an operation is not supported: 1. Use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. 2. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 3. Select the service to connect to and your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # GitHub Node Documentation The GitHub node in n8n automates tasks in GitHub and integrates it with other applications, supporting various operations including creating, updating, deleting, and editing files, repositories, issues, releases, and users. ## Credentials For authentication setup, refer to the [GitHub credentials documentation](https://docs.n8n.io/integrations/builtin/credentials/github/). ## Operations - **File** - Create - Delete - Edit - Get - List - **Issue** - Create - Create Comment - Edit - Get - Lock - **Organization** - Get Repositories - **Release** - Create - Delete - Get - Get Many - Update - **Repository** - Get - Get Issues - Get License - Get Profile - Get Pull Requests - List Popular Paths - List Referrers - **Review** - Create - Get - Get Many - Update - **User** - Get Repositories - Invite - **Workflow** - Disable - Dispatch - Enable - Get - Get Usage - List ## Alternatives for Unsupported Operations If the desired operation is not supported by the GitHub node, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. Follow these steps in the HTTP Request node: 1. Set **Authentication** to **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. For additional information, refer to the [Custom API operations documentation](https://docs.n8n.io/integrations/custom-operations/). ---------------------------------------- # GitLab Node Documentation ## Core Concepts The GitLab node in n8n is used to automate tasks within GitLab and to integrate GitLab with other applications. It supports various GitLab features, such as managing issues, repositories, releases, and users. ## Credentials Refer to [GitLab credentials](https://docs.n8n.io/integrations/builtin/credentials/gitlab/) for guidance on setting up authentication. ## Operations ### File - **Create**: Create a new file. - **Delete**: Delete a file. - **Edit**: Edit an existing file. - **Get**: Retrieve a file's data. - **List**: List files. ### Issue - **Create a new issue**: Create a new issue in a repository. - **Create a new comment on an issue**: Add a comment to an existing issue. - **Edit an issue**: Modify an existing issue. - **Get the data of a single issue**: Retrieve details of a specific issue. - **Lock an issue**: Lock an issue to prevent further comments. ### Release - **Create a new release**: Initiate a new release. - **Delete a new release**: Remove an existing release. - **Get a new release**: Retrieve details of a specific release. - **Get all releases**: List all releases for a repository. - **Update a new release**: Modify an existing release. ### Repository - **Get the data of a single repository**: Retrieve details of a specific repository. - **Returns issues of a repository**: List issues associated with a repository. ### User - **Returns the repositories of a user**: List repositories owned by a specific user. ## Configuration Instructions To use unsupported operations with the GitLab node: 1. Use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the GitLab API directly. 2. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 3. Choose the specific service and the corresponding credentials. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ## Best Practices For integration and usage, refer to the fast track recipes and templates available within the n8n community for common use cases. ### Related Resources - [GitLab API Documentation](https://docs.gitlab.com/ee/api/rest/) for more information about the service. - Trigger node for GitLab can be found [here](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.gitlabtrigger/). ---------------------------------------- # Gmail Node ## Core Concepts The Gmail node allows automation of tasks within Gmail and integration with other applications, supporting operations such as creating, updating, deleting, and retrieving drafts, messages, labels, and threads. ### Credentials Refer to the Google credentials documentation for guidance on setting up authentication. ## Operations ### Draft - **Create**: Create a draft. - **Delete**: Delete a draft. - **Get**: Retrieve a draft. - **Get Many**: Retrieve multiple drafts. ### Label - **Create**: Create a label. - **Delete**: Delete a label. - **Get**: Retrieve a label. - **Get Many**: Retrieve multiple labels. ### Message - **Add Label**: Add a label to a message. - **Delete**: Delete a message. - **Get**: Retrieve a message. - **Get Many**: Retrieve multiple messages. - **Mark as Read**: Mark a message as read. - **Mark as Unread**: Mark a message as unread. - **Remove Label**: Remove a label from a message. - **Reply**: Reply to a message. - **Send**: Send a message. ### Thread - **Add Label**: Add a label to a thread. - **Delete**: Delete a thread. - **Get**: Retrieve a thread. - **Get Many**: Retrieve multiple threads. - **Remove Label**: Remove a label from a thread. - **Reply**: Reply to a message in a thread. - **Trash**: Trash a thread. - **Untrash**: Untrash a thread. ## Configuration Instructions If an operation is not supported by the Gmail node, utilize the HTTP Request node to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect. 3. Select your credential. Refer to the Custom API operations documentation for further information. ## Related Resources Refer to Google's Gmail API documentation for more details on the API integrated with this node. n8n also provides a trigger node for Gmail. ## Common Issues Visit the Common Issues documentation for common errors and suggested resolution steps. ---------------------------------------- # Gong Node Use the Gong node to automate work in Gong and integrate Gong with other applications. n8n supports a wide range of Gong features, including getting calls and users. ## Credentials Refer to the authentication information for this node [here](https://docs.n8n.io/integrations/builtin/credentials/gong/). ## Operations - **Call** - Get - Get Many - **User** - Get - Get Many ## Instructions for Unsupported Operations If the desired operation is not supported by this node, use the HTTP Request node to call the service's API. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Google Ads Node Use the Google Ads node to automate workflows in Google Ads and integrate it with other applications. ## Credentials Refer to [Google Ads credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for setting up authentication. ## Operations - **Campaign** - Get all campaigns - Get a campaign ## HTTP Request Node If your desired operation is not supported by the Google Ads node, you can use the HTTP Request node to call the Google Ads API. ### Steps to Connect using HTTP Request Node 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Google Analytics Node ## Overview The Google Analytics node automates tasks within Google Analytics and integrates it with other applications, supporting various features like generating reports and tracking user activities. ## Credentials Refer to [Google Analytics credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for authentication setup. ## Operations - **Report** - **Get**: Fetches reports from Google Analytics. - **User Activity** - **Search**: Searches user activity data. ## Alternative for Unsupported Operations If a required operation is not supported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the Google Analytics API. ### HTTP Request Configuration Steps 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service to connect. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Google BigQuery Node Use the Google BigQuery node to automate work in Google BigQuery and integrate it with other applications. This node supports various features including creating and retrieving records. ## Credentials Refer to [Google BigQuery credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for guidance on setting up authentication. ## Operations - **Execute Query** - **Insert** ## Configuration Instructions If this node doesn't support the operation you want to perform, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the Google BigQuery API. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ## Related Resources Refer to [Google BigQuery's documentation](https://cloud.google.com/bigquery/docs/reference/rest) for more information about the service. ---------------------------------------- # Google Books Node Documentation Use the Google Books node to automate work in Google Books and integrate it with other applications. ## Credentials Refer to [Google credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for guidance on setting up authentication. ## Operations ### Bookshelf - Retrieve a specific bookshelf resource for the specified user - Get all public bookshelf resources for the specified user ### Bookshelf Volume - Add a volume to a bookshelf - Clear all volumes from a bookshelf - Get all volumes in a specific bookshelf for the specified user - Move a volume within a bookshelf - Remove a volume from a bookshelf ### Volume - Get a volume resource based on ID - Get all volumes filtered by query ## Best Practices for Unsupported Operations If this node does not support the operation you want to perform, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. **Setup Steps:** 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Google Business Profile Node The Google Business Profile node allows automation within Google Business Profile and integration with other applications. It supports various features for creating, updating, and deleting posts and reviews. ## Operations - **Post** - **Create**: Create a new post - **Delete**: Delete an existing post - **Get**: Retrieve a specific post - **Get Many**: Retrieve multiple posts - **Update**: Update an existing post - **Review** - **Delete Reply**: Remove a reply to a review - **Get**: Retrieve a specific review - **Get Many**: Retrieve multiple reviews - **Reply**: Respond to a review ## Authentication Refer to the authentication details for this node [here](https://docs.n8n.io/integrations/builtin/credentials/google/). ## Custom API Operations If an operation is unsupported by this node, use the HTTP Request node to call the Google Business Profile API. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the desired service for connection. 3. Select your credential. For more information on custom API operations, check [here](https://docs.n8n.io/integrations/custom-operations/). ## Related Resources - Trigger node documentation for Google Business Profile can be found [here](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.googlebusinessprofiletrigger/). - Additional information about Google Business Profile services can be found in their [documentation](https://developers.google.com/my-business/reference/rest). ---------------------------------------- # Google Calendar Node Use the Google Calendar node to automate work in Google Calendar and integrate Google Calendar with other applications. This node supports various operations related to calendar events. ## Credentials Refer to [Google Calendar credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for guidance on setting up authentication. ## Operations - **Calendar** - **Availability**: Determine if a time-slot is available in a calendar. - **Event** - **Create**: Add an event to a calendar. - **Delete**: Delete an event. - **Get**: Retrieve an event. - **Get Many**: Retrieve all events from a calendar. - **Update**: Update an event. ## Related Resources - n8n provides a trigger node for Google Calendar. Documentation for the trigger node can be found [here](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.googlecalendartrigger/). - Refer to [Google Calendar's documentation](https://developers.google.com/calendar/api/v3/reference) for more information about the service. ---------------------------------------- # Google Chat Node Documentation Use the Google Chat node to automate work in Google Chat and integrate Google Chat with other applications. n8n supports various Google Chat features, including managing memberships and messages. ## Credentials Refer to Google credentials for guidance on setting up authentication. ## Operations - **Member** - Get a membership - Get all memberships in a space - **Message** - Create a message - Delete a message - Get a message - Send and Wait for Response - Update a message - **Space** - Get a space - Get all spaces the caller is a member of ## Waiting for a Response Use the **Send and Wait for a Response** operation to send a message and pause workflow execution until confirmation or additional information is received. ### Response Type 1. **Approval**: Users can approve or disapprove from within the message. 2. **Free Text**: Users can submit a response with a form. 3. **Custom Form**: Users can submit a response using a custom form. #### Configuration Options for Response Types - **Limit Wait Time**: Controls workflow resume after a specified time limit. - **Append n8n Attribution**: Option to mention that the message was sent automatically by n8n. ### Approval Response Customization Customize the visibility of the buttons (approval only or both approval and disapproval) and label the buttons accordingly. ### Free Text Response Customization Customize the message button label, form title, description, and the response button label. ### Custom Form Response Customization Build a form with customizable fields and options, as per the n8n Form trigger's settings. Include options to customize button labels and form titles. ## Templates and Examples - **AI agent chat** - **Automate Multi-Platform Social Media Content Creation with AI** - **Ask questions about a PDF using AI** ---------------------------------------- # Google Cloud Firestore Node ## Description The Google Cloud Firestore node automates and integrates work with Google Cloud Firestore, supporting various operations for managing documents and collections. ## Operations ### Document - **Create a document**: Adds a new document to a collection. - **Create/Update a document**: Adds a new document or updates an existing document based on its ID. - **Delete a document**: Removes a document from a collection. - **Get a document**: Retrieves a specific document by its ID. - **Get all documents from a collection**: Fetches all documents within a specified collection. - **Run a query against your documents**: Executes a query to retrieve documents based on specified conditions. ### Collection - **Get all root collections**: Retrieves all top-level collections from the Firestore database. ## Configuration Instructions - **Authentication**: Refer to [Google credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for guidance on setting up authentication. ## Additional Information If the desired operation is not supported by the Google Cloud Firestore node, utilize the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Choose your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more details. ---------------------------------------- # Google Cloud Natural Language Node Use the Google Cloud Natural Language node to automate work in Google Cloud Natural Language and integrate it with other applications. ## Credentials Refer to Google Cloud Natural Language credentials for guidance on setting up authentication. ## Operations - **Document** - **Analyze Sentiment** ## What to do if your operation isn't supported If the node doesn't support the operation you want to perform, you can use the HTTP Request node to call the service's API. Steps include: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Google Cloud Realtime Database Node Use the Google Cloud Realtime Database node to automate work in Google Cloud Realtime Database and integrate it with other applications. n8n supports various Google Cloud Realtime Database features, including writing, deleting, getting, and appending databases. ## Credentials Refer to Google Cloud Realtime Database credentials for guidance on setting up authentication. ## Operations - **Write data to a database** - **Delete data from a database** - **Get a record from a database** - **Append to a list of data** - **Update an item in a database** ---------------------------------------- # Google Cloud Storage Node Use the Google Cloud Storage node to automate tasks in Google Cloud Storage and integrate it with other applications. n8n supports various Google Cloud Storage features, including creating, updating, deleting, and retrieving buckets and objects. ## Credentials Refer to [Google Cloud Storage credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for guidance on setting up authentication. ## Operations ### Bucket - **Create**: Create a new bucket. - **Delete**: Delete an existing bucket. - **Get**: Retrieve a bucket. - **Get Many**: Retrieve multiple buckets. - **Update**: Update an existing bucket. ### Object - **Create**: Upload a new object. - **Delete**: Delete an existing object. - **Get**: Retrieve an object. - **Get Many**: Retrieve multiple objects. - **Update**: Update an existing object. ## What to do if your operation isn't supported If this node doesn't support the operation you want to perform, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. ### Steps to use HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Google Contacts Node The Google Contacts node automates work in Google Contacts and integrates it with other applications, offering features to create, update, retrieve, delete, and get contacts. ## Operations - **Create a contact** - **Delete a contact** - **Get a contact** - **Retrieve all contacts** - **Update a contact** ## Credentials Refer to the [Google Contacts credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for guidance on setting up authentication. This node can be used to enhance the capabilities of an AI agent. For details, refer to the [AI tool parameters documentation](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/). ## Using HTTP Request Node If an operation is not supported by this node, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. Steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Google Docs Node Documentation Use the Google Docs node to automate work in Google Docs, and integrate Google Docs with other applications. n8n supports a range of Google Docs features, including creating, updating, and retrieving documents. ## Credentials Refer to Google Docs credentials for guidance on setting up authentication. ## Operations - Document - Create - Get - Update ## What to Do if Your Operation Isn't Supported If this node doesn't support the operation you want, you can use the HTTP Request node to call the service's API. You can use the credential you created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Google Drive Node Documentation Use the Google Drive node to automate work in Google Drive, integrating it with other applications. n8n supports a variety of Google Drive features, including creating, updating, listing, deleting, and accessing drives, files, and folders. ## Credentials Refer to [Google Drive credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for guidance on setting up authentication. ## Operations ### File - **Copy**: a file - **Create from text** - **Delete**: a file - **Download**: a file - **Move**: a file - **Share**: a file - **Update**: a file - **Upload**: a file ### File/Folder - **Search**: files and folders ### Folder - **Create**: a folder - **Delete**: a folder - **Share**: a folder ### Shared Drive - **Create**: a shared drive - **Delete**: a shared drive - **Get**: a shared drive - **Get Many**: shared drives - **Update**: a shared drive ## Common Issues For common questions or issues and suggested solutions, refer to the [Common issues](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/common-issues/) section. ## What to Do if Your Operation Isn't Supported If this node doesn't support the operation you want, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. 1. In the HTTP Request node, select **Authentication** → **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Google Perspective Node Use the Google Perspective node to automate work in Google Perspective, integrating it with other applications. This node supports a range of Google Perspective features, including comment analysis. ## Credentials Refer to Google Perspective credentials for guidance on setting up authentication. ## Operations - **Analyze Comment**: An operation that allows for the analysis of comments through Google Perspective. ## HTTP Request Node If your desired operation is not supported, use the **HTTP Request node** to call the service's API. You can utilize the credentials created for Google Perspective in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to the Custom API operations documentation for more information. ---------------------------------------- # Google Sheets Node in n8n The Google Sheets node allows automation of tasks in Google Sheets and integration with other applications. It supports a range of features including creating, updating, deleting, appending, and retrieving documents. ## Credentials Refer to the Google Sheets credentials documentation for guidance on setting up authentication. ## Operations ### Document Operations - **Create**: Create a new spreadsheet. - **Delete**: Delete an existing spreadsheet. ### Sheet Within Document Operations - **Append or Update Row**: Append a new row or update the existing one. - **Append Row**: Create a new row in a sheet. - **Clear**: Clear all data from a sheet. - **Create**: Create a new sheet within a spreadsheet. - **Delete**: Delete an existing sheet. - **Delete Rows or Columns**: Remove specific columns or rows from a sheet. - **Get Row(s)**: Read all rows in a sheet. - **Update Row**: Update a specific row in a sheet. ## Common Issues For common questions or issues and suggested solutions, refer to the Common Issues documentation. ## Custom API Operations If the desired operation is not supported, use the HTTP Request node to call the Google Sheets API directly. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the appropriate service and select your credential. 3. Refer to the Custom API operations documentation for more details. ## Related Resources Refer to the Google Sheets API documentation for additional information about its capabilities. ---------------------------------------- # Google Slides Node Documentation Use the Google Slides node to automate work in Google Slides and integrate Google Slides with other applications. This node supports a variety of Google Slides features, including creating presentations and retrieving pages. ## Credentials Refer to [Google Credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for guidance on setting up authentication. ## Operations - **Page** - **Get a page** - **Get a thumbnail** - **Presentation** - **Create a presentation** - **Get a presentation** - **Get presentation slides** - **Replace text in a presentation** ## Best Practices If this node doesn't support the operation you want to perform, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. ### Steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Google Tasks Node ## Overview The Google Tasks node automates work in Google Tasks and integrates with other applications. It supports various operations regarding task management. ## Credentials Refer to [Google Tasks credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for setting up authentication. ## Operations - **Add a task**: Add a task to a task list. - **Delete a task**: Remove a specific task. - **Retrieve a task**: Get details for a specific task. - **Retrieve all tasks**: Get all tasks from a task list. - **Update a task**: Modify details of a specific task. ## Configuration Instructions If the required operation isn't supported directly by the Google Tasks node, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the Google Tasks API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for further information. ---------------------------------------- # Google Translate Node Use the Google Translate node to automate work in Google Translate and integrate it with other applications. This node supports a range of Google Translate features, including translating languages. ## Operations - **Language** - **Translate data** ## Credentials Refer to [Google Translate credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for guidance on setting up authentication. ## HTTP Request Node If this node doesn't support the operation you want to execute, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Gotify Node Use the Gotify node to automate work in Gotify and integrate Gotify with other applications. n8n supports a range of Gotify features, including creating, deleting, and getting messages. ## Credentials Refer to [Gotify credentials](https://docs.n8n.io/integrations/builtin/credentials/gotify/) for guidance on setting up authentication. ## Operations - **Message** - **Create**: Create a new message in Gotify. - **Delete**: Delete an existing message in Gotify. - **Get All**: Retrieve all messages from Gotify. ## Templates and Examples Browse Gotify integration templates or search all templates for more examples and use cases. ---------------------------------------- # GoToWebinar Node Documentation Use the GoToWebinar node to automate work in GoToWebinar, and integrate GoToWebinar with other applications. n8n supports a range of GoToWebinar features, including creating, getting, and deleting attendees, organizers, and registrants. ## Credentials Refer to [GoToWebinar credentials](https://docs.n8n.io/integrations/builtin/credentials/gotowebinar/) for guidance on setting up authentication. ## Operations - **Attendee** - Get - Get All - Get Details - **Co-Organizer** - Create - Delete - Get All - Re-invite - **Panelist** - Create - Delete - Get All - Re-invite - **Registrant** - Create - Delete - Get - Get All - **Session** - Get - Get All - Get Details - **Webinar** - Create - Get - Get All - Update ## What to Do If Your Operation Isn't Supported If this node doesn't support the operation you want to perform, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. You can use the credential you created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Grafana Node Use the Grafana node to automate work in Grafana and integrate Grafana with other applications. n8n supports various Grafana features, including creating, updating, deleting, and retrieving dashboards, teams, and users. ## Operations ### Dashboard - Create a dashboard - Delete a dashboard - Get a dashboard - Get all dashboards - Update a dashboard ### Team - Create a team - Delete a team - Get a team - Retrieve all teams - Update a team ### Team Member - Add a member to a team - Retrieve all team members - Remove a member from a team ### User - Delete a user from the current organization - Retrieve all users in the current organization - Update a user in the current organization ## Credentials Refer to Grafana credentials for guidance on setting up authentication. ## What to do if your operation isn't supported If the node doesn't support the desired operation, use the HTTP Request node to call the service's API with the following steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Grist Node Documentation ## Core Concepts The Grist node automates tasks in Grist and integrates Grist with other applications. It supports various features, including creating, updating, deleting, and reading rows in a table. ## Credentials Refer to Grist credentials for guidance on setting up authentication. ## Operations - **Create rows in a table** - **Delete rows from a table** - **Read rows from a table** - **Update rows in a table** ## Get the Row ID To update or delete a record, the Row ID is required. There are two methods to obtain it: 1. **Create a Row ID Column in Grist** - Create a new column in your Grist table with the formula: ```plaintext $id ``` 2. **Use the Get All Operation** - The **Get All** operation returns the Row ID of each record along with the fields. - Access it using the expression: ```plaintext {{$node["GristNodeName"].json["id"]}} ``` ## Filter Records When Using the Get All Operation - Select **Add Option** and choose **Filter** from the dropdown list. - Add filters for any number of columns; results will only include records that match all specified columns. - For each column, enter multiple values separated by commas; results will include records matching any of those column values. ---------------------------------------- # Google Workspace Admin Node Use the Google Workspace Admin node to automate tasks in Google Workspace Admin and integrate it with other applications. This node supports various Google Workspace Admin features, including managing users, groups, and ChromeOS devices. ## Credentials Refer to the Google credentials documentation for setting up authentication. ## Operations - **ChromeOS Device** - Get a ChromeOS device - Get many ChromeOS devices - Update a ChromeOS device - Change the status of a ChromeOS device - **Group** - Create a group - Delete a group - Get a group - Get many groups - Update a group - **User** - Add an existing user to a group - Create a user - Delete a user - Get a user - Get many users - Remove a user from a group - Update a user ## Custom Fields Parameter To control which custom fields to retrieve when getting a user's information, use the **Custom Fields** parameter: - **Don't Include**: Omit all custom fields. - **Custom**: Include specific custom fields from schemas in **Custom Schema Names or IDs**. - **Include All**: Retrieve all fields associated with the user. ### Steps to Include Custom Fields 1. Select **Custom** from the **Custom Fields** dropdown list. 2. Choose the schema names to include in the **Custom Schema Names or IDs** dropdown list. ---------------------------------------- # Hacker News Node Documentation ## Core Concepts The Hacker News node automates work in Hacker News and integrates it with other applications. It supports various features such as retrieving articles and user data. ## Credentials This node does not require authentication. ## Operations The following operations are supported by the Hacker News node: - **Get all items** - **Get a Hacker News article** - **Get a Hacker News user** ## Configuration Instructions This node can be utilized as an AI tool where many parameters can be set automatically or directed by AI. For more details, refer to the [AI tool parameters documentation](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/). ## Best Practices - Consider using the Hacker News node in conjunction with AI capabilities to optimize workflows. ## Workflow Patterns Integrate workflow patterns to enhance functionalities: - Example: Using multiple operations in a single workflow to gather and process data from Hacker News. ---------------------------------------- # HaloPSA Node Documentation ## Overview The HaloPSA node is used to automate tasks in HaloPSA and to integrate HaloPSA with other applications. It supports operations for managing clients, sites, tickets, and users. ## Credentials Refer to [HaloPSA credentials](https://docs.n8n.io/integrations/builtin/credentials/halopsa/) for guidance on setting up authentication. ## Operations ### Client Operations - **Create a client** - **Delete a client** - **Get a client** - **Get all clients** - **Update a client** ### Site Operations - **Create a site** - **Delete a site** - **Get a site** - **Get all sites** - **Update a site** ### Ticket Operations - **Create a ticket** - **Delete a ticket** - **Get a ticket** - **Get all tickets** - **Update a ticket** ### User Operations - **Create a user** - **Delete a user** - **Get a user** - **Get all users** - **Update a user** ## Templates and Examples - [Browse HaloPSA integration templates](https://n8n.io/integrations/halopsa/) - [Search all templates](https://n8n.io/workflows/) ---------------------------------------- # Harvest Node Documentation ### Overview The Harvest node automates tasks in Harvest and integrates it with other applications. It supports features like creating, updating, deleting, and fetching clients, contacts, invoices, tasks, expenses, users, and projects. ### Credentials Refer to Harvest credentials for guidance on setting up authentication. ### Operations - **Client** - Create a client - Delete a client - Get data of a client - Get data of all clients - Update a client - **Company** - Retrieves the company for the currently authenticated user - **Contact** - Create a contact - Delete a contact - Get data of a contact - Get data of all contacts - Update a contact - **Estimate** - Create an estimate - Delete an estimate - Get data of an estimate - Get data of all estimates - Update an estimate - **Expense** - Get data of an expense - Get data of all expenses - Create an expense - Update an expense - Delete an expense - **Invoice** - Get data of an invoice - Get data of all invoices - Create an invoice - Update an invoice - Delete an invoice - **Project** - Create a project - Delete a project - Get data of a project - Get data of all projects - Update a project - **Task** - Create a task - Delete a task - Get data of a task - Get data of all tasks - Update a task - **Time Entries** - Create a time entry using duration - Create a time entry using start and end time - Delete a time entry - Delete a time entry's external reference - Get data of a time entry - Get data of all time entries - Restart a time entry - Stop a time entry - Update a time entry - **User** - Create a user - Delete a user - Get data of a user - Get data of all users - Get data of authenticated user - Update a user ### Custom API Operations If the desired operation is not supported by the Harvest node, use the HTTP Request node to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Help Scout Node Documentation Use the Help Scout node to automate work in Help Scout, integrating it with other applications. n8n supports a variety of Help Scout features, such as creating, updating, deleting, and retrieving conversations and customers. ## Credentials Refer to Help Scout credentials for guidance on setting up authentication. ## Operations - **Conversation** - Create a new conversation - Delete a conversation - Get a conversation - Get all conversations - **Customer** - Create a new customer - Get a customer - Get all customers - Get customer property definitions - Update a customer - **Mailbox** - Get data of a mailbox - Get all mailboxes - **Thread** - Create a new chat thread - Get all chat threads ## Custom API Operations If an operation is not supported by this node, use the HTTP Request node to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # HighLevel Node Documentation Use the HighLevel node to automate work in HighLevel and integrate it with other applications. n8n supports various HighLevel features, including creating, updating, deleting, and retrieving contacts, opportunities, and tasks, as well as booking appointments and retrieving free time slots in calendars. ## Operations - **Contact** - Create or update - Delete - Get - Get many - Update - **Opportunity** - Create - Delete - Get - Get many - Update - **Task** - Create - Delete - Get - Get many - Update - **Calendar** - Book an appointment - Get free slots ## Credentials Refer to [HighLevel credentials](https://docs.n8n.io/integrations/builtin/credentials/highlevel/) for guidance on setting up authentication. ## Custom HTTP Request If this node does not support the operation you want to perform, you can use the HTTP Request node to call the service's API. ### Procedure 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Home Assistant Node Use the Home Assistant node to automate tasks in Home Assistant and integrate with other applications. Supported features include managing camera proxies, configurations, logs, services, and templates. ## Credentials Refer to [Home Assistant credentials](https://docs.n8n.io/integrations/builtin/credentials/homeassistant/) for guidance on setting up authentication. ## Operations - **Camera Proxy** - Get the camera screenshot - **Config** - Get the configuration - Check the configuration - **Event** - Create an event - Get all events - **Log** - Get a log for a specific entity - Get all logs - **Service** - Call a service within a specific domain - Get all services - **State** - Create a new record or update the current one if it already exists (upsert) - Get a state for a specific entity - Get all states - **Template** - Create a template ## Related Resources Refer to [Home Assistant's documentation](https://developers.home-assistant.io/docs/api/rest/) for more information about the service. ---------------------------------------- # HubSpot Node Documentation Use the HubSpot node to automate work in HubSpot, and integrate HubSpot with other applications. n8n supports various HubSpot features, including creating, updating, deleting, and retrieving contacts, deals, lists, engagements, and companies. ## Credentials Refer to [HubSpot credentials](https://docs.n8n.io/integrations/builtin/credentials/hubspot/) for guidance on setting up authentication. ## Operations ### Contact - Create/Update a contact - Delete a contact - Get a contact - Get all contacts - Get recently created/updated contacts - Search contacts ### Contact List - Add contact to a list - Remove a contact from a list ### Company - Create a company - Delete a company - Get a company - Get all companies - Get recently created companies - Get recently modified companies - Search companies by domain - Update a company ### Deal - Create a deal - Delete a deal - Get a deal - Get all deals - Get recently created deals - Get recently modified deals - Search deals - Update a deal ### Engagement - Create an engagement - Delete an engagement - Get an engagement - Get all engagements ### Form - Get all fields from a form - Submit data to a form ### Ticket - Create a ticket - Delete a ticket - Get a ticket - Get all tickets - Update a ticket ## Unsupported Operations If a desired operation isn't supported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Humantic AI Node Use the Humantic AI node to automate work in Humantic AI, integrating it with other applications. n8n supports numerous Humantic AI features, including creating, retrieving, and updating profiles. ## Credentials Refer to Humantic AI credentials for guidance on setting up authentication. ## Operations - **Profile** - **Create a profile**: Allows the creation of a new user profile in Humantic AI. - **Retrieve a profile**: Fetches the details of an existing user profile. - **Update a profile**: Modifies an existing user profile. ---------------------------------------- # Hunter Node Documentation Use the Hunter node to automate work in Hunter and integrate Hunter with other applications. n8n supports a range of Hunter features including retrieving and verifying email addresses. ## Credentials Refer to Hunter credentials for guidance on setting up authentication. ## Operations - **Get Email Addresses**: Retrieve every email address found on the internet using a given domain name, with sources. - **Generate Email Address**: Generate or retrieve the most likely email address from a domain name, first name, and last name. - **Verify Email Address**: Verify the deliverability of an email address. ## Templates and Examples 1. **Automatically email great leads when they submit a form and record in HubSpot** 2. **Verify emails & enrich new form leads and save them to HubSpot** 3. **Automated Job Hunter: Upwork Opportunity Aggregator & AI-Powered Notifier** ---------------------------------------- # Intercom Node Use the Intercom node to automate work in Intercom, integrating it with other applications. n8n supports various Intercom features including creating, updating, deleting, and retrieving companies, leads, and users. ## Credentials Refer to [Intercom credentials](https://docs.n8n.io/integrations/builtin/credentials/intercom/) for guidance on setting up authentication. ## Operations ### Company - **Create a new company** - **Get data of a company** - **Get data of all companies** - **Update a company** - **List company's users** ### Lead - **Create a new lead** - **Delete a lead** - **Get data of a lead** - **Get data of all leads** - **Update a lead** ### User - **Create a new user** - **Delete a user** - **Get data of a user** - **Get data of all users** - **Update a user** ---------------------------------------- # Invoice Ninja Node The Invoice Ninja node automates work in Invoice Ninja and integrates it with other applications. It supports operations including creating, updating, deleting, and retrieving clients, expenses, invoices, payments, and quotes. ## Credentials Refer to **Invoice Ninja credentials** for guidance on setting up authentication. ## Operations ### Client - **Create a new client** - **Delete a client** - **Get data of a client** - **Get data of all clients** ### Expense - **Create a new expense** - **Delete an expense** - **Get data of an expense** - **Get data of all expenses** ### Invoice - **Create a new invoice** - **Delete an invoice** - **Email an invoice** - **Get data of an invoice** - **Get data of all invoices** ### Payment - **Create a new payment** - **Delete a payment** - **Get data of a payment** - **Get data of all payments** ### Quote - **Create a new quote** - **Delete a quote** - **Email a quote** - **Get data of a quote** - **Get data of all quotes** ### Task - **Create a new task** - **Delete a task** - **Get data of a task** - **Get data of all tasks** ## Templates and Examples Browse **Invoice Ninja integration templates**, or search all templates. ## What to Do If Your Operation Isn't Supported If the desired operation is not supported, use the **HTTP Request node** to call the service's API. Steps to use HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to **Custom API operations** for more information. ---------------------------------------- # Iterable Node Documentation Use the Iterable node to automate work in Iterable and integrate it with other applications. n8n supports various Iterable features, including user management and recording user actions. ## Credentials Refer to Iterable credentials for guidance on setting up authentication. ## Operations - **Event** - Record the actions a user performs. - **User** - Create/Update a user. - Delete a user. - Get a user. - **User List** - Add a user to a list. - Remove a user from a list. ---------------------------------------- ## Jenkins Node Documentation ### Overview The Jenkins node automates work in Jenkins and integrates Jenkins with other applications. It supports operations like listing builds, managing instances, and creating and copying jobs. ### Authentication Refer to Jenkins credentials for guidance on setting up authentication. ### Operations - **Build** - List Builds - **Instance** - Cancel quiet down state - Put Jenkins in quiet mode (no builds can be started, ready for shutdown) - Restart Jenkins immediately (if possible) - Restart Jenkins after no jobs are running (if possible) - Shutdown Jenkins when no jobs are running - Shutdown Jenkins immediately - **Job** - Copy a specific job - Create a new job - Trigger a specific job ### Templates and Examples - Browse Jenkins integration templates or search all templates. ---------------------------------------- ## Jina AI Node Documentation Use the Jina AI node to automate work in Jina AI and integrate with other applications. n8n supports a wide range of Jina AI features. ### Credentials Refer to the [Jina AI Credentials Documentation](https://docs.n8n.io/integrations/builtin/credentials/jinaai/) for authentication information for this node. ### Operations - **Reader**: - **Read**: Fetches content from a URL and converts it to clean, LLM-friendly formats. - **Search**: Performs a web search using Jina AI and returns the top results as clean, LLM-friendly formats. - **Research**: - **Deep Research**: Research a topic and generate a structured research report. ### Related Resources Refer to: - [Jina AI's Reader API Documentation](https://r.jina.ai/docs) - [Jina AI's Search API Documentation](https://s.jina.ai/docs) ### HTTP Request Node Usage If this node does not support the operation you want to perform, use the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API Operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Jira Software Node Documentation Use the Jira Software node to automate work in Jira, integrating it with other applications. n8n supports various Jira features, including creating, updating, deleting, and getting issues and users. ## Credentials Refer to [Jira credentials](https://docs.n8n.io/integrations/builtin/credentials/jira/) for authentication setup. ## Operations ### Issue Operations - **Get issue changelog** - **Create a new issue** - **Delete an issue** - **Get an issue** - **Get all issues** - **Create an email notification for an issue and add it to the mail queue** - **Return transitions**: Either all transitions or a specific transition based on the issue's status. - **Update an issue** ### Issue Attachment Operations - **Add attachment to issue** - **Get an attachment** - **Get all attachments** - **Remove an attachment** ### Issue Comment Operations - **Add comment to issue** - **Get a comment** - **Get all comments** - **Remove a comment** - **Update a comment** ### User Operations - **Create a new user** - **Delete a user** - **Retrieve a user** ## Fetch Issues for a Specific Project To fetch issues for a particular project using the **Get All** operation: 1. Select **Get All** from the **Operation** dropdown list. 2. Toggle **Return All** to true. 3. Select **Add Option** and then select **JQL**. 4. Enter `project=n8n` in the **JQL** field. This query fetches all issues in the project named `n8n`. Replace `n8n` with the name of your project to fetch relevant issues. ## What to Do If Your Operation Isn't Supported If the node doesn't support a desired operation, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. **Steps:** 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Choose your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ## Related Resources Refer to the [official JQL documentation](https://www.atlassian.com/software/jira/guides/expand-jira/jql) for more on Jira Query Language (JQL). ---------------------------------------- # Kafka Node Documentation ## Overview The Kafka node automates work in Kafka and integrates Kafka with other applications, supporting a wide range of Kafka features, including sending messages. ## Operations - **Send Message**: Used to send messages to Kafka topics. ## Credentials Refer to the Kafka credentials documentation for guidance on setting up authentication: [Kafka Credentials](https://docs.n8n.io/integrations/builtin/credentials/kafka/). ## Best Practices This node can be utilized to enhance the capabilities of an AI agent. Parameters can be set automatically or guided by AI. More information can be found in the AI tool parameters documentation: [AI Tool Parameters](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/). ---------------------------------------- # Keap Node Use the Keap node to automate work in Keap and integrate Keap with other applications. n8n supports various Keap features including creating, updating, deleting, and retrieving companies, products, ecommerce orders, emails, and files. ## Credentials Refer to [Keap credentials](https://docs.n8n.io/integrations/builtin/credentials/keap/) for setup instructions. ## Operations - **Company** - Create a company - Retrieve all companies - **Contact** - Create/update a contact - Delete a contact - Retrieve a contact - Retrieve all contacts - **Contact Note** - Create a note - Delete a note - Get notes - Retrieve all notes - Update a note - **Contact Tag** - Add a list of tags to a contact - Delete a contact's tag - Retrieve all contact's tags - **Ecommerce Order** - Create an ecommerce order - Get an ecommerce order - Delete an ecommerce order - Retrieve all ecommerce orders - **Ecommerce Product** - Create an ecommerce product - Delete an ecommerce product - Get an ecommerce product - Retrieve all ecommerce products - **Email** - Create a record of an email sent to a contact - Retrieve all sent emails - Send Email - **File** - Delete a file - Retrieve all files - Upload a file ## What to do if your operation isn't supported If the node does not support the desired operation, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service’s API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Kitemaker Node Documentation Use the Kitemaker node to automate work in Kitemaker and integrate it with other applications. n8n supports features such as retrieving data on organizations, spaces, and users, as well as creating, getting, and updating work items. ## Credentials Refer to Kitemaker credentials for guidance on setting up authentication. ## Operations - **Organization** - Retrieve data on the logged-in user's organization. - **Space** - Retrieve data on all the spaces in the logged-in user's organization. - **User** - Retrieve data on all the users in the logged-in user's organization. - **Work Item** - Create - Get - Get All - Update ## Templates and Examples ### Create, Update, and Retrieve a Record from FileMaker **Template**: Create, update, and retrieve a record from FileMaker. ### Convert FileMaker Data API to Flat File Array **Template**: Convert FileMaker Data API to flat file array. ### Integrate Xero with FileMaker Using Webhooks **Template**: Integrate Xero with FileMaker using webhooks. ---------------------------------------- # KoboToolbox Node Use the KoboToolbox node to automate work in KoboToolbox, integrating KoboToolbox with other applications. It supports creating, updating, deleting, and retrieving files, forms, hooks, and submissions. ## Credentials Refer to [KoboToolbox credentials](https://docs.n8n.io/integrations/builtin/credentials/kobotoolbox/) for authentication setup. ## Operations - **File** - Create - Delete - Get - Get Many - **Form** - Get - Get Many - Redeploy - **Hook** - Get - Get Many - Logs - Retry All - Retry One - **Submission** - Delete - Get - Get Many - Get Validation Status - Update Validation Status ## Query Options The Query Submission operation supports: - **Start:** index offset for pagination. - **Limit:** maximum records to return (API limit is 30,000). - **Query:** filter predicates in MongoDB's JSON query format, e.g., `{"status": "success", "_submission_time": {"$lt": "2021-11-01T01:02:03"}}`. - **Fields:** specify fields to fetch for lighter response. - **Sort:** sorting criteria in MongoDB JSON format, e.g., `{"status": 1, "_submission_time": -1}`. ## Submission Options Operations returning form submission data offer options to adjust the response: - Download options for attachments with naming patterns and file sizes. - Formatting options for reformatting submission data. ### About Reformatting Reformatting logic is available via the **Reformat?** parameter in operations returning submissions. This reorganizes JSON into a multi-level hierarchy, renames fields, parses geospatial fields into GeoJSON, and converts fields based on provided masks. #### Example JSON Default submission example: ```json { "_id": 471987, "formhub/uuid": "189436bb09a54957bfcc798e338b54d6", "start": "2021-12-05T16:13:38.527+02:00", "end": "2021-12-05T16:15:33.407+02:00", "Field_Details/Field_Name": "Test Fields", //... } ``` Reformatted submission example (with appropriate masks): ```json { "id": 471987, "formhub": { "uuid": "189436bb09a54957bfcc798e338b54d6" }, "start": "2021-12-05T16:13:38.527+02:00", "Field_Details": { "Field_Name": "Test Fields", //... }, //... } ``` ## Custom API Operations If the required operation is not supported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the API. Steps to configure: 1. Select **Authentication** > **Predefined Credential Type** in HTTP Request node. 2. Choose the service. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for detailed information. ---------------------------------------- # Lemlist Node Documentation Use the Lemlist node to automate work in Lemlist and integrate it with other applications. ## Credentials Refer to [Lemlist credentials](https://docs.n8n.io/integrations/builtin/credentials/lemlist/) for guidance on setting up authentication. ## Operations ### Activity - **Get Many**: Get many activities ### Campaign - **Get Many**: Get many campaigns - **Get Stats**: Get campaign stats ### Enrichment - **Get**: Fetches a previously completed enrichment - **Enrich Lead**: Enrich a lead using an email or LinkedIn URL - **Enrich Person**: Enrich a person using an email or LinkedIn URL ### Lead - **Create**: Create a new lead - **Delete**: Delete an existing lead - **Get**: Get an existing lead - **Unsubscribe**: Unsubscribe an existing lead ### Team - **Get**: Get an existing team - **Get Credits**: Get an existing team's credits ### Unsubscribe - **Add**: Add an email to an unsubscribe list - **Delete**: Delete an email from an unsubscribe list - **Get Many**: Get many unsubscribed emails ## Custom API Operations If this node doesn't support the operation you want to perform, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. ### Steps 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Line Node **Status:** Deprecated - End of service on April 1st, 2025 Use the Line node to automate tasks in Line and integrate it with other applications. n8n supports various Line features, including sending notifications. ## Credentials Refer to [Line credentials](https://docs.n8n.io/integrations/builtin/credentials/line/) for authentication setup. ## Operations - **Notification** - Sends notifications to users or groups. ## Best Practices If the desired operation is not supported by this node, utilize the **HTTP Request node** to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the corresponding service. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Linear Node Documentation The Linear node automates work in Linear and integrates it with other applications. It supports a range of Linear features, including creating, updating, deleting, and getting issues. ## Credentials Refer to Linear credentials for guidance on setting up authentication. ## Operations - **Issue** - **Create** - **Delete** - **Get** - **Get All** - **Update** ## What to do if your operation isn't supported If the desired operation is not supported by this node, use the HTTP Request node to call the Linear API. The credential created for this service can be utilized in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # LingvaNex Node Documentation ## Overview The LingvaNex node enables automation of tasks within LingvaNex and integration with various applications for data translation. ## Credentials Refer to the [LingvaNex credentials](https://docs.n8n.io/integrations/builtin/credentials/lingvanex/) for authentication setup. ## Operations - **Translate data**: This operation allows for the translation of textual information using the LingvaNex service. ## Best Practices To effectively utilize the LingvaNex node, ensure that you have the necessary credentials set up and leverage the translation operation in workflows to automate language translation tasks. ## Code Examples *(No specific code examples provided in the original text)* ---------------------------------------- # LinkedIn Node Documentation Use the LinkedIn node to automate work in LinkedIn and integrate LinkedIn with other applications. n8n supports creating posts. ## Credentials Refer to [LinkedIn credentials](https://docs.n8n.io/integrations/builtin/credentials/linkedin/) for guidance on setting up authentication. ## Operations - **Post** - **Create** ## Parameters - **Post As**: Choose whether to post as a **Person** or **Organization**. - **Person Name or ID** and **Organization URN**: Enter an identifier for the person or organization. - If posting as an Organization, enter the organization number in the URN field (e.g., `03262013`, not `urn:li:company:03262013`). - **Text**: The post contents. - **Media Category**: Use this when including images or article URLs in your post. ## What to do if your operation isn't supported If this node doesn't support the operation you want to do, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # LoneScale Node Documentation Use the LoneScale node to automate work in LoneScale and integrate LoneScale with other applications. n8n has built-in support for managing Lists and Items in LoneScale. ## Credentials Authentication information for this node can be found [here](https://docs.n8n.io/integrations/builtin/credentials/lonescale/). ## Operations - **List** - Create - **Item** - Create ## Configuration Instructions If an operation isn't supported by this node, you can use the HTTP Request node to call the service's API. Use the credential created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ## Related Resources Refer to [LoneScale's documentation](https://help-center.lonescale.com/en/articles/6454360-lonescale-public-api) for more information about the service. n8n provides a trigger node for LoneScale. Documentation for the trigger node can be found [here](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.lonescaletrigger/). ---------------------------------------- # Magento 2 Node Use the Magento 2 node to automate work in Magento 2, integrating it with other applications. n8n supports various Magento 2 features including customer, invoice, order, and product management. ## Credentials Refer to [Magento 2 credentials](https://docs.n8n.io/integrations/builtin/credentials/magento2/) for authentication setup. ## Operations ### Customer - Create a new customer - Delete a customer - Get a customer - Get all customers - Update a customer ### Invoice - Create an invoice ### Order - Cancel an order - Get an order - Get all orders - Ship an order ### Product - Create a product - Delete a product - Get a product - Get all products - Update a product ## Custom Operations If a desired operation isn't supported by this node, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API with the following steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Mailcheck Node Use the Mailcheck node to automate work in Mailcheck and integrate it with other applications. n8n supports a range of Mailcheck features, including email checking. ## Operations - **Email** - **Check**: Validate email addresses. ## Credentials Refer to the [Mailcheck credentials documentation](https://docs.n8n.io/integrations/builtin/credentials/mailcheck/) for guidance on setting up authentication. ## API Documentation - **Endpoint**: Mailcheck API endpoints can perform various operations supported by the node. - **Method**: Variable based on the operation (e.g., POST for checking emails). - **Authentication**: Requires Mailcheck credentials. ## Best Practices - Use the Mailcheck node as part of an AI tool to enhance capabilities, allowing parameters to be set automatically or directed by AI. For more, refer to the [AI tool parameters documentation](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/). ---------------------------------------- # Mailchimp Node Documentation Use the Mailchimp node to automate tasks in Mailchimp and integrate it with other applications. The Mailchimp node supports features including creating, updating, and deleting campaigns, as well as retrieving list groups. ## Credentials Refer to [Mailchimp credentials](https://docs.n8n.io/integrations/builtin/credentials/mailchimp/) for setup guidance. ## Operations - **Campaign** - Delete a campaign - Get a campaign - Get all campaigns - Replicate a campaign - Create a Resend to Non-Openers version of this campaign - Send a campaign - **List Group** - Get all groups - **Member** - Create a new member on list - Delete a member on list - Get a member on list - Get all members on list - Update a member on list - **Member Tag** - Add tags from a list member - Remove tags from a list member ## Supported Operations for Unsupported Scenarios If the desired operation is not supported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the Mailchimp API with the following steps: 1. In the HTTP Request node, select **Authentication** \> **Predefined Credential Type**. 2. Select the service to connect. 3. Choose your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # MailerLite Node Documentation Use the MailerLite node to automate work in MailerLite, integrating it with other applications. n8n supports various MailerLite features including creating, updating, deleting, and retrieving subscribers. ## Credentials Refer to the [MailerLite credentials](https://docs.n8n.io/integrations/builtin/credentials/mailerlite/) for guidance on setting up authentication. ## Operations - **Subscriber Operations** - Create a new subscriber - Get a subscriber - Get all subscribers - Update a subscriber ## Code Examples ### Create, Update and Get a Subscriber Example workflow of creating, updating, and retrieving a subscriber using the MailerLite node. ### Receive Updates When a Subscriber is Added to a Group Example workflow to receive notifications when a subscriber is added to a group in MailerLite. ### Capture Gumroad Sales Example workflow to capture Gumroad sales, add the buyer to a MailerLite group, and log the entry to Google Sheets CRM. ---------------------------------------- # Mailgun Node Use the Mailgun node to automate work in Mailgun and integrate it with other applications. n8n supports sending emails with Mailgun. ## Credentials Refer to Mailgun credentials for guidance on setting up authentication. ## Operations - **Send an email** ## What to do if your operation isn't supported If this node doesn't support the operation you want to do, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. You can use the credential you created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication > Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Mailjet Node Documentation ## Overview The Mailjet node automates tasks in Mailjet and integrates it with other applications. Features include sending emails and SMS. ## Credentials Refer to Mailjet credentials for setting up authentication. ## Operations - **Email** - Send an email - Send an email template - **SMS** - Send an SMS ## Using HTTP Request Node for Unsupported Operations If the desired operation is not supported: 1. Use the HTTP Request node to call the service's API. 2. Select **Authentication** > **Predefined Credential Type**. 3. Choose the service and your credential. Refer to Custom API operations for more information. ---------------------------------------- # Mandrill Node Documentation ## Overview The Mandrill node automates work in Mandrill and integrates it with other applications. n8n supports sending messages based on templates or HTML. ## Credentials Refer to Mandrill credentials for guidance on setting up authentication. ## Operations - **Message** - Send message based on template. - Send message based on HTML. ---------------------------------------- # marketstack Node Documentation Use the marketstack node to automate work in marketstack and integrate marketstack with other applications. n8n supports features including getting exchanges, end-of-day data, and tickers. ## Credentials Refer to [marketstack credentials](https://docs.n8n.io/integrations/builtin/credentials/marketstack/) for authentication setup guidance. ## Operations - **End-of-Day Data** - Get All - **Exchange** - Get - **Ticker** - Get ## Templates and Examples Browse marketstack integration templates or search all templates. ---------------------------------------- # Matrix Node Use the Matrix node to automate work in Matrix and integrate it with other applications. n8n supports various Matrix features, including: - Getting current user account information - Sending media and messages to a room - Retrieving room members and messages ## Credentials Refer to [Matrix credentials](https://docs.n8n.io/integrations/builtin/credentials/matrix/) for guidance on setting up authentication. ## Operations - **Account** - Get current user's account information - **Event** - Get single event by ID - **Media** - Send media to a chat room - **Message** - Send a message to a room - Get all messages from a room - **Room** - Create a new chat room with defined settings - Invite a user to a room - Join a new room - Kick a user from a room - Leave a room - **Room Member** - Get all members ---------------------------------------- # Mattermost Node Use the Mattermost node to automate work in Mattermost and integrate it with other applications. n8n supports features such as creating, deleting, and retrieving channels and users, posting messages, and adding reactions. ## Credentials Refer to [Mattermost credentials](https://docs.n8n.io/integrations/builtin/credentials/mattermost/) for guidance on setting up authentication. ## Operations - **Channel** - Add a user to a channel - Create a new channel - Soft delete a channel - Get a page of members for a channel - Restore a soft deleted channel - Search for a channel - Get statistics for a channel - **Message** - Soft delete a post - Post a message into a channel - Post an ephemeral message into a channel - **Reaction** - Add a reaction to a post - Remove a reaction from a post - Get all reactions to one or more posts - **User** - Create a new user - Deactivate a user and revoke all sessions - Retrieve all users - Get a user by email - Get a user by ID - Invite user to team ## HTTP Request Node Usage If this node doesn't support the desired operation, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call Mattermost's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Choose your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more guidance. ## Channel ID Field Error If you encounter an error indicating that you do not have the appropriate permissions next to the **Channel ID** field, contact your system administrator to grant you the `post:channel` permission. ## Finding the Channel ID To find the channel ID in Mattermost: 1. Select the channel from the left sidebar. 2. Click the channel name at the top. 3. Select **View Info**. ---------------------------------------- # Mautic Node Documentation Use the Mautic node to automate work in Mautic and integrate Mautic with other applications. n8n supports features such as creating, updating, deleting, and retrieving companies and contacts, as well as managing campaign contacts. ## Credentials Refer to Mautic credentials documentation for guidance on setting up authentication. ## Operations - **Campaign Contact** - Add contact to a campaign - Remove contact from a campaign - **Company** - Create a new company - Delete a company - Get data of a company - Get data of all companies - Update a company - **Company Contact** - Add contact to a company - Remove a contact from a company - **Contact** - Create a new contact - Delete a contact - Edit contact's points - Add/remove contacts from the don't contact list - Get data of a contact - Get data of all contacts - Send email to contact - Update a contact - **Contact Segment** - Add contact to a segment - Remove contact from a segment - **Segment Email** - Send ## HTTP Request Node If an operation isn't supported by the Mautic node, use the HTTP Request node to call the Mautic API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to the Custom API operations documentation for more information. ---------------------------------------- # Medium Node Use the Medium node to automate work in Medium and integrate Medium with other applications. n8n supports various Medium features, including creating posts and retrieving publications. **Note:** Medium has stopped supporting the Medium API. New API keys cannot be configured for authentication. Refer to [Medium credentials](https://docs.n8n.io/integrations/builtin/credentials/medium/) for guidance on setting up existing API keys. ## Operations - **Post** - Create a post - **Publication** - Get all publications ## What to do if your operation isn't supported If the Medium node does not support the desired operation, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # MessageBird Node Documentation Use the MessageBird node to automate tasks in MessageBird and integrate it with other applications. The node supports various MessageBird features, including sending messages and retrieving balances. ## Credentials Refer to MessageBird credentials for guidance on setting up authentication. ## Operations - **SMS** - **Send text messages (SMS)** - **Balance** - **Get the balance** ## Best Practices When using the MessageBird node, ensure that you have valid credentials set up to authenticate your requests properly. Always handle errors and responses appropriately when sending SMS to ensure message delivery. ---------------------------------------- # Metabase Node The Metabase node allows automation in Metabase and integration with other applications. n8n supports features such as managing alerts, databases, metrics, and questions. ## Credentials Refer to [Metabase credentials](https://docs.n8n.io/integrations/builtin/credentials/metabase/) for authentication setup. ## Operations - **Alert** - Get - Get All - **Database** - Add - Get All - Get Fields - **Metric** - Get - Get All - **Question** - Get - Get All - Result Data ## Use HTTP Request Node for Unsupported Operations If the desired operation is not supported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the API. ### Steps: 1. In the HTTP Request node, select **Authentication > Predefined Credential Type**. 2. Choose the service to connect with. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for additional guidance. ---------------------------------------- # Microsoft Dynamics CRM Node Documentation Use the Microsoft Dynamics CRM node to automate work in Microsoft Dynamics CRM, and integrate it with other applications. n8n supports creating, updating, deleting, and retrieving Microsoft Dynamics CRM accounts. ## Operations - **Account Operations:** - **Create** - **Delete** - **Get** - **Get All** - **Update** ## Credentials Refer to Microsoft credentials documentation for guidance on setting up authentication. ## HTTP Request Node If the desired operation is not supported, use the HTTP Request node to call the service's API. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to Custom API operations documentation for more information. ---------------------------------------- # Microsoft Entra ID Node Documentation Use the Microsoft Entra ID node to automate tasks in Microsoft Entra ID and integrate it with other applications. It supports various features including user and group management. ## Operations - **Group** - **Create**: Create a new group - **Delete**: Delete an existing group - **Get**: Retrieve data for a specific group - **Get Many**: Retrieve a list of groups - **Update**: Update a group - **User** - **Create**: Create a new user - **Delete**: Delete an existing user - **Get**: Retrieve data for a specific user - **Get Many**: Retrieve a list of users - **Update**: Update a user - **Add to Group**: Add user to a group - **Remove from Group**: Remove user from a group ## Common Issues ### Updating the Allow External Senders and Auto Subscribe New Members Options Fails You cannot update the **Allow External Senders** and **Auto Subscribe New Members** options directly after creating a new group. Wait for a brief period (at least two seconds) before attempting to change these values. Use a **Wait** node between the create and update operations to avoid errors. ## Credential Information For authentication, refer to the [Microsoft Entra ID Credential Documentation](https://docs.n8n.io/integrations/builtin/credentials/microsoftentra/). ## HTTP Request Node If the Microsoft Entra ID node does not support the desired operation, use the **HTTP Request node**. 1. In the HTTP Request node, select **Authentication** → **Predefined Credential Type**. 2. Select the desired service. 3. Select your credential. For additional information, see [Custom API operations](https://docs.n8n.io/integrations/custom-operations/). ---------------------------------------- # Microsoft Excel 365 Node Documentation ## Overview The Microsoft Excel node allows automation of tasks in Microsoft Excel, enabling integration with other applications. It supports various features such as managing table data, workbooks, and worksheets. ## Credentials Refer to Microsoft credentials for guidance on setting up authentication. ## Operations - **Table** - Add rows to the end of the table - Retrieve a list of table columns - Retrieve a list of table rows - Find a specific column value and return the matching row - **Workbook** - Add a new worksheet to the workbook - Get data of all workbooks - **Worksheet** - Get all worksheets - Get worksheet content ## Configuration Instructions If an operation is not supported by the Microsoft Excel node, use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Microsoft Graph Security Node Use the Microsoft Graph Security node to automate work in Microsoft Graph Security and integrate with other applications. It supports features such as getting and updating scores and profiles. ## Credentials Refer to [Microsoft credentials](https://docs.n8n.io/integrations/builtin/credentials/microsoft/) for guidance on setting up authentication. ## Operations - **Secure Score** - Get - Get All - **Secure Score Control Profile** - Get - Get All - Update ## Custom API Operations If this node doesn't support the operation you want to do, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API by following these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Microsoft OneDrive Node Documentation Use the Microsoft OneDrive node to automate work in Microsoft OneDrive and integrate it with other applications. n8n supports various OneDrive features, including file and folder operations. ## Operations ### File - Copy a file - Delete a file - Download a file - Get a file - Rename a file - Search a file - Share a file - Upload a file (up to 4MB) ### Folder - Create a folder - Delete a folder - Get Children (get items inside a folder) - Rename a folder - Search a folder - Share a folder ## Credentials Refer to Microsoft credentials for guidance on setting up authentication. ## Finding the Folder ID To perform operations on folders, you need to supply the ID. You can find this: - In the URL of the folder - By querying via the node using the following steps: 1. Select **Resource** > **Folder**. 2. Select **Operation** > **Search**. 3. In **Query**, enter the folder name. 4. Select **Execute step**. This will return data about the folder, including an `id` field containing the folder ID. ## Related Resources Refer to Microsoft's OneDrive API documentation for more information about the service. ---------------------------------------- # Microsoft Outlook Node Use the Microsoft Outlook node to automate work in Microsoft Outlook and integrate it with other applications. n8n supports various Microsoft Outlook features including creating, updating, deleting, and retrieving folders, messages, and drafts. ## Credentials Refer to Microsoft credentials for guidance on setting up authentication. ## Operations - **Calendar** - Create - Delete - Get - Get Many - Update - **Contact** - Create - Delete - Get - Get Many - Update - **Draft** - Create - Delete - Get - Send - Update - **Event** - Create - Delete - Get - Get Many - Update - **Folder** - Create - Delete - Get - Get Many - Update - **Folder Message** - Get Many - **Message** - Delete - Get - Get Many - Move - Reply - Send - Send and Wait for Response - Update - **Message Attachment** - Add - Download - Get - Get Many ## Waiting for a Response Using the **Send and Wait for a Response** operation, you can send a message and pause the workflow execution until a person responds. ### Response Type Options for waiting and approval actions: - **Approval**: Users can approve or disapprove from within the message. - **Free Text**: Users submit a response via a form. - **Custom Form**: Users submit a response with a custom-built form. ### Configuration Options for Response Types - **Limit Wait Time**: Automatically resume execution after a specified time limit. - **Append n8n Attribution**: Mention if the message was sent automatically with n8n. ### Approval Response Customization Customize the approval response to show only approval or both approval and disapproval buttons, including custom button labels. ### Free Text Response Customization Customize button labels, form title and description for the free text response. ### Custom Form Response Customization Build a custom form and customize form elements and button labels. Additional fields can be added using the **Add Form Element** button. ## Related Resources Refer to Outlook's API documentation for more information about the service. ## What to Do If Your Operation Isn't Supported If a desired operation is unsupported, use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Microsoft SharePoint Node Use the Microsoft SharePoint node to automate work in Microsoft SharePoint and integrate Microsoft SharePoint with other applications. n8n supports a wide range of Microsoft SharePoint features, including downloading, uploading, and updating files, managing items in a list, and getting lists and list items. ## Credentials Authentication information for this node can be found [here](https://docs.n8n.io/integrations/builtin/credentials/microsoft/). ## Operations - **File**: - **Download**: Download a file. - **Update**: Update a file. - **Upload**: Upload an existing file. - **Item**: - **Create**: Create an item in an existing list. - **Create or Update**: Create a new item, or update the current one if it already exists (upsert). - **Delete**: Delete an item from a list. - **Get**: Retrieve an item from a list. - **Get Many**: Get specific items in a list or list many items. - **Update**: Update an item in an existing list. - **List**: - **Get**: Retrieve details of a single list. - **Get Many**: Retrieve a list of lists. ## Related Resources Refer to [Microsoft's SharePoint documentation](https://learn.microsoft.com/en-us/sharepoint/dev/sp-add-ins/get-to-know-the-sharepoint-rest-service) for more information about the service. ---------------------------------------- # Microsoft SQL Node Use the Microsoft SQL node to automate work in Microsoft SQL and integrate it with other applications. n8n supports various Microsoft SQL features, including executing SQL queries and inserting rows into the database. ## Credentials Refer to Microsoft SQL credentials documentation for guidance on setting up authentication. ## Operations - **Execute an SQL query** - **Insert rows in database** - **Update rows in database** - **Delete rows in database** ## Templates and Examples ### Execute an SQL query in Microsoft SQL ```json { "query": "SELECT * FROM Users" } ``` ### Export SQL table into CSV file ```json { "query": "SELECT * FROM Products", "output": { "format": "csv" } } ``` ---------------------------------------- # Microsoft Teams Node Documentation Use the Microsoft Teams node to automate work in Microsoft Teams, integrating it with other applications. ## Credentials Refer to Microsoft credentials documentation for guidance on setting up authentication. ## Operations - **Channel** - Create - Delete - Get - Get Many - Update - **Channel Message** - Create - Get Many - **Chat Message** - Create - Get - Get Many - Send and Wait for Response - **Task** - Create - Delete - Get - Get Many - Update ## Waiting for a Response By choosing the **Send and Wait for a Response** operation, you can send a message and pause workflow execution until a person confirms the action or provides more information. ### Response Type Available response types: - **Approval**: Users can approve or disapprove from within the message. - **Free Text**: Users can submit a response with a form. - **Custom Form**: Users can submit responses with a custom form. Configuration options: - **Limit Wait Time**: Specify an automatic resume after a time limit. - **Append n8n Attribution**: Include or exclude n8n mention in the message. ### Approval Response Customization When using the Approval response type, you can present only an approval button or both approval and disapproval buttons. Button labels can be customized. ### Free Text Response Customization In the Free Text response type, customize the message button label, form title, description, and response button label. ### Custom Form Response Customization In the Custom Form response type, build a form with desired fields and options, and customize form elements, including message button label, form title, description, and response button label. ## Related Resources Refer to Microsoft Teams' API documentation for more information about the service. ## Using HTTP Request Node for Unsupported Operations If the desired operation isn't supported, you can use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations documentation for more information. ---------------------------------------- # Microsoft To Do Node Documentation ## Overview The Microsoft To Do node automates tasks in Microsoft To Do and integrates it with other applications. It supports creating, updating, deleting, and retrieving linked resources, lists, and tasks. ## Credentials Refer to [Microsoft credentials](https://docs.n8n.io/integrations/builtin/credentials/microsoft/) for guidance on setting up authentication. ## Operations ### Linked Resource - **Create**: Create a linked resource. - **Delete**: Delete a linked resource. - **Get**: Retrieve a linked resource. - **Get All**: Retrieve all linked resources. - **Update**: Update a linked resource. ### List - **Create**: Create a list. - **Delete**: Delete a list. - **Get**: Retrieve a list. - **Get All**: Retrieve all lists. - **Update**: Update a list. ### Task - **Create**: Create a task. - **Delete**: Delete a task. - **Get**: Retrieve a task. - **Get All**: Retrieve all tasks. - **Update**: Update a task. ## Configuration Instructions If the desired operation is not supported directly by the Microsoft To Do node, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the Microsoft To Do API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for additional information. ---------------------------------------- # Mindee Node Documentation Use the Mindee node to automate work in Mindee and integrate Mindee with other applications. n8n supports various Mindee features, including invoice predictions. ## Credentials Refer to [Mindee credentials](https://docs.n8n.io/integrations/builtin/credentials/mindee/) for guidance on setting up authentication. ## Operations - **Invoice** - Predict - **Receipt** - Predict ## Best Practices If this node doesn't support the operation you want to do, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. ### Steps for HTTP Request Node 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # MISP Node Documentation Use the MISP node to automate work in MISP and integrate MISP with other applications. It supports a wide range of MISP features, including creating, updating, deleting, and retrieving events, feeds, and organizations. ## Operations - **Attribute** - Create - Delete - Get - Get All - Search - Update - **Event** - Create - Delete - Get - Get All - Publish - Search - Unpublish - Update - **Event Tag** - Add - Remove - **Feed** - Create - Disable - Enable - Get - Get All - Update - **Galaxy** - Delete - Get - Get All - **Noticelist** - Get - Get All - **Object** - Search - **Organisation** - Create - Delete - Get - Get All - Update - **Tag** - Create - Delete - Get All - Update - **User** - Create - Delete - Get - Get All - Update - **Warninglist** - Get - Get All ## Configuration Instructions ### Credentials For guidance on setting up authentication, refer to [MISP credentials](https://docs.n8n.io/integrations/builtin/credentials/misp/). ### If an Operation Isn't Supported If the MISP node does not support the operation you want to perform, you can use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Mocean Node Use the Mocean node to automate work in Mocean and integrate Mocean with other applications. n8n supports a wide range of Mocean features, including sending SMS and voice messages. ## Credentials Refer to Mocean credentials for guidance on setting up authentication. ## Operations - **SMS** - Send SMS/Voice message - **Voice** - Send SMS/Voice message ## Templates and Examples Browse Mocean integration templates, or search all templates. ---------------------------------------- # monday.com Node Documentation ## Overview The monday.com node automates work in monday.com and integrates it with other applications. n8n supports various monday.com features including creating new boards and managing items on those boards. ### Minimum Required Version - This node requires n8n version 1.22.6 or above. ### Credentials Refer to the [monday.com credentials](https://docs.n8n.io/integrations/builtin/credentials/mondaycom/) for guidance on setting up authentication. ## Operations ### Board - Archive a board - Create a new board - Get a board - Get all boards ### Board Column - Create a new column - Get all columns ### Board Group - Delete a group in a board - Create a group in a board - Get list of groups in a board ### Board Item - Add an update to an item - Change a column value for a board item - Change multiple column values for a board item - Create an item in a board's group - Delete an item - Get an item - Get all items - Get items by column value - Move item to group ## What to Do If Your Operation Isn't Supported If the needed operation isn't supported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. ### Steps to Use HTTP Request Node 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # MongoDB Node Documentation Use the MongoDB node to automate work in MongoDB and integrate with other applications. n8n supports various MongoDB features, including aggregating, updating, finding, deleting, and getting documents. ## Credentials Refer to [MongoDB credentials](https://docs.n8n.io/integrations/builtin/credentials/mongodb/) for guidance on setting up authentication. ## Operations - Aggregate documents - Delete documents - Find documents - Find and replace documents - Find and update documents - Insert documents - Update documents ---------------------------------------- # Monica CRM Node Documentation Use the Monica CRM node to automate work in Monica CRM and integrate it with other applications. n8n supports various Monica CRM features, including creating, updating, deleting, and retrieving activities, calls, contracts, messages, tasks, and notes. ## Credentials Refer to [Monica CRM credentials](https://docs.n8n.io/integrations/builtin/credentials/monicacrm/) for guidance on setting up authentication. ## Operations - **Activity** - Create an activity - Delete an activity - Retrieve an activity - Retrieve all activities - Update an activity - **Call** - Create a call - Delete a call - Retrieve a call - Retrieve all calls - Update a call - **Contact** - Create a contact - Delete a contact - Retrieve a contact - Retrieve all contacts - Update a contact - **Contact Field** - Create a contact field - Delete a contact field - Retrieve a contact field - Update a contact field - **Contact Tag** - Add - Remove - **Conversation** - Create a conversation - Delete a conversation - Retrieve a conversation - Update a conversation - **Conversation Message** - Add a message to a conversation - Update a message in a conversation - **Journal Entry** - Create a journal entry - Delete a journal entry - Retrieve a journal entry - Retrieve all journal entries - Update a journal entry - **Note** - Create a note - Delete a note - Retrieve a note - Retrieve all notes - Update a note - **Reminder** - Create a reminder - Delete a reminder - Retrieve a reminder - Retrieve all reminders - Update a reminder - **Tag** - Create a tag - Delete a tag - Retrieve a tag - Retrieve all tags - Update a tag - **Task** - Create a task - Delete a task - Retrieve a task - Retrieve all tasks - Update a task ---------------------------------------- # MQTT Node Documentation ## Overview The MQTT node enables automation in MQTT and integration with other applications, supporting the transportation of messages. ## Credentials Refer to [MQTT credentials](https://docs.n8n.io/integrations/builtin/credentials/mqtt/) for authentication setup guidance. ## Operations - **Send Message**: The MQTT node can send a message where you can set the message topic and choose to include node input data as part of the message. ## Templates and Examples ### Example Workflows 1. **IoT Button Remote / Spotify Control Integration with MQTT** 2. **Receive Messages for a MQTT Queue** 3. **Send Location Updates of the ISS to a Topic in MQTT** ## Related Resources - For MQTT triggers, refer to the [trigger node documentation](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.mqtttrigger/). - Additional information is available in [MQTT's documentation](https://mqtt.org/getting-started/). ---------------------------------------- # MSG91 Node The MSG91 node allows automation of tasks in MSG91 and facilitates integration with other applications to send SMS messages. ## Credentials Refer to MSG91 credentials for guidance on setting up authentication. ## Operations - **Send SMS** - This operation allows sending SMS messages through the MSG91 service. ## Find Your Sender ID 1. Log in to your MSG91 dashboard. 2. Select **Sender Id** in the left panel. 3. If you don't already have one, select **Add Sender Id +**, fill in the details, and select **Save Sender Id**. ---------------------------------------- # MySQL Node Use the MySQL node to automate work in MySQL and integrate MySQL with other applications. n8n supports a range of MySQL features, including executing SQL queries, inserting, and updating rows in a database. ## Credentials Refer to MySQL credentials for guidance on setting up authentication. ## Operations - **Delete** - **Execute SQL** - **Insert** - **Insert or Update** - **Select** - **Update** ## Use Query Parameters When creating a query to run on a MySQL database, you can use the **Query Parameters** field in the **Options** section to load data into the query. n8n sanitizes data in query parameters, which prevents SQL injection. Example of a query to find a person by their email address: ```sql SELECT * FROM $1:name WHERE email = $2; ``` In **Query Parameters**, provide the field values to use, either fixed values or expressions: ```javascript users, {{ $json.email }} ``` ## Common Issues Refer to common issues for suggested resolution steps. ---------------------------------------- # Customer Datastore (n8n Training) Node Documentation ## Overview The Customer Datastore node is intended for use exclusively in the n8n new user onboarding tutorial. It provides dummy data for testing purposes and has no additional functionality. ## Node Information - **Node Name**: Customer Datastore (n8n Training) - **Use Case**: Dummy data generation for testing in tutorials ## Best Practices - Use this node strictly for onboarding and testing scenarios. It should not be utilized in production workflows due to its limited functionality. ---------------------------------------- # Customer Messenger (n8n Training) Node Documentation ## Overview The Customer Messenger node is designed exclusively for the n8n new user onboarding tutorial and does not provide additional functionality. ## Node Details - **Node Name:** Customer Messenger - **Usage:** For n8n new user onboarding tutorial only. ## Configuration Instructions No further configuration details or parameters are available for the Customer Messenger node, as it only serves a tutorial purpose. ---------------------------------------- # NASA Node Documentation ## Overview The NASA node provides automation capabilities to integrate NASA services with other applications, allowing retrieval of imagery and data. ## Credentials Refer to [NASA credentials](https://docs.n8n.io/integrations/builtin/credentials/nasa/) for authentication setup. ## Operations - **Astronomy Picture of the Day**: Get the Astronomy Picture of the Day. - **Asteroid Neo-Feed**: Retrieve a list of asteroids based on their closest approach date to Earth. - **Asteroid Neo-Lookup**: Look up an asteroid based on its NASA SPK-ID. - **Asteroid Neo-Browse**: Browse the overall asteroid dataset. - **DONKI Coronal Mass Ejection**: Retrieve DONKI coronal mass ejection data. - **DONKI Interplanetary Shock**: Retrieve DONKI interplanetary shock data. - **DONKI Solar Flare**: Retrieve DONKI solar flare data. - **DONKI Solar Energetic Particle**: Retrieve DONKI solar energetic particle data. - **DONKI Magnetopause Crossing**: Retrieve data on DONKI magnetopause crossings. - **DONKI Radiation Belt Enhancement**: Retrieve DONKI radiation belt enhancement data. - **DONKI High Speed Stream**: Retrieve DONKI high speed stream data. - **DONKI WSA+EnlilSimulation**: Retrieve DONKI WSA+EnlilSimulation data. - **DONKI Notifications**: Retrieve DONKI notifications data. - **Earth Imagery**: Retrieve Earth imagery. - **Earth Assets**: Retrieve Earth assets. ## Templates and Examples - **Set credentials dynamically using expressions** - **Send the astronomy picture of the day daily to a Telegram channel** - **Retrieve NASA Space Weather & Asteroid Data with GPT-4o-mini and Telegram** ---------------------------------------- # Netlify Node Documentation The Netlify node automates work in Netlify and integrates with other applications. Supported features include getting and cancelling deployments, as well as deleting and getting sites. ## Credentials Refer to Netlify credentials for guidance on setting up authentication. ## Operations ### Deploy - **Cancel a deployment** - **Create a new deployment** - **Get a deployment** - **Get all deployments** ### Site - **Delete a site** - **Get a site** - **Returns all sites** ## Best Practices Utilize the Netlify node for automating deployments and managing site configurations efficiently. ## Workflow Patterns 1. Deploy site when new content is added. 2. Send notification when deployment fails. 3. Add Netlify Form submissions to Airtable. ---------------------------------------- # Netscaler ADC Node Use the Netscaler ADC node to automate work in Netscaler ADC, integrating it with other applications. ## Operations - **Certificate** - Create - Install - **File** - Delete - Download - Upload ## Credentials Refer to [Netscaler ADC credentials](https://docs.n8n.io/integrations/builtin/credentials/netscaleradc/) for guidance on setting up authentication. ## HTTP Request Node If this node doesn't support the operation you want, use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Nextcloud Node Documentation Use the Nextcloud node to automate work in Nextcloud and integrate Nextcloud with other applications. This node supports various Nextcloud features, including file and folder management and user operations. ## Credentials Refer to the [Nextcloud credentials](https://docs.n8n.io/integrations/builtin/credentials/nextcloud/) for guidance on setting up authentication. ## Operations ### File Operations - **Copy a file** - **Delete a file** - **Download a file** - **Move a file** - **Share a file** - **Upload a file** ### Folder Operations - **Copy a folder** - **Create a folder** - **Delete a folder** - **Return the contents of a given folder** - **Move a folder** - **Share a folder** ### User Operations - **Invite a user to a Nextcloud organization** - **Delete a user** - **Retrieve information about a single user** - **Retrieve a list of users** - **Edit attributes related to a user** ## What to Do If Your Operation Isn't Supported If the desired operation isn't supported by the Nextcloud node, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the Nextcloud API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the Nextcloud service. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # NocoDB Node Documentation Use the NocoDB node to automate work in NocoDB, integrating it with other applications. n8n supports various NocoDB features, including: ## Operations - **Row** - **Create**: Create a new row in a NocoDB table. - **Delete**: Delete a specific row from a NocoDB table. - **Get**: Retrieve a single row from a NocoDB table. - **Get Many**: Retrieve multiple rows from a NocoDB table. - **Update a row**: Modify a specific row in a NocoDB table. ## Credentials Refer to the [NocoDB credentials documentation](https://docs.n8n.io/integrations/builtin/credentials/nocodb/) for guidance on setting up authentication. ## Best Practices If your desired operation is not supported by the NocoDB node, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the NocoDB API. ### Procedure: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Choose your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Notion Node Documentation Use the Notion node to automate work in Notion and integrate it with other applications. n8n supports features such as getting and searching databases, creating pages, and retrieving users. ## Credentials Refer to [Notion credentials](https://docs.n8n.io/integrations/builtin/credentials/notion/) for authentication setup. ## Operations - **Block** - Append After - Get Child Blocks - **Database** - Get - Get Many - Search - **Database Page** - Create - Get - Get Many - Update - **Page** - Archive - Create - Search - **User** - Get - Get Many ## Common Issues For common errors or issues and suggested resolution steps, refer to [Common issues](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.notion/common-issues/). ## Notes If an operation is not supported by this node, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. Setup steps include: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Choose your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # npm Node Documentation Use the npm node to automate work in npm and integrate npm with other applications. ## Credentials Refer to npm credentials for guidance on setting up authentication. ## Operations - **Package** - Get Package Metadata - Get Package Versions - Search for Packages - **Distribution Tag** - Get All Tags - Update a Tag ## What to do if your operation isn't supported If this node doesn't support the operation you want to do, you can use the HTTP Request node to call the service's API. You can use the credential you created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- ## Odoo Node Use the Odoo node to automate work in Odoo and integrate Odoo with other applications. n8n supports various Odoo features, including creating, updating, deleting, and getting contracts, resources, and opportunities. ### Credentials Refer to Odoo credentials documentation for guidance on setting up authentication. ### Operations - **Contact** - Create a new contact - Delete a contact - Get a contact - Get all contacts - Update a contact - **Custom Resource** - Create a new item - Delete an item - Get an item - Get all items - Update an item - **Note** - Create a new note - Delete a note - Get a note - Get all notes - Update a note - **Opportunity** - Create a new opportunity - Delete an opportunity - Get an opportunity - Get all opportunities - Update an opportunity ### Best Practices The Odoo node can enhance the capabilities of an AI agent. When used in this way, many parameters can be set automatically or with information directed by AI. Refer to AI tool parameters documentation for more information. ---------------------------------------- # Okta Node Documentation Use the Okta node to automate work in Okta and integrate Okta with other applications. n8n has built-in support for a wide range of Okta features, including creating, updating, and deleting users. ## Operations - **User** - Create a new user - Delete an existing user - Get details of a user - Get many users - Update an existing user ## Credentials Authentication information for this node can be found in the [Okta credentials documentation](https://docs.n8n.io/integrations/builtin/credentials/okta/). ## HTTP Request Node If an operation isn't supported by the Okta node, use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to the [Custom API operations documentation](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # One Simple API Node Use the One Simple API node to automate work and integrate One Simple API with other applications. n8n supports various features, including getting profiles, retrieving information, and generating utilities. ## Operations - **Information** - Convert a value between currencies - Retrieve image metadata from a URL - **Social Profile** - Get details about an Instagram profile - Get details about a Spotify Artist - **Utility** - Expand a shortened URL - Generate a QR Code - Validate an email address - **Website** - Generate a PDF from a webpage - Get SEO information from a website - Create a screenshot from a webpage ## Credentials Refer to One Simple API credentials documentation for guidance on setting up authentication. ---------------------------------------- # Onfleet Node Documentation Use the Onfleet node to automate work in Onfleet and integrate Onfleet with other applications. n8n supports various Onfleet features, including creating and deleting tasks and retrieving organizations' details. ## Credentials Refer to [Onfleet credentials](https://docs.n8n.io/integrations/builtin/credentials/onfleet/) for guidance on setting up authentication. ## Operations ### Admin - **Create a new Onfleet admin** - **Delete an Onfleet admin** - **Get all Onfleet admins** - **Update an Onfleet admin** ### Container - **Add task at index (or append)** - **Get container information** - **Fully replace a container's tasks** ### Destination - **Create a new destination** - **Get a specific destination** ### Hub - **Create a new Onfleet hub** - **Get all Onfleet hubs** - **Update an Onfleet hub** ### Organization - **Retrieve your own organization's details** - **Retrieve the details of an organization with which you are connected** ### Recipient - **Create a new Onfleet recipient** - **Get a specific Onfleet recipient** - **Update an Onfleet recipient** ### Task - **Create a new Onfleet task** - **Clone an Onfleet task** - **Force-complete a started Onfleet task** - **Delete an Onfleet task** - **Get all Onfleet tasks** - **Get a specific Onfleet task** - **Update an Onfleet task** ### Team - **Automatically dispatch tasks assigned to a team to on-duty drivers** - **Create a new Onfleet team** - **Delete an Onfleet team** - **Get a specific Onfleet team** - **Get all Onfleet teams** - **Get estimated times for upcoming tasks for a team, returns a selected driver** - **Update an Onfleet team** ### Worker - **Create a new Onfleet worker** - **Delete an Onfleet worker** - **Get a specific Onfleet worker** - **Get all Onfleet workers** - **Get a specific Onfleet worker schedule** - **Update an Onfleet worker** ---------------------------------------- # OpenThesaurus Node The OpenThesaurus node allows for automation of work in OpenThesaurus and integration with other applications. It supports synonym look-up for German words. ## Credentials No authentication is required for the OpenThesaurus node. ## Operations - **Get synonyms** for a German word in German. ## Templates and Examples Browse OpenThesaurus integration templates or search all templates on the n8n website. ---------------------------------------- # OpenWeatherMap Node Documentation ## Overview The OpenWeatherMap node is used to automate tasks within OpenWeatherMap and integrate it with other applications. It supports retrieving current and upcoming weather data. ## Credentials Refer to the OpenWeatherMap credentials documentation for guidance on setting up authentication. ## Operations - **Get Current Weather**: Returns the current weather data. - **Get 5-Day Forecast**: Returns the weather data for the next 5 days. ## Templates and Examples 1. **Get Weather Forecast via Telegram** 2. **Get information about the weather for any city** 3. **Receive the weather information of any city** For more templates and workflows, visit the OpenWeatherMap integration templates. ---------------------------------------- # Oura Node Documentation Use the Oura node to automate work in Oura and integrate Oura with other applications. n8n provides support for a variety of Oura features, including retrieving profiles and summaries. ## Credentials Refer to Oura credentials for guidance on setting up authentication. ## Operations - **Profile** - Get the user's personal information. - **Summary** - Get the user's activity summary. - Get the user's readiness summary. - Get the user's sleep summary. ---------------------------------------- # Paddle Node Use the Paddle node to automate work in Paddle, integrating Paddle with other applications. n8n supports a range of Paddle features: creating, updating, and getting coupons, as well as fetching plans, products, and users. ## Credentials Refer to Paddle credentials documentation for guidance on setting up authentication. ## Operations - **Coupon** - Create a coupon. - Get all coupons. - Update a coupon. - **Payment** - Get all payments. - Reschedule payment. - **Plan** - Get a plan. - Get all plans. - **Product** - Get all products. - **User** - Get all users. ---------------------------------------- # PagerDuty Node Documentation Use the PagerDuty node to automate work in PagerDuty and integrate PagerDuty with other applications. n8n supports a wide range of PagerDuty features including creating incident notes, updating, and retrieving log entries and users. ## Credentials Refer to [PagerDuty credentials](https://docs.n8n.io/integrations/builtin/credentials/pagerduty/) for guidance on setting up authentication. ## Operations - **Incident** - Create an incident - Get an incident - Get all incidents - Update an incident - **Incident Note** - Create an incident note - Get all incident's notes - **Log Entry** - Get a log entry - Get all log entries - **User** - Get a user ## Custom API Operations If the operation you want is not supported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. Use the credential created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # PayPal Node Documentation ## Core Concepts The PayPal node in n8n automates tasks in PayPal and facilitates integration with other applications. It supports various PayPal features, such as creating batch payouts and canceling unclaimed payout items. ## Credentials Refer to the PayPal credentials documentation for setting up authentication. ## Operations - **Payout** - Create a batch payout - Show batch payout details - **Payout Item** - Cancels an unclaimed payout item - Show payout item details ## Best Practices When utilizing the PayPal node, ensure proper configuration of credentials and verify the operation compatibility with your PayPal account settings. ## Code Examples (None provided in the documentation) ## Configuration Instructions 1. Set up PayPal credentials as detailed in the linked documentation. 2. Configure the relevant operations as required for your workflows. ---------------------------------------- # Peekalink Node Documentation Use the Peekalink node to automate tasks in Peekalink and integrate it with other applications. n8n supports checking and reviewing links with Peekalink. ## Credentials Refer to Peekalink credentials for guidance on setting up authentication. ## Operations - **Check**: Check whether a preview for a given link is available. - **Return Preview**: Return the preview for a provided link. ---------------------------------------- # PhantomBuster Node Use the PhantomBuster node to automate work in PhantomBuster and integrate with other applications. n8n supports various PhantomBuster features, including adding, deleting, and retrieving agents. ## Credentials Refer to [PhantomBuster credentials](https://docs.n8n.io/integrations/builtin/credentials/phantombuster/) for authentication setup. ## Operations - **Agent** - Delete an agent by ID. - Get an agent by ID. - Get all agents of the current user's organization. - Get the output of the most recent container of an agent. - Add an agent to the launch queue. ## Custom Operations If a specific operation is not supported by the PhantomBuster node, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for additional information. ---------------------------------------- # Philips Hue Node Use the Philips Hue node to automate work in Philips Hue and integrate Philips Hue with other applications. n8n has built-in support for a wide range of Philips Hue features, including deleting, retrieving, and updating lights. ## Credentials Refer to [Philips Hue credentials](https://docs.n8n.io/integrations/builtin/credentials/philipshue/) for guidance on setting up authentication. ## Operations - **Light** - **Delete a light** - **Retrieve a light** - **Retrieve all lights** - **Update a light** ## Handling Unsupported Operations If this node doesn't support the operation you want to do, you can use the HTTP Request node to call the service's API. You can use the credential you created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Plivo Node Documentation Use the Plivo node to automate work in Plivo and integrate Plivo with other applications. n8n supports various Plivo features, including making calls and sending SMS/MMS. ## Credentials Refer to Plivo credentials for guidance on setting up authentication. ## Operations - **Call** - Make a voice call. - **MMS** - Send an MMS message (US/Canada only). - **SMS** - Send an SMS message. ## Templates and Examples Browse Plivo integration templates or search all templates. ---------------------------------------- ## PostBin Node Documentation PostBin is a service that helps you test API clients and webhooks. Use the PostBin node to automate work in PostBin and integrate it with other applications. ### Operations - **Bin** - Create - Get - Delete - **Request** - Get - Remove First - Send ### Sending Requests to PostBin To send requests to a PostBin bin: 1. Go to PostBin and follow the steps to generate a new bin. PostBin gives you a unique URL, including a bin ID. 2. In the PostBin node, select the **Request** resource. 3. Choose the type of **Operation** you want to perform. 4. Enter your bin ID in **Bin ID**. ### Creating and Managing Bins To create and manage PostBin bins using the PostBin node: 1. In **Resource**, select **Bin**. 2. Choose an **Operation** (create, delete, or get a bin). ---------------------------------------- # Pipedrive Node Documentation Use the Pipedrive node to automate work in Pipedrive and integrate it with other applications. n8n supports various Pipedrive features including creating, updating, deleting, and retrieving activity, files, notes, organizations, and leads. ## Credentials Refer to Pipedrive credentials for guidance on setting up authentication. ## Operations ### Activity - Create an activity - Delete an activity - Get data of an activity - Get data of all activities - Update an activity ### Deal - Create a deal - Delete a deal - Duplicate a deal - Get data of a deal - Get data of all deals - Search a deal - Update a deal ### Deal Activity - Get all activities of a deal ### Deal Product - Add a product to a deal - Get all products in a deal - Remove a product from a deal - Update a product in a deal ### File - Create a file - Delete a file - Download a file - Get data of a file ### Lead - Create a lead - Delete a lead - Get data of a lead - Get data of all leads - Update a lead ### Note - Create a note - Delete a note - Get data of a note - Get data of all notes - Update a note ### Organization - Create an organization - Delete an organization - Get data of an organization - Get data of all organizations - Update an organization - Search organizations ### Person - Create a person - Delete a person - Get data of a person - Get data of all persons - Search all persons - Update a person ### Product - Get data of all products ## Best Practices If this node doesn't support the operation you need, use the HTTP Request node to call the service's API. Use the credential created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to Custom API operations for further information. ---------------------------------------- # Postgres Node Documentation ## Overview The Postgres node is used to automate interactions with Postgres databases, allowing for the execution of queries, and inserting and updating rows. ## Credentials Refer to [Postgres credentials](https://docs.n8n.io/integrations/builtin/credentials/postgres/) for setting up authentication. ## Operations - **Delete**: Remove an entire table or specific rows. - **Execute Query**: Run a custom SQL query. - **Insert**: Add rows to a table. - **Insert or Update**: Insert new rows or update existing ones. - **Select**: Retrieve rows from a table. - **Update**: Modify existing rows in a table. ### Delete Operation **Parameters:** - **Credential to connect with**: Select or create a Postgres credential. - **Operation**: Select **Delete**. - **Schema**: Specify the schema containing the target table. - **Table**: Specify the target table. - **Command**: - **Truncate**: Remove data but keep table structure. - **Restart Sequences**: Reset auto-increment columns. - **Delete**: Remove rows based on a condition. - **Select Rows**: Define the matching conditions. - **Combine Conditions**: Use **AND** or **OR**. - **Drop**: Permanently delete the table and its structure. **Delete Options:** - **Cascade**: Drop objects depending on the table. - **Connection Timeout**: Seconds to connect to the database. - **Delay Closing Idle Connection**: Time before considering idle connections eligible for closure. - **Query Batching**: Options for query execution mode (single, independent, transaction). - **Output Large-Format Numbers As**: Choose between **Numbers** or **Text** for output formats. ### Execute Query Operation **Parameters:** - **Credential to connect with**: Select or create a Postgres credential. - **Operation**: Select **Execute Query**. - **Query**: The SQL statement to run. **Execute Query Options:** - **Connection Timeout**: Seconds to connect. - **Delay Closing Idle Connection**: Time for idle connections. - **Query Batching**: Execution mode (single, independent, transaction). - **Query Parameters**: List of values for parameters in the query. - **Output Large-Format Numbers As**: Choose between **Numbers** or **Text**. - **Replace Empty Strings with NULL**: Option to replace empty strings with NULL. ### Insert Operation **Parameters:** - **Credential to connect with**: Select or create a Postgres credential. - **Operation**: Select **Insert**. - **Schema**: Specify the schema containing the target table. - **Table**: Specify the target table. - **Mapping Column Mode**: - **Map Each Column Manually**: Specify values for each column. - **Map Automatically**: Auto-map incoming data to matching column names. **Insert Options:** - **Connection Timeout**: Seconds to connect. - **Delay Closing Idle Connection**: Time for idle connections. - **Query Batching**: Mode of execution. - **Output Columns**: Specify which columns to return. - **Output Large-Format Numbers As**: Choose between **Numbers** or **Text**. - **Skip on Conflict**: Skip on constraint violations. - **Replace Empty Strings with NULL**: Replace empty strings in input with NULL. ### Insert or Update Operation **Parameters:** - **Credential to connect with**: Select or create a Postgres credential. - **Operation**: Select **Insert or Update**. - **Schema**: Specify the schema. - **Table**: Specify the target table. - **Mapping Column Mode**: Options for mapping column data. **Insert or Update Options:** - **Connection Timeout**: Seconds to connect. - **Delay Closing Idle Connection**: Time for idle connections. - **Query Batching**: Execution mode. - **Output Columns**: Specify which columns to return. - **Output Large-Format Numbers As**: Choose between **Numbers** or **Text**. - **Replace Empty Strings with NULL**: Replace empty strings. ### Select Operation **Parameters:** - **Credential to connect with**: Select or create a Postgres credential. - **Operation**: Select **Select**. - **Schema**: Specify the schema. - **Table**: Specify the target table. - **Return All**: Option to return all or limit results. - **Limit**: Maximum number of returned items. - **Select Rows**: Define conditions for row selection. - **Combine Conditions**: Use **AND** or **OR**. - **Sort**: Specify sorting method. **Select Options:** - **Connection Timeout**: Seconds to connect. - **Delay Closing Idle Connection**: Time for idle connections. - **Query Batching**: Execution mode. - **Output Columns**: Specify columns to return. - **Output Large-Format Numbers As**: Choose between **Numbers** or **Text**. ### Update Operation **Parameters:** - **Credential to connect with**: Select or create a Postgres credential. - **Operation**: Select **Update**. - **Schema**: Specify the schema. - **Table**: Specify the target table. - **Mapping Column Mode**: Options for mapping column data. **Update Options:** - **Connection Timeout**: Seconds to connect. - **Delay Closing Idle Connection**: Time for idle connections. - **Query Batching**: Execution mode. - **Output Columns**: Specify columns to return. - **Output Large-Format Numbers As**: Choose between **Numbers** or **Text**. - **Replace Empty Strings with NULL**: Replace empty strings. ## Use Query Parameters Query parameters can be used in SQL queries to prevent SQL injection. Use expressions to pass values dynamically in your queries. **Example:** ```sql SELECT * FROM $1:name WHERE email = $2; ``` **Parameters:** ```javascript // users is an example table name {{ [ 'users', $json.email ] }} ``` ## Common Issues Refer to specific [Common issues](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.postgres/common-issues/) for troubleshooting related to Postgres node usage. ---------------------------------------- # PostHog Node Documentation Use the PostHog node to automate work in PostHog and integrate PostHog with other applications. n8n supports various PostHog features, including creating aliases, events, identities, and tracking pages. ## Credentials Refer to the PostHog credentials documentation for guidance on setting up authentication. ## Operations - **Alias** - Create an alias - **Event** - Create an event - **Identity** - Create - **Track** - Track a page - Track a screen ## Templates and Examples Browse and search for [PostHog integration templates](https://n8n.io/integrations/posthog/). ---------------------------------------- # Pushcut Node Documentation Use the Pushcut node to automate work in Pushcut and integrate Pushcut with other applications. n8n supports sending notifications with Pushcut. ## Credentials Refer to [Pushcut credentials](https://docs.n8n.io/integrations/builtin/credentials/pushcut/) for guidance on setting up authentication. ## Operations - **Notification** - Send a notification ## Templates and Examples Browse Pushcut integration templates or search all templates. ---------------------------------------- # ProfitWell Node Use the ProfitWell node to automate operations in ProfitWell and integrate ProfitWell with other applications. It supports getting account settings and retrieving financial metrics. ## Credentials Refer to ProfitWell credentials for authentication setup guidance. ## Operations - **Company** - Get your company's ProfitWell account settings - **Metric** - Retrieve financial metrics broken down by day for either the current month or the last month ## API Documentation - **Endpoint:** `/company` - **Method:** GET - **Description:** Retrieve the company's ProfitWell account settings. - **Endpoint:** `/metric` - **Method:** GET - **Description:** Retrieve financial metrics by day for the current month or the last month. ## Best Practices - Ensure proper authentication using ProfitWell credentials before executing operations. - Handle API responses appropriately to catch and address any potential errors. ---------------------------------------- # Pushbullet Node Documentation ## Overview Use the Pushbullet node to automate tasks in Pushbullet and integrate it with other applications. n8n supports various features of Pushbullet, including creating, updating, deleting, and retrieving pushes. ## Credentials Refer to Pushbullet credentials for guidance on setting up authentication. ## Operations - **Push** - Create a push - Delete a push - Get all pushes - Update a push ## Use of Unsupported Operations If a desired operation is not supported by this node, use the HTTP Request node to call the service's API. Steps to use the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # QuestDB Node Documentation ## Overview Use the QuestDB node to automate tasks in QuestDB and integrate it with other applications. n8n supports executing SQL queries and inserting rows in a QuestDB database. ## Operations - Executes a SQL query. - Inserts rows in the database. ## Node Reference ### Specify a Column's Data Type To specify a column's data type, append the column name with `:type`, where `type` is the desired data type. For example, to specify the type `int` for the column **id** and type `text` for the column **name**, use the following in the **Columns** field: ``` id:int,name:text ``` ## Credentials Refer to QuestDB credentials for guidance on setting up authentication. ---------------------------------------- ## Pushover Node Use the Pushover node to automate work in Pushover and integrate Pushover with other applications. n8n supports sending push notifications with Pushover. ### Credentials Refer to Pushover credentials for guidance on setting up authentication. ### Operations - **Message** - **Push**: Sends a push notification. ### What to Do if Your Operation Isn't Supported If this node doesn't support the operation you want to do, you can use the HTTP Request node to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Quick Base Node Documentation Use the Quick Base node to automate work in Quick Base and integrate it with other applications. n8n supports various Quick Base features, including creating, updating, deleting, and retrieving records, as well as managing fields and downloading files. ## Credentials Refer to Quick Base credentials for guidance on setting up authentication. ## Operations - **Field** - Get all fields - **File** - Delete a file - Download a file - **Record** - Create a record - Delete a record - Get all records - Update a record - Upsert a record - **Report** - Get a report - Run a report ## Templates and Examples Browse Quick Base integration templates or search all templates. ---------------------------------------- # QuickBooks Online Node Use the QuickBooks node to automate work in QuickBooks and integrate with other applications. n8n supports features including creating, updating, deleting, and retrieving bills, customers, employees, estimates, and invoices. ## Credentials Refer to QuickBooks credentials for guidance on setting up authentication. ## Operations ### Bill - Create - Delete - Get - Get All - Update ### Customer - Create - Get - Get All - Update ### Employee - Create - Get - Get All - Update ### Estimate - Create - Delete - Get - Get All - Send - Update ### Invoice - Create - Delete - Get - Get All - Send - Update - Void ### Item - Get - Get All ### Payment - Create - Delete - Get - Get All - Send - Update - Void ### Purchase - Get - Get All ### Transaction - Get Report ### Vendor - Create - Get - Get All - Update ## External HTTP Request If a required operation is not supported by this node, use the HTTP Request node to call the QuickBooks API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- Built with ❤️ by Synaptiv AI ---------------------------------------- # QuickChart Node Documentation ## Description The QuickChart node is used to automate work with QuickChart and integrate it with other applications. It supports various chart types, including: - Bar Chart - Doughnut Chart - Line Chart - Pie Chart - Polar Chart ## Operations To create a chart, select one of the following chart types: - Chart Type: - Bar Chart - Doughnut Chart - Line Chart - Pie Chart - Polar Chart ## AI Tool Integration This node can enhance the capabilities of an AI agent, allowing many parameters to be set automatically or influenced by AI. For detailed parameter information, refer to the [AI tool parameters documentation](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/). ## Best Practices Refer to [QuickChart's API documentation](https://quickchart.io/documentation/) for further information regarding QuickChart's features and functionalities. ---------------------------------------- # RabbitMQ Node Documentation ## Overview The RabbitMQ node automates work in RabbitMQ and integrates it with other applications, supporting various RabbitMQ features including accepting and forwarding messages. ## Credentials Refer to [RabbitMQ credentials](https://docs.n8n.io/integrations/builtin/credentials/rabbitmq/) for setting up authentication. ## Operations - **Delete From Queue**: Deletes a specific message from the queue. - **Send a Message to RabbitMQ**: Sends a message to a specified RabbitMQ exchange or queue. ## API Documentation N/A ## Code Examples N/A ## Configuration Instructions - Set up RabbitMQ credentials as required for authentication. - Use the operations listed for automation based on your workflow needs. ## Workflow Patterns - Use the RabbitMQ node in various workflows to integrate with other applications and automate messaging tasks. ## Best Practices - Ensure proper authentication is set up for the RabbitMQ node. - Test all operations with predefined messages to verify configurations. ---------------------------------------- # Reddit Node Documentation Use the Reddit node to automate work in Reddit and integrate Reddit with other applications. The node supports various Reddit features, including retrieving profiles, users, comments, and posts. ## Credentials Refer to Reddit credentials for guidance on setting up authentication. ## Operations ### Post - Submit a post to a subreddit - Delete a post from a subreddit - Get a post from a subreddit - Get all posts from a subreddit - Search posts in a subreddit or in all of Reddit ### Post Comment - Create a top-level comment in a post - Retrieve all comments in a post - Remove a comment from a post - Write a reply to a comment in a post ### Profile - Get profile information ### Subreddit - Retrieve background information about a subreddit - Retrieve information about subreddits from all of Reddit ### User - Get user information ## What to Do if Your Operation Isn't Supported If this node doesn't support your desired operation, you can use the HTTP Request node to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Raindrop Node Documentation Use the Raindrop node to automate work in Raindrop and integrate Raindrop with other applications. n8n supports a wide range of Raindrop features, including operations for users, tags, collections, and bookmarks. ## Credentials Refer to Raindrop credentials for guidance on setting up authentication. ## Operations - **Bookmark** - **Create**: Create a new bookmark. - **Delete**: Delete an existing bookmark. - **Get**: Retrieve a specific bookmark. - **Get All**: Retrieve all bookmarks. - **Update**: Update an existing bookmark. - **Collection** - **Create**: Create a new collection. - **Delete**: Delete an existing collection. - **Get**: Retrieve a specific collection. - **Get All**: Retrieve all collections. - **Update**: Update an existing collection. - **Tag** - **Delete**: Delete a tag. - **Get All**: Retrieve all tags. - **User** - **Get**: Retrieve user information. ## Technical Procedures ### What to Do if Your Operation Isn't Supported If the desired operation is not supported by the Raindrop node, use the HTTP Request node to call the service's API. #### Steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Choose your credential. Refer to Custom API operations for additional information. ---------------------------------------- # Redis Node Documentation ## Overview The Redis node automates tasks in Redis and integrates Redis with other applications. It supports various features such as deleting keys, retrieving key values, setting key values, and publishing messages to Redis channels. ## Credentials Refer to [Redis credentials](https://docs.n8n.io/integrations/builtin/credentials/redis/) for authentication setup. ## Operations - **Delete a Key:** Remove a key from Redis. - **Get Key Value:** Retrieve the value of a specified key from Redis. - **Instance Information:** Returns generic information about the Redis instance. - **Increment Key:** Atomically increments a key by 1, creating the key if it does not exist. - **Pattern Matching:** Returns all keys matching a specified pattern. - **Set Key Value:** Set the value of a specified key in Redis. - **Publish Message:** Publish a message to a specified Redis channel. ---------------------------------------- # Rocket.Chat Node Use the Rocket.Chat node to automate work in Rocket.Chat and integrate it with other applications. n8n supports posting messages to channels and sending direct messages with Rocket.Chat. ## Credentials Refer to Rocket.Chat credentials for guidance on setting up authentication. ## Operations - **Chat** - Post a message to a channel or send a direct message. ## If an Operation Isn't Supported If the node doesn't support the operation you want, you can use the HTTP Request node to call the service's API. Steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Rundeck Node Documentation Use the Rundeck node to automate work in Rundeck and integrate it with other applications. n8n supports executing jobs and retrieving metadata. ## Credentials Refer to Rundeck credentials for guidance on setting up authentication. ## Operations - **Job** - Execute a job - Get metadata of a job ## What to Do if Your Operation Isn't Supported If the Rundeck node does not support the operation you need, use the HTTP Request node to call the service's API. Use the credential created for this service: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to Custom API operations for more information. ## Find the Job ID 1. Access your Rundeck dashboard. 2. Open the project containing the job for n8n. 3. In the sidebar, select **JOBS**. 4. Under **All Jobs**, select the name of the job. 5. Copy the job ID displayed below the job name. 6. Paste the job ID in the **Job Id** field in n8n. ---------------------------------------- # S3 Node Documentation Use the S3 node to automate work in non-AWS S3 storage and integrate S3 with other applications. n8n supports a range of S3 features including: - **Creating buckets** - **Deleting buckets** - **Getting buckets** - **Copying files** - **Deleting files** - **Downloading files** - **Getting all files** - **Uploading files** - **Creating folders** - **Deleting folders** - **Getting all folders** ## Credentials Refer to [S3 credentials](https://docs.n8n.io/integrations/builtin/credentials/s3/) for authentication setup guidance. ## Operations ### Bucket Operations - Create a bucket - Delete a bucket - Get all buckets - Search within a bucket ### File Operations - Copy a file - Delete a file - Download a file - Get all files - Upload a file **Attach File for Upload**: Use another node to pass the file as a data property, such as the [Read/Write Files from Disk](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile/) node or the [HTTP Request](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) node. ### Folder Operations - Create a folder - Delete a folder - Get all folders ## Best Practices ### Setting File Permissions in Wasabi When uploading files to Wasabi, set permissions using the **ACL** dropdown, not the toggles. ---------------------------------------- # Salesforce Node Use the Salesforce node to automate work in Salesforce and integrate Salesforce with other applications. n8n supports features such as creating, updating, deleting, and retrieving accounts, attachments, cases, and leads, as well as uploading documents. ## Credentials Refer to [Salesforce credentials](https://docs.n8n.io/integrations/builtin/credentials/salesforce/) for authentication setup. ## Operations - **Account** - Add note to an account - Create an account - Upsert an account - Get an account - Get all accounts - Get account's metadata - Delete an account - Update an account - **Attachment** - Create an attachment - Delete an attachment - Get an attachment - Get all attachments - Get attachment's metadata - Update an attachment - **Case** - Add a comment to a case - Create a case - Get a case - Get all cases - Get case's metadata - Delete a case - Update a case - **Contact** - Add lead to a campaign - Add note to a contact - Create a contact - Upsert a contact - Delete a contact - Get a contact - Get all contacts - Get contact's metadata - Update a contact - **Custom Object** - Create a custom object record - Upsert a custom object record - Get a custom object record - Get all custom object records - Delete a custom object record - Update a custom object record - **Document** - Upload a document - **Flow** - Get all flows - Invoke a flow - **Lead** - Add lead to a campaign - Add note to a lead - Create a lead - Upsert a lead - Delete a lead - Get a lead - Get all leads - Get lead's metadata - Update a lead - **Opportunity** - Add note to an opportunity - Create an opportunity - Upsert an opportunity - Delete an opportunity - Get an opportunity - Get all opportunities - Get opportunity's metadata - Update an opportunity - **Search** - Execute a SOQL query returning results in a single response - **Task** - Create a task - Delete a task - Get a task - Get all tasks - Get task's metadata - Update a task - **User** - Get a user - Get all users ## Custom Fields To add custom fields to your request: 1. Select **Additional Fields** > **Add Field**. 2. In the dropdown, select **Custom Fields**. ## Unsupported Operations If the desired operation isn't supported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Salesmate Node Use the Salesmate node to automate work in Salesmate and integrate Salesmate with other applications. The node supports a wide range of Salesmate features, including the following operations: ## Operations ### Activity - **Create an activity** - **Delete an activity** - **Get an activity** - **Get all companies** - **Update an activity** ### Company - **Create a company** - **Delete a company** - **Get a company** - **Get all companies** - **Update a company** ### Deal - **Create a deal** - **Delete a deal** - **Get a deal** - **Get all deals** - **Update a deal** ## Credentials Refer to Salesmate credentials for guidance on setting up authentication. ---------------------------------------- # SeaTable Node Documentation Use the SeaTable node to automate work in SeaTable and integrate SeaTable with other applications. n8n supports a range of SeaTable features, including creating, updating, deleting, and retrieving rows. ## Credentials Refer to SeaTable credentials for guidance on setting up authentication. ## Operations - **Row** - **Create**: Create a new row in SeaTable. - **Delete**: Delete a specified row from SeaTable. - **Get**: Retrieve a single row from SeaTable. - **Get All**: Retrieve all rows from a specified SeaTable. - **Update**: Update an existing row in SeaTable. ---------------------------------------- # SecurityScorecard Node Use the SecurityScorecard node to automate work in SecurityScorecard and integrate with other applications. n8n supports various features of SecurityScorecard, including creating, updating, deleting, and retrieving portfolio data, as well as obtaining company information. ## Credentials Refer to SecurityScorecard credentials for guidance on setting up authentication. ## Operations ### Company - **Get company factor scores and issue counts** - **Get company's historical factor scores** - **Get company's historical scores** - **Get company information and summary of their scorecard** - **Get company's score improvement plan** ### Industry - **Get Factor Scores** - **Get Historical Factor Scores** - **Get Score** ### Invite - **Create an invite for a company/user** ### Portfolio - **Create a portfolio** - **Delete a portfolio** - **Get all portfolios** - **Update a portfolio** ### Portfolio Company - **Add a company to portfolio** - **Get all companies in a portfolio** - **Remove a company from portfolio** ### Report - **Download a generated report** - **Generate a report** - **Get list of recently generated reports** ---------------------------------------- # Segment Node Use the Segment node to automate work in Segment and integrate Segment with other applications. n8n supports a range of Segment features, including adding users to groups, creating identities, and tracking activities. ## Credentials Refer to Segment credentials for guidance on setting up authentication. ## Operations - **Group** - Add a user to a group. - **Identify** - Create an identity. - **Track** - Record the actions your users perform. Every action triggers an event, which can also have associated properties. - Record page views on your website, with optional extra information about the page being viewed. ## What to do if your operation isn't supported If this node doesn't support the operation you want, you can use the HTTP Request node to call the service's API. You can use the credential you created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # SendGrid Node Documentation ## Core Concepts The SendGrid node allows automation in SendGrid and integration with other applications. It supports creating, updating, deleting, and retrieving contacts and lists, as well as sending emails. ## Credentials Refer to [SendGrid credentials](https://docs.n8n.io/integrations/builtin/credentials/sendgrid/) for authentication setup. ## Operations - **Contact** - Create/update a contact - Delete a contact - Get a contact by ID - Get all contacts - **List** - Create a list - Delete a list - Get a list - Get all lists - Update a list - **Mail** - Send an email ## Configuration Instructions To perform operations not supported by the SendGrid node, use the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service to connect. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Sendy Node Use the Sendy node to automate work in Sendy and integrate it with other applications. n8n has built-in support for a wide range of Sendy features, including creating campaigns and managing subscribers. ## Credentials Refer to Sendy credentials for guidance on setting up authentication. ## Operations - **Campaign** - Create a campaign - **Subscriber** - Add a subscriber to a list - Count subscribers - Delete a subscriber from a list - Unsubscribe user from a list - Get the status of a subscriber ---------------------------------------- # Sentry.io Node Documentation The Sentry.io node allows automation in Sentry.io and integration with other applications. n8n supports numerous Sentry.io features, including creating, updating, deleting, and retrieving issues, projects, releases, and events. ## Credentials For authentication setup, refer to Sentry.io credentials. ## Operations - **Event** - Get event by ID - Get all events - **Issue** - Delete an issue - Get issue by ID - Get all issues - Update an issue - **Project** - Create a new project - Delete a project - Get project by ID - Get all projects - Update a project - **Release** - Create a release - Delete a release - Get release by version identifier - Get all releases - Update a release - **Organization** - Create an organization - Get organization by slug - Get all organizations - Update an organization - **Team** - Create a new team - Delete a team - Get team by slug - Get all teams - Update a team ## Using the HTTP Request Node If an operation is unsupported by the Sentry.io node, use the HTTP Request node to call the service's API. Set up as follows: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect. 3. Choose your credential. Refer to **Custom API operations** for further information. ---------------------------------------- # ServiceNow Node Documentation ## Overview The ServiceNow node automates tasks in ServiceNow and integrates it with other applications. It supports various features including getting business services, departments, configuration items, and creating, updating, or deleting incidents, users, and table records. ## Credentials Refer to the ServiceNow credentials documentation for authentication setup. ## Operations - **Business Service** - Get All - **Configuration Items** - Get All - **Department** - Get All - **Dictionary** - Get All - **Incident** - Create - Delete - Get - Get All - Update - **Table Record** - Create - Delete - Get - Get All - Update - **User** - Create - Delete - Get - Get All - Update - **User Group** - Get All - **User Role** - Get All ## Custom API Operations If an operation is not supported by this node, use the HTTP Request node to call the ServiceNow API. ### Instructions: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the ServiceNow service. 3. Select your credential. Refer to the Custom API operations documentation for more information. ---------------------------------------- # Shopify Node Documentation ## Overview The Shopify node automates tasks in Shopify and integrates it with other applications. It supports operations for creating, updating, deleting, and retrieving orders and products. ## Credentials Refer to [Shopify credentials](https://docs.n8n.io/integrations/builtin/credentials/shopify/) for guidance on setting up authentication. ## Operations - **Order** - Create an order - Delete an order - Get an order - Get all orders - Update an order - **Product** - Create a product - Delete a product - Get a product - Get all products - Update a product ## Using HTTP Request Node If an operation is not supported by the Shopify node: 1. Use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. 2. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 3. Select the service to connect to. 4. Choose your created credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # SIGNL4 Node Documentation Use the SIGNL4 node to automate work in SIGNL4, and integrate SIGNL4 with other applications. n8n supports sending and resolving alerts with SIGNL4. ## Credentials Refer to the [SIGNL4 credentials](https://docs.n8n.io/integrations/builtin/credentials/signl4/) for guidance on setting up authentication. ## Operations - **Alert** - **Send an alert**: Send an alert through SIGNL4. - **Resolve an alert**: Resolve an existing alert in SIGNL4. ## Templates and Examples **Monitor a file for changes and send an alert** **Send weather alerts to your mobile phone with OpenWeatherMap and SIGNL4** **Send TheHive Alerts Using SIGNL4** Additional workflow templates are available at the SIGNL4 integration page. ---------------------------------------- # Slack Node Documentation The Slack node allows automation of tasks within Slack and integration with other applications. It supports a wide range of features including channel management, user interactions, and message handling. ## Credentials Refer to [Slack credentials](https://docs.n8n.io/integrations/builtin/credentials/slack/) for authentication setup. ## Operations ### Channel - **Archive**: Archive a channel. - **Close**: Close a direct message or multi-person direct message. - **Create**: Create a public or private channel. - **Get**: Retrieve information about a channel. - **Get Many**: Retrieve a list of channels. - **History**: Retrieve a channel's message history. - **Invite**: Invite a user to a channel. - **Join**: Join an existing channel. - **Kick**: Remove a user from a channel. - **Leave**: Leave a channel. - **Member**: List members of a channel. - **Open**: Open a direct message or multi-person direct message. - **Rename**: Rename a channel. - **Replies**: Retrieve thread messages from a channel. - **Set Purpose**: Set the purpose of a channel. - **Set Topic**: Set the topic of a channel. - **Unarchive**: Unarchive a channel. ### File - **Get**: Retrieve a file. - **Get Many**: Retrieve and filter team files. - **Upload**: Upload a file. ### Message - **Delete**: Delete a message. - **Get Permalink**: Retrieve a message's permalink. - **Search**: Search for messages. - **Send**: Send a message. - **Send and Wait for Approval**: Send a message and wait for approval from the recipient. - **Update**: Update a message. ### Reaction - **Add**: Add a reaction to a message. - **Get**: Retrieve a message's reactions. - **Remove**: Remove a reaction from a message. ### Star - **Add**: Add a star to an item. - **Delete**: Remove a star from an item. - **Get Many**: Retrieve a list of stars for the authenticated user. ### User - **Get**: Retrieve user information. - **Get Many**: Retrieve a list of users. - **Get User's Profile**: Retrieve a user's profile. - **Get User's Status**: Retrieve a user's status. - **Update User's Profile**: Update a user's profile. ### User Group - **Create**: Create a user group. - **Disable**: Disable a user group. - **Enable**: Enable a user group. - **Get Many**: Retrieve a list of user groups. - **Update**: Update a user group. ## Required Scopes Add appropriate scopes to your Slack app for the Slack node to function. Refer to the following table for resource and operation mappings to Slack API methods: | **Resource** | **Operation** | **Slack API Method** | | --- | --- | --- | | Channel | Archive | [conversations.archive](https://api.slack.com/methods/conversations.archive) | | Channel | Close | [conversations.close](https://api.slack.com/methods/conversations.close) | | Channel | Create | [conversations.create](https://api.slack.com/methods/conversations.create) | | Channel | Get | [conversations.info](https://api.slack.com/methods/conversations.info) | | Channel | Get Many | [conversations.list](https://api.slack.com/methods/conversations.list) | | Channel | History | [conversations.history](https://api.slack.com/methods/conversations.history) | | Channel | Invite | [conversations.invite](https://api.slack.com/methods/conversations.invite) | | Channel | Join | [conversations.join](https://api.slack.com/methods/conversations.join) | | Channel | Kick | [conversations.kick](https://api.slack.com/methods/conversations.kick) | | Channel | Leave | [conversations.leave](https://api.slack.com/methods/conversations.leave) | | Channel | Member | [conversations.members](https://api.slack.com/methods/conversations.members) | | Channel | Open | [conversations.open](https://api.slack.com/methods/conversations.open) | | Channel | Rename | [conversations.rename](https://api.slack.com/methods/conversations.rename) | | Channel | Replies | [conversations.replies](https://api.slack.com/methods/conversations.replies) | | Channel | Set Purpose | [conversations.setPurpose](https://api.slack.com/methods/conversations.setPurpose) | | Channel | Set Topic | [conversations.setTopic](https://api.slack.com/methods/conversations.setTopic) | | Channel | Unarchive | [conversations.unarchive](https://api.slack.com/methods/conversations.unarchive) | | File | Get | [files.info](https://api.slack.com/methods/files.info) | | File | Get Many | [files.list](https://api.slack.com/methods/files.list) | | File | Upload | [files.upload](https://api.slack.com/methods/files.upload) | | Message | Delete | [chat.delete](https://api.slack.com/methods/chat.delete) | | Message | Get Permalink | [chat.getPermalink](https://api.slack.com/methods/chat.getPermalink) | | Message | Search | [search.messages](https://api.slack.com/methods/search.messages) | | Message | Send | [chat.postMessage](https://api.slack.com/methods/chat.postMessage) | | Message | Send and Wait for Approval | [chat.postMessage](https://api.slack.com/methods/chat.postMessage) | | Message | Update | [chat.update](https://api.slack.com/methods/chat.update) | | Reaction | Add | [reactions.add](https://api.slack.com/methods/reactions.add) | | Reaction | Get | [reactions.get](https://api.slack.com/methods/reactions.get) | | Reaction | Remove | [reactions.remove](https://api.slack.com/methods/reactions.remove) | | Star | Add | [stars.add](https://api.slack.com/methods/stars.add) | | Star | Delete | [stars.remove](https://api.slack.com/methods/stars.remove) | | Star | Get Many | [stars.list](https://api.slack.com/methods/stars.list) | | User | Get | [users.info](https://api.slack.com/methods/users.info) | | User | Get Many | [users.list](https://api.slack.com/methods/users.list) | | User | Get User's Profile | [users.profile.get](https://api.slack.com/methods/users.profile.get) | | User | Get User's Status | [users.getPresence](https://api.slack.com/methods/users.getPresence) | | User | Update User's Profile | [users.profile.set](https://api.slack.com/methods/users.profile.set) | | User Group | Create | [usergroups.create](https://api.slack.com/methods/usergroups.create) | | User Group | Disable | [usergroups.disable](https://api.slack.com/methods/usergroups.disable) | | User Group | Enable | [usergroups.enable](https://api.slack.com/methods/usergroups.enable) | | User Group | Get Many | [usergroups.list](https://api.slack.com/methods/usergroups.list) | | User Group | Update | [usergroups.update](https://api.slack.com/methods/usergroups.update) | ## Custom API Operations If an operation is not supported by this node, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API following these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect. 3. Choose your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for further details. ---------------------------------------- # seven node Use the seven node to automate work in seven and integrate seven with other applications. n8n supports features such as sending SMS and converting text to voice. ## Operations - **SMS** - **Send SMS** - **Voice Call** - Converts text to voice and calls a given number ## Credentials Refer to [seven credentials](https://docs.n8n.io/integrations/builtin/credentials/sms77/) for guidance on setting up authentication. ---------------------------------------- # Snowflake Node Documentation Use the Snowflake node to automate work in Snowflake and integrate Snowflake with other applications. n8n supports various Snowflake features, including executing SQL queries and inserting rows in a database. ## Credentials Refer to the [Snowflake credentials](https://docs.n8n.io/integrations/builtin/credentials/snowflake/) for guidance on setting up authentication. ## Operations - **Execute an SQL query**: Allows execution of SQL queries against the database. - **Insert rows in database**: Facilitates inserting new rows into the specified database table. - **Update rows in database**: Enables updating of existing rows in the specified database table. ## Templates and Examples ### Load Data into Snowflake Template for loading data into Snowflake. ### Create a Table, Insert, and Update Data Template for creating a table and inserting/updating data in the table. ### Import Productboard Notes Template for importing Productboard notes, companies, and features into Snowflake. ---------------------------------------- # Splunk Node Documentation Use the Splunk node to automate work in Splunk and integrate it with other applications. n8n supports a variety of Splunk features, including reporting on fired alerts, as well as managing search configurations. ## Credentials Refer to Splunk credentials for guidance on setting up authentication. ## Operations - **Fired Alert** - Get a fired alerts report - **Search Configuration** - Delete a search configuration - Get a search configuration - Get many search configurations - **Search Job** - Create a search job - Delete a search job - Get a search job - Get many search jobs - **Search Result** - Get many search results - **User** - Create a user - Delete a user - Get a user - Get many users - Update a user ## Templates and Examples Browse Splunk integration templates or search all templates for additional resources. ---------------------------------------- # Spontit Node Documentation Use the Spontit node to automate work in Spontit and integrate Spontit with other applications. n8n supports creating push notifications with Spontit. ## Credentials Refer to Spontit credentials for guidance on setting up authentication. ## Operations - **Push** - Create a push notification ## Templates and Examples Browse Spontit integration templates or search all templates. ---------------------------------------- # Spotify Node Use the Spotify node to automate tasks in Spotify and integrate it with other applications. ## Credentials Refer to [Spotify credentials](https://docs.n8n.io/integrations/builtin/credentials/spotify/) for authentication setup. ## Operations - **Album** - Get an album by URI or ID. - Get a list of new album releases. - Get an album's tracks by URI or ID. - Search albums by keyword. - **Artist** - Get an artist by URI or ID. - Get an artist's albums by URI or ID. - Get an artist's related artists by URI or ID. - Get an artist's top tracks by URI or ID. - Search artists by keyword. - **Library** - Get the user's liked tracks. - **My Data** - Get your followed artists. - **Player** - Add a song to your queue. - Get your currently playing track. - Skip to your next track. - Pause your music. - Skip to your previous song. - Get your recently played tracks. - Resume playback on the current active device. - Set volume on the current active device. - Start playing a playlist, artist, or album. - **Playlist** - Add tracks from a playlist by track and playlist URI or ID. - Create a new playlist. - Get a playlist by URI or ID. - Get a playlist's tracks by URI or ID. - Get a user's playlists. - Remove tracks from a playlist by track and playlist URI or ID. - Search playlists by keyword. - **Track** - Get a track by its URI or ID. - Get audio features for a track by URI or ID. - Search tracks by keyword. ## What to Do If Your Operation Isn't Supported If your desired operation isn't supported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Stackby Node Documentation Use the Stackby node to automate work in Stackby and integrate Stackby with other applications. n8n has built-in support for a wide range of Stackby features, including appending, deleting, listing, and reading. ## Credentials Refer to Stackby credentials for guidance on setting up authentication. ## Operations - **Append**: Adds new records to a Stackby table. - **Delete**: Removes records from a Stackby table. - **List**: Retrieves a list of records from a Stackby table. - **Read**: Fetches specific records from a Stackby table. ## Additional Resources For templates and examples, browse Stackby integration templates or search all templates. ---------------------------------------- # Storyblok Node Documentation ## Overview Use the Storyblok node to automate work in Storyblok and integrate it with other applications. The node supports various Storyblok features including getting, deleting, and publishing stories. ## Credentials Refer to [Storyblok credentials](https://docs.n8n.io/integrations/builtin/credentials/storyblok/) for guidance on setting up authentication. ## Operations ### Content API - **Story** - Get a story - Get all stories ### Management API - **Story** - Delete a story - Get a story - Get all stories - Publish a story - Unpublish a story ## Templates and Examples Browse [Storyblok integration templates](https://n8n.io/integrations/storyblok/) or search all templates at [n8n.io workflows](https://n8n.io/workflows/). ---------------------------------------- # Strapi Node Documentation Use the Strapi node to automate work in Strapi and integrate Strapi with other applications. n8n has built-in support for a wide range of Strapi features, including creating and deleting entries. ## Credentials Refer to Strapi credentials for guidance on setting up authentication. ## Operations - **Entry** - **Create** - **Delete** - **Get** - **Get Many** - **Update** ## What to do if your operation isn't supported If this node doesn't support the operation you want to do, you can use the HTTP Request node to call the service's API. You can use the credential you created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Strava Node Documentation Use the Strava node to automate work in Strava and integrate Strava with other applications. n8n supports various Strava features, including creating new activities and retrieving activity information. ## Credentials Refer to [Strava credentials](https://docs.n8n.io/integrations/builtin/credentials/strava/) for guidance on setting up authentication. ## Operations - **Activity** - Create a new activity - Get an activity - Get all activities - Get all activity comments - Get all activity kudos - Get all activity laps - Get all activity zones - Update an activity ## Custom API Operations If the desired operation isn't supported by the Strava node, use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Choose your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Stripe Node Documentation Use the Stripe node to automate work in Stripe and integrate it with other applications. n8n supports various Stripe features including balance retrieval, charge creation, and customer management. ## Credentials Refer to [Stripe credentials](https://docs.n8n.io/integrations/builtin/credentials/stripe/) for guidance on setting up authentication. ## Operations - **Balance** - Get a balance - **Charge** - Create a charge - Get a charge - Get all charges - Update a charge - **Coupon** - Create a coupon - Get all coupons - **Customer** - Create a customer - Delete a customer - Get a customer - Get all customers - Update a customer - **Customer Card** - Add a customer card - Get a customer card - Remove a customer card - **Source** - Create a source - Delete a source - Get a source - **Token** - Create a token ## Handling Unsupported Operations If the desired operation is not supported by the Stripe node, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. Configure the HTTP Request node as follows: 1. Select **Authentication** > **Predefined Credential Type**. 2. Choose the service you want to connect to. 3. Select your credential. Reference [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for additional information. ---------------------------------------- # Supabase Node Documentation Use the Supabase node to automate work in Supabase and integrate it with other applications. n8n supports various Supabase features, including creating, deleting, and retrieving rows. ## Credentials Refer to Supabase credentials documentation for guidance on setting up authentication. ## Operations - **Row** - **Create a new row** - **Delete a row** - **Get a row** - **Get all rows** - **Update a row** ## Configuration Instructions If this node does not support the operation you want to perform, you can use the HTTP Request node to call the service's API. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to the Custom API operations documentation for more information. ## Common Issues For common errors or issues and suggested resolution steps, refer to the Common issues documentation. ---------------------------------------- # SyncroMSP Node Documentation Use the SyncroMSP node to automate work in SyncroMSP and integrate it with other applications. n8n supports a wide range of SyncroMSP features, including creating and deleting customers, tickets, and contacts. ## Credentials Refer to SyncroMSP credentials for guidance on setting up authentication. ## Operations ### Contact - **Create new contact** - **Delete contact** - **Retrieve contact** - **Retrieve all contacts** - **Update contact** ### Customer - **Create new customer** - **Delete customer** - **Retrieve customer** - **Retrieve all customers** - **Update customer** ### RMM - **Create new RMM Alert** - **Delete RMM Alert** - **Retrieve RMM Alert** - **Retrieve all RMM Alerts** - **Mute RMM Alert** ### Ticket - **Create new ticket** - **Delete ticket** - **Retrieve ticket** - **Retrieve all tickets** - **Update ticket** ## Templates and Examples Browse SyncroMSP integration templates or search all templates. ---------------------------------------- # Taiga Node Documentation The Taiga node allows automation and integration with Taiga, supporting various functionalities such as creating, updating, deleting, and retrieving issues. ## Credentials Refer to [Taiga credentials](https://docs.n8n.io/integrations/builtin/credentials/taiga/) for authentication setup guidance. ## Operations - **Issue Operations** - Create an issue - Delete an issue - Get an issue - Get all issues - Update an issue ## Templates and Examples - **Create, update, and get an issue on Taiga**: [View template details](https://n8n.io/workflows/685-create-update-and-get-an-issue-on-taiga/) - **Receive updates when an event occurs in Taiga**: [View template details](https://n8n.io/workflows/686-receive-updates-when-an-event-occurs-in-taiga/) - **Automate Service Ticket Triage with GPT-4o & Taiga**: [View template details](https://n8n.io/workflows/4665-automate-service-ticket-triage-with-gpt-4o-and-taiga/) ---------------------------------------- # Tapfiliate Node Documentation Use the Tapfiliate node to automate work in Tapfiliate and integrate with other applications. n8n supports various Tapfiliate features, including managing affiliates. ## Credentials Refer to Tapfiliate credentials for guidance on setting up authentication. ## Operations - **Affiliate** - Create an affiliate - Delete an affiliate - Get an affiliate by ID - Get all affiliates - **Affiliate Metadata** - Add metadata to affiliate - Remove metadata from affiliate - Update affiliate's metadata - **Program Affiliate** - Add affiliate to program - Approve an affiliate for a program - Disapprove an affiliate - Get an affiliate in a program - Get all affiliates in a program ---------------------------------------- # Telegram Node Documentation ## Overview The Telegram node automates work in Telegram and integrates Telegram with other applications. It supports a wide range of features such as getting files, deleting, and editing messages. ## Credentials Refer to [Telegram credentials](https://docs.n8n.io/integrations/builtin/credentials/telegram/) for authentication setup. ## Operations ### Chat Operations - **Get**: Retrieve up-to-date information about a chat. - **Get Administrators**: Get a list of all administrators in a chat. - **Get Member**: Get details of a chat member. - **Leave**: Leave a chat. - **Set Description**: Set the description of a chat. - **Set Title**: Set the title of a chat. ### Callback Operations - **Answer Query**: Send answers to callback queries sent from inline keyboards. - **Answer Inline Query**: Send answers to callback queries sent from inline queries. ### File Operations - **Get File**: Retrieve a file from Telegram. ### Message Operations - **Delete Chat Message**: Delete a message from the chat. - **Edit Message Text**: Edit the text of a message. - **Pin Chat Message**: Pin a message in the chat. - **Send Animation**: Send GIFs or H.264/MPEG-4 AVC videos (up to 50 MB). - **Send Audio**: Send an audio file to the chat. - **Send Chat Action**: Notify the user that an action is occurring (limited to 5 seconds). - **Send Document**: Send a document to the chat. - **Send Location**: Send geolocation information to the chat. - **Send Media Group**: Send multiple photos and/or videos. - **Send Message**: Send a text message to the chat. - **Send Photo**: Send a photo to the chat. - **Send Sticker**: Send a sticker in .WEBP, .TGS, or .WEBM format. - **Send Video**: Send a video to the chat. - **Unpin Chat Message**: Unpin a message from the chat. ## Additional Notes To use most of the **Message** operations, the bot must be added to a channel. Refer to the [Add a bot to a Telegram channel](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/common-issues/#add-a-bot-to-a-telegram-channel) guide for more info. ## Related Resources Refer to [Telegram's API documentation](https://core.telegram.org/bots/api) for detailed service information. Additional documentation on n8n's trigger node for Telegram can be found [here](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.telegramtrigger/). ## Common Issues For common errors and resolutions, refer to [Common Issues](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/common-issues/). ---------------------------------------- # TheHive Node Documentation ## Overview TheHive node automates work in TheHive and integrates it with other applications. It supports features such as creating alerts, counting tasks, logs, cases, and observables. ### API Versions - Use TheHive node for version 3 or 4 of TheHive API. - Use TheHive 5 node for version 5 of TheHive API. ## Credentials Refer to [TheHive credentials](https://docs.n8n.io/integrations/builtin/credentials/thehive/) for authentication setup instructions. ## Operations Available operations vary by API version. After creating your credentials and selecting your API version in the node, the following operations are supported: - Alert - Case - Log - Observable - Task ## Custom API Operations If the desired operation is not supported by TheHive node, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/): 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Choose your credential. For further information, refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/). ## Related Resources - Trigger node documentation for TheHive can be found [here](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.thehivetrigger/). - TheHive API documentation: - [Version 3](https://docs.thehive-project.org/thehive/legacy/thehive3/api/) - [Version 4](https://docs.thehive-project.org/cortex/api/api-guide/) ---------------------------------------- # TheHive 5 Node Documentation ## Overview TheHive 5 node allows automation within TheHive and integration with other applications. It supports creating alerts, counting tasks, logs, cases, and observables. ## Credentials Refer to [TheHive credentials](https://docs.n8n.io/integrations/builtin/credentials/thehive5/) for authentication setup guidance. ## Operations ### Alert - Create - Delete - Execute Responder - Get - Merge Into Case - Promote to Case - Search - Update - Update Status ### Case - Add Attachment - Create - Delete Attachment - Delete Case - Execute Responder - Get - Get Attachment - Get Timeline - Search - Update ### Comment - Create - Delete - Search - Update ### Observable - Create - Delete - Execute Analyzer - Execute Responder - Get - Search - Update ### Page - Create - Delete - Search - Update ### Query - Execute Query ### Task - Create - Delete - Execute Responder - Get - Search - Update ### Task Log - Add Attachment - Create - Delete - Delete Attachment - Execute Responder - Get - Search ## Templates and Examples Browse TheHive 5 integration templates [here](https://n8n.io/integrations/thehive-5/). ## Related Resources For a trigger node for TheHive, refer to the documentation [here](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.thehive5trigger/). For more about TheHive, visit [TheHive's documentation](https://docs.strangebee.com/). ---------------------------------------- # TimescaleDB Node Documentation Use the TimescaleDB node to automate work and integrate TimescaleDB with other applications. n8n supports various TimescaleDB features, including executing SQL queries, inserting, and updating rows in a database. ## Credentials Refer to TimescaleDB credentials for authentication setup. ## Operations - Execute an SQL query - Insert rows in database - Update rows in database ## Specify a Column's Data Type To specify a column's data type, append the column name with `:type`. For example, to specify type `int` for the column **id** and type `text` for the column **name**, use the following in the **Columns** field: ``` id:int,name:text ``` ---------------------------------------- ## Todoist Node Use the Todoist node to automate tasks in Todoist and integrate with other applications. The node supports various operations related to tasks. ### Operations - **Create a new task** - **Close a task** - **Delete a task** - **Get a task** - **Get all tasks** - **Reopen a task** - **Update a task** ### Credentials Refer to the Todoist credentials documentation for guidance on setting up authentication. ### Using the HTTP Request Node If the desired operation is not supported by this node, use the HTTP Request node to call the Todoist API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select the credential created for this service. Refer to the Custom API operations documentation for more information. ---------------------------------------- # Travis CI Node Use the Travis CI node to automate tasks in Travis CI and integrate it with other applications. n8n supports a range of Travis CI operations, including cancelling and retrieving builds. ## Credentials Refer to [Travis CI credentials](https://docs.n8n.io/integrations/builtin/credentials/travisci/) for authentication setup. ## Operations - **Build** - Cancel a build - Get a build - Get all builds - Restart a build - Trigger a build ---------------------------------------- # Trello Node Documentation Use the Trello node to automate work in Trello and integrate Trello with other applications. n8n supports a wide range of Trello features, including creating and updating cards, and managing members. ## Credentials Refer to [Trello credentials](https://docs.n8n.io/integrations/builtin/credentials/trello/) for guidance on setting up authentication. ## Operations - **Attachment** - Create a new attachment for a card - Delete an attachment - Get the data of an attachment - Returns all attachments for the card - **Board** - Create a new board - Delete a board - Get the data of a board - Update a board - **Board Member** - Add - Get All - Invite - Remove - **Card** - Create a new card - Delete a card - Get the data of a card - Update a card - **Card Comment** - Create a comment on a card - Delete a comment from a card - Update a comment on a card - **Checklist** - Create a checklist item - Create a new checklist - Delete a checklist - Delete a checklist item - Get the data of a checklist - Returns all checklists for the card - Get a specific checklist on a card - Get the completed checklist items on a card - Update an item in a checklist on a card - **Label** - Add a label to a card - Create a new label - Delete a label - Get the data of a label - Returns all labels for the board - Remove a label from a card - Update a label - **List** - Archive/Unarchive a list - Create a new list - Get the data of a list - Get all the lists - Get all the cards in a list - Update a list ## What to do if your operation isn't supported If this node doesn't support the operation you want to do, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. Use the credential created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ## Find the List ID 1. Open the Trello board that contains the list. 2. If the list doesn't have any cards, add a card to the list. 3. Open the card, add `.json` at the end of the URL, and press enter. 4. In the JSON file, you will see a field called `idList`. 5. Copy the contents of the `idList` field and paste it in the **List ID** field in n8n. ---------------------------------------- # Twake Node The Twake node is used to automate work in Twake and integrate Twake with other applications. n8n supports sending messages with Twake. ## Credentials Refer to [Twake credentials](https://docs.n8n.io/integrations/builtin/credentials/twake/) for guidance on setting up authentication. ## Operations - **Message** - Send a message ## What to Do if Your Operation Isn't Supported If this node doesn't support the operation you want to perform, you can use the HTTP Request node to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Twilio Node Documentation Use the Twilio node to automate work in Twilio, integrating Twilio with other applications. n8n supports sending MMS/SMS and WhatsApp messages with Twilio. ## Credentials For guidance on setting up authentication, refer to Twilio credentials documentation. ## Operations - **SMS** - Send SMS/MMS/WhatsApp message - **Call** - Make a phone call using text-to-speech to say a message ## Configuration Instructions for Unsupported Operations If this node doesn't support the operation you want to do, use the HTTP Request node to call the service's API. You can use the credential created for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations documentation for more information. ---------------------------------------- # Twist Node Documentation Use the Twist node to automate work in Twist and integrate Twist with other applications. n8n supports various Twist features, including creating conversations in a channel, creating, and deleting comments on a thread. ## Credentials Refer to Twist credentials for guidance on setting up authentication. ## Operations ### Channel - Archive a channel - Initiates a public or private channel-based conversation - Delete a channel - Get information about a channel - Get all channels - Unarchive a channel - Update a channel ### Comment - Create a new comment to a thread - Delete a comment - Get information about a comment - Get all comments - Update a comment ### Message Conversation - Create a message in a conversation - Delete a message in a conversation - Get a message in a conversation - Get all messages in a conversation - Update a message in a conversation ### Thread - Create a new thread in a channel - Delete a thread - Get information about a thread - Get all threads - Update a thread ## Best Practices If a specific operation is not supported by the node, use the HTTP Request node to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ## Get the User ID To get the User ID for a user: 1. Open the **Team** tab. 2. Select a user's avatar. 3. Copy the string of characters located after `/u/` in your Twist URL. This string is the User ID. For example, if the URL is `https://twist.com/a/4qw45/people/u/475370`, the User ID is `475370`. ---------------------------------------- ## X (Formerly Twitter) Node Documentation ### Overview Use the X node to automate tasks in X and integrate X with other applications. This node supports various X features, including direct messaging, tweet management, and user actions. ### Credentials Refer to X credentials for authentication setup guidance. ### Operations - **Direct Message** - Create a direct message - **Tweet** - Create or reply to a tweet - Delete a tweet - Search tweets - Like a tweet - Retweet a tweet - **User** - Get a user - **List** - Add a member to a list ### AI Integration This node can enhance the capabilities of an AI agent by allowing automatic or AI-directed parameter setting. Refer to the AI tool parameters documentation for more details. ---------------------------------------- # Unleashed Software Node Use the Unleashed Software node to automate work in Unleashed Software and integrate Unleashed Software with other applications. n8n has built-in support for various Unleashed Software features, including sales orders and stock management. ## Credentials Refer to [Unleashed Software credentials](https://docs.n8n.io/integrations/builtin/credentials/unleashedsoftware/) for guidance on setting up authentication. ## Operations - **Sales Order** - Get all sales orders - **Stock On Hand** - Get a stock on hand - Get all stocks on hand ## Templates and Examples Browse Unleashed Software integration templates or search all templates. ---------------------------------------- # UpLead Node Documentation Use the UpLead node to automate work in UpLead and integrate UpLead with other applications. n8n supports several UpLead operations, including getting company information. ## Credentials Refer to UpLead credentials for guidance on setting up authentication. ## Operations - **Company** - Enrich - **Person** - Enrich ---------------------------------------- # uProc Node Documentation ## Overview The uProc node automates tasks within uProc and integrates it with other applications, supporting various functionalities including audio generation, communication data retrieval, and company information access. ## Operations ### Audio - Get advanced human audio file by provided text and language. - Get an audio file by provided text and language. ### Communication - Discover social network presence for a domain. - Validate email status (valid, bounce type, spam-trap, etc.). - Check SMTP server configuration for email domains. - Validate mobile and landline phone numbers. - Clean phone numbers. - Get email addresses based on company domain and prospect names. - Retrieve LinkedIn profile data based on email or social media. - Send custom messages via email or SMS. ### Company - Validate CIF, ISIN, and SS numbers (Spain only). - Retrieve company data by domain, email, and various identifiers (CIF, DUNS, phone number). - Collect decision-maker data using search engines. - Normalize CIF numbers. ### Finance - Validate crypto wallets, IBAN, and BIC numbers. - Convert currencies and access VAT information. ### Geographical - Validate and analyze geographical data (zip codes, coordinates). - Retrieve city and province information based on various parameters. - Calculate distances between coordinates or addresses. ### Image - Decode QR codes and extract EXIF metadata from images. ### Internet - Validate domain existence, DNS records, and SSL certificates. - Monitor URL accessibility and manage URL formats. ### Personal - Validate personal identification numbers (DNI, NIF, NIE). - Discover and normalize personal names and age data. - Retrieve social media profiles based on personal information. ### Product - Validate ASIN, EAN, ISBN, GTIN, and UPC formats. - Retrieve product data from Amazon Marketplace. ### Security - Check validity of Luhn numbers and assess password strength. - Access blacklists for domains and IP addresses. ### Text - Validate string formats, lengths, and content types. - Perform text analysis and convert strings to various formats (Base64, MD5, SHA). ## Configuration Instructions - Refer to [uProc credentials](https://docs.n8n.io/integrations/builtin/credentials/uproc/) for authentication setup. - Use the HTTP Request node for unsupported operations by selecting the service and credential appropriately. ## Best Practices - Use the provided templates and examples for guidance on creating workflows. - Normalizing data is crucial for consistency; ensure to use normalization features for identifiers and personal data. ## Templates and Examples - Scrape and store data from multiple web pages. - Create a website screenshot and send it via Telegram. - Monitor SSL certificate status for a domain. For more workflows and templates, visit [n8n integrations](https://n8n.io/integrations/uproc/). ---------------------------------------- # UptimeRobot Node The UptimeRobot node automates work in UptimeRobot and integrates UptimeRobot with other applications. It supports a wide range of features, including creating and deleting alerts, as well as getting account details. ## Credentials Refer to UptimeRobot credentials for guidance on setting up authentication. ## Operations - **Account** - Get account details - **Alert Contact** - Create an alert contact - Delete an alert contact - Get an alert contact - Get all alert contacts - Update an alert contact - **Maintenance Window** - Create a maintenance window - Delete a maintenance window - Get a maintenance window - Get all maintenance windows - Update a maintenance window - **Monitor** - Create a monitor - Delete a monitor - Get a monitor - Get all monitors - Reset a monitor - Update a monitor - **Public Status Page** - Create a public status page - Delete a public status page - Get a public status page - Get all public status pages ## Templates and Examples Browse UptimeRobot integration templates or search all templates. ---------------------------------------- # urlscan.io Node Documentation Use the urlscan.io node to automate workflows using urlscan.io, integrating its features with other applications such as scanning URLs. ## Credentials Refer to the urlscan.io credentials documentation for guidance on setting up authentication. ## Operations - **Scan** - **Get**: Retrieve information about a specific scan. - **Get All**: Retrieve information about all scans. - **Perform**: Conduct a new scan on a provided URL. ## If Your Operation Isn't Supported If a specific operation is not supported by this node, use the HTTP Request node to call the service's API. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Choose your credential. Refer to the Custom API operations documentation for more information. ---------------------------------------- # Venafi TLS Protect Cloud Node Documentation ## Overview The Venafi TLS Protect Cloud node automates tasks in Venafi TLS Protect Cloud and integrates it with other applications. Supported features include deleting, downloading, and creating certificate requests. ## Credentials Refer to [Venafi TLS Protect Cloud credentials](https://docs.n8n.io/integrations/builtin/credentials/venafitlsprotectcloud/) for authentication setup. ## Operations ### Certificate - **Delete** - **Download** - **Get** - **Get Many** - **Renew** ### Certificate Request - **Create** - **Get** - **Get Many** ## HTTP Request Node If an operation is unsupported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to make API calls. Use the credential created for the service as follows: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect. 3. Choose your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more details. ## Related Resources - [Venafi's REST API documentation](https://docs.venafi.cloud/api/vaas-rest-api/) - A [trigger node](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.venafitlsprotectcloudtrigger/) for Venafi TLS Protect Cloud. - A [node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.venafitlsprotectdatacenter/) for Venafi TLS Protect Datacenter. ---------------------------------------- # Venafi TLS Protect Datacenter Node Documentation ## Description The Venafi TLS Protect Datacenter node automates work in Venafi TLS Protect Datacenter, integrating it with other applications. It supports a variety of operations, including creating, deleting, and retrieving certificates. ## Credentials Refer to the [Venafi TLS Protect Datacenter credentials](https://docs.n8n.io/integrations/builtin/credentials/venafitlsprotectdatacenter/) for authentication setup guidance. ## Operations - **Certificate** - Create - Delete - Download - Get - Get Many - Renew - **Policy** - Get ## Custom API Operations If the node does not support the desired operation, use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Choose the service to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Vero Node Documentation ## Overview Use the Vero node to automate work in Vero and integrate Vero with other applications. ## Credentials Refer to [Vero credentials](https://docs.n8n.io/integrations/builtin/credentials/vero/) for guidance on setting up authentication. ## Operations ### User - Create or update a user profile - Change a user's identifier - Unsubscribe a user - Resubscribe a user - Delete a user - Add a tag to a user's profile - Remove a tag from a user's profile ### Event - Track an event for a specific customer ## Templates and Examples Browse Vero integration templates or search all templates. ---------------------------------------- # Vonage Node Use the Vonage node to automate work in Vonage and integrate it with other applications. n8n supports sending SMS with Vonage. ## Credentials Refer to [Vonage credentials](https://docs.n8n.io/integrations/builtin/credentials/vonage/) for guidance on setting up authentication. ## Operations - **SMS** - **Send**: Sends a text message via the Vonage API. ## Templates and Examples - **Receive messages from a topic via Kafka and send an SMS** - **Receive messages from a queue via RabbitMQ and send an SMS** - **Get data from Hacker News and send to Airtable or via SMS** Browse [Vonage integration templates](https://n8n.io/integrations/vonage/) or [search all templates](https://n8n.io/workflows/) for more examples. ---------------------------------------- # Webflow Node Documentation Use the Webflow node to automate work in Webflow and integrate Webflow with other applications. n8n has built-in support for a range of Webflow features, including creating, updating, deleting, and retrieving items. ## Credentials Refer to Webflow credentials for guidance on setting up authentication. ## Operations - **Item Operations** - **Create**: Create a new item in Webflow. - **Delete**: Remove an existing item from Webflow. - **Get**: Retrieve a single item from Webflow. - **Get All**: Fetch all items from Webflow. - **Update**: Modify an existing item in Webflow. ## Technical Instructions If the desired operation is not supported by this node, use the HTTP Request node to call the service's API. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # Wekan Node Documentation Use the Wekan node to automate work in Wekan and integrate Wekan with other applications. n8n supports a range of Wekan features: ## Credentials Refer to Wekan credentials for guidance on setting up authentication. ## Operations ### Board Operations - **Create a new board** - **Delete a board** - **Get the data of a board** - **Get all user boards** ### Card Operations - **Create a new card** - **Delete a card** - **Get a card** - **Get all cards** - **Update a card** ### Card Comment Operations - **Create a comment on a card** - **Delete a comment from a card** - **Get a card comment** - **Get all card comments** ### Checklist Operations - **Create a new checklist** - **Delete a checklist** - **Get the data of a checklist** - **Return all checklists for the card** ### Checklist Item Operations - **Delete a checklist item** - **Get a checklist item** - **Update a checklist item** ### List Operations - **Create a new list** - **Delete a list** - **Get the data of a list** - **Get all board lists** ## Using HTTP Request Node If the desired operation is not supported by this node, use the HTTP Request node to call the service's API. Use the created credential for this service in the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to Custom API operations for more information. ## Loading Node Parameters To load all the parameters, such as Author ID, grant admin permissions to the user. Refer to the Wekan documentation to learn how to change permissions. ---------------------------------------- # WhatsApp Business Cloud Node Documentation Use the **WhatsApp Business Cloud node** to automate work in WhatsApp Business and integrate it with other applications. n8n supports various WhatsApp Business features, including sending messages, and managing media. ## Credentials Refer to [WhatsApp Business Cloud credentials](https://docs.n8n.io/integrations/builtin/credentials/whatsapp/) for setup instructions. ## Operations - **Message** - **Send**: Send a message. - **Send and Wait for Response**: Send a message and wait for a user reply. - **Send Template**: Send a pre-defined message template. - **Media** - **Upload**: Upload media to WhatsApp. - **Download**: Download media from WhatsApp. - **Delete**: Delete media from WhatsApp. ## Waiting for a Response Choose the **Send and Wait for a Response** operation to pause workflow execution until user confirmation is received. ### Response Types: - **Approval**: Users can approve or disapprove within the message. - **Free Text**: Users can respond via a form. - **Custom Form**: Users can respond using a custom form. **Configuration Options:** - **Limit Wait Time**: Set a time limit for waiting. - **Append n8n Attribution**: Include or exclude attribution in the message. ### Customizations: - **Approval Response**: Configure approval and disapproval buttons, and customize labels. - **Free Text Response**: Customize button label, form title, and description. - **Custom Form Response**: Create form fields and customize labels and messages. ## Templates and Examples - **View templates**: - [Building Your First WhatsApp Chatbot](https://n8n.io/workflows/2465-building-your-first-whatsapp-chatbot/) - [Respond to WhatsApp Messages with AI Like a Pro!](https://n8n.io/workflows/2466-respond-to-whatsapp-messages-with-ai-like-a-pro/) - [AI-Powered WhatsApp Chatbot for Text, Voice, Images & PDFs with Memory](https://n8n.io/workflows/3586-ai-powered-whatsapp-chatbot-for-text-voice-images-and-pdfs-with-memory/) ## Related Resources Refer to [WhatsApp Business Platform's Cloud API documentation](https://developers.facebook.com/docs/whatsapp/cloud-api) for detailed operations. ## Common Issues For common errors or suggestions, refer to the [Common Issues](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.whatsapp/common-issues/) section. ## What to Do If Your Operation Isn't Supported If an operation isn't supported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the API: 1. Select **Authentication** > **Predefined Credential Type**. 2. Choose the service to connect. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for further details. ---------------------------------------- # Wise Node Use the Wise node to automate work in Wise and integrate Wise with other applications. n8n supports a wide range of Wise features. ## Operations - **Account** - Retrieve balances for all account currencies of this user. - Retrieve currencies in the borderless account of this user. - Retrieve the statement for the borderless account of this user. - **Exchange Rate** - Get - **Profile** - Get - Get All - **Recipient** - Get All - **Quote** - Create - Get - **Transfer** - Create - Delete - Execute - Get - Get All ## Credentials Refer to Wise credentials for guidance on setting up authentication. ---------------------------------------- # WooCommerce Node Documentation Use the WooCommerce node to automate work in WooCommerce, integrating WooCommerce with other applications. n8n supports a range of WooCommerce features, including creating and deleting customers, orders, and products. ## Credentials Refer to WooCommerce credentials for guidance on setting up authentication. ## Operations ### Customer - Create a customer - Delete a customer - Retrieve a customer - Retrieve all customers - Update a customer ### Order - Create an order - Delete an order - Get an order - Get all orders - Update an order ### Product - Create a product - Delete a product - Get a product - Get all products - Update a product ## What to do if your operation isn't supported If this node doesn't support the desired operation, use the HTTP Request node to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to Custom API operations for more information. ---------------------------------------- # WordPress Node Documentation Use the WordPress node to automate work in WordPress and integrate WordPress with other applications. This node supports features such as creating, updating, and retrieving posts and users. ## Credentials Refer to [WordPress credentials](https://docs.n8n.io/integrations/builtin/credentials/wordpress/) for authentication setup. ## Operations ### Post - **Create a post** - **Get a post** - **Get all posts** - **Update a post** ### Pages - **Create a page** - **Get a page** - **Get all pages** - **Update a page** ### User - **Create a user** - **Get a user** - **Get all users** - **Update a user** ## What to Do if Your Operation Isn't Supported If the desired operation is not supported by this node, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API with the following steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for additional information. ---------------------------------------- # Xero Node Documentation ## Overview The Xero node automates tasks in Xero and integrates it with other applications. It supports creating, updating, and retrieving contacts and invoices. ## Credentials For authentication setup, refer to the [Xero credentials documentation](https://docs.n8n.io/integrations/builtin/credentials/xero/). ## Operations ### Contact Operations - **Create a contact** - **Get a contact** - **Get all contacts** - **Update a contact** ### Invoice Operations - **Create an invoice** - **Get an invoice** - **Get all invoices** - **Update an invoice** ## Configuration Instructions If a desired operation is not supported by the Xero node, use the HTTP Request node to call the Xero API. Follow these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to the [Custom API operations documentation](https://docs.n8n.io/integrations/custom-operations/) for additional information. ---------------------------------------- # Yourls Node Documentation Use the Yourls node to automate work in Yourls and integrate Yourls with other applications. n8n supports various Yourls features, including expanding and shortening URLs. ## Credentials Refer to [Yourls credentials](https://docs.n8n.io/integrations/builtin/credentials/yourls/) for guidance on setting up authentication. ## Operations - **URL** - Expand a URL - Shorten a URL - Get stats about one short URL ## Templates and Examples - Browse Yourls integration templates at [n8n.io integrations](https://n8n.io/integrations/yourls/). - Search all templates at [n8n.io workflows](https://n8n.io/workflows/). ---------------------------------------- # YouTube Node Documentation Use the YouTube node to automate work in YouTube and integrate YouTube with other applications. n8n supports various YouTube features, including retrieving, updating channels, and creating and deleting playlists. ## Credentials Refer to [YouTube credentials](https://docs.n8n.io/integrations/builtin/credentials/google/) for guidance on setting up authentication. ## Operations - **Channel** - Retrieve a channel - Retrieve all channels - Update a channel - Upload a channel banner - **Playlist** - Create a playlist - Delete a playlist - Get a playlist - Retrieve all playlists - Update a playlist - **Playlist Item** - Add an item to a playlist - Delete an item from a playlist - Get a playlist's item - Retrieve all playlist items - **Video** - Delete a video - Get a video - Retrieve all videos - Rate a video - Update a video - Upload a video - **Video Category** - Retrieve all video categories ## What to Do If Your Operation Isn't Supported If the YouTube node doesn’t support the operation you want to perform, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. Steps to use the HTTP Request node: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Zammad Node Use the Zammad node to automate work in Zammad and integrate Zammad with other applications. n8n supports various Zammad features, including creating, retrieving, and deleting groups and organizations. ## Credentials Refer to Zammad credentials for guidance on setting up authentication. ## Operations - **Group** - Create - Delete - Get - Get many - Update - **Organization** - Create - Delete - Get - Get many - Update - **Ticket** - Create - Delete - Get - Get many - **User** - Create - Delete - Get - Get many - Get self - Update ## Templates and Examples **Update people through Zulip about open tickets in Zammad** **Export Zammad Objects (Users, Roles, Groups, Organizations) to Excel** **Sync Entra User to Zammad User** ---------------------------------------- # Zendesk Node Documentation Use the Zendesk node to automate work in Zendesk and integrate it with other applications. It supports various Zendesk features such as creating, deleting tickets, users, and organizations. ## Credentials Refer to [Zendesk credentials](https://docs.n8n.io/integrations/builtin/credentials/zendesk/) for guidance on setting up authentication. ## Operations ### Ticket - **Create a ticket** - **Delete a ticket** - **Get a ticket** - **Get all tickets** - **Recover a suspended ticket** - **Update a ticket** ### Ticket Field - **Get a ticket field** - **Get all system and custom ticket fields** ### User - **Create a user** - **Delete a user** - **Get a user** - **Get all users** - **Get a user's organizations** - **Get data related to the user** - **Search users** - **Update a user** ### Organization - **Create an organization** - **Delete an organization** - **Count organizations** - **Get an organization** - **Get all organizations** - **Get data related to the organization** - **Update an organization** ## Templates and Examples - Automate SIEM Alert Enrichment with MITRE ATT&CK, Qdrant & Zendesk in n8n - Sync Zendesk tickets with subsequent comments to Jira issues - Sync Zendesk tickets to Slack thread ## What to Do if Your Operation Isn't Supported If the node does not support the operation you want to perform, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API by following these steps: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Zoho CRM Node Documentation Use the Zoho CRM node to automate tasks in Zoho CRM and integrate it with other applications. n8n supports a wide range of Zoho CRM features, including operations for accounts, contacts, and deals. ## Credentials Refer to [Zoho CRM credentials](https://docs.n8n.io/integrations/builtin/credentials/zoho/) for guidance on setting up authentication. ## Operations ### Account - Create an account - Upsert account (create a new record or update the existing one) - Delete an account - Get an account - Get all accounts - Update an account ### Contact - Create a contact - Upsert contact - Delete a contact - Get a contact - Get all contacts - Update a contact ### Deal - Create a deal - Upsert deal - Delete a contact - Get a contact - Get all contacts - Update a contact ### Invoice - Create an invoice - Upsert invoice - Delete an invoice - Get an invoice - Get all invoices - Update an invoice ### Lead - Create a lead - Upsert lead - Delete a lead - Get a lead - Get all leads - Get lead fields - Update a lead ### Product - Create a product - Upsert product - Delete a product - Get a product - Get all products - Update a product ### Purchase Order - Create a purchase order - Upsert purchase order - Delete a purchase order - Get a purchase order - Get all purchase orders - Update a purchase order ### Quote - Create a quote - Upsert quote - Delete a quote - Get a quote - Get all quotes - Update a quote ### Sales Order - Create a sales order - Upsert sales order - Delete a sales order - Get a sales order - Get all sales orders - Update a sales order ### Vendor - Create a vendor - Upsert vendor - Delete a vendor - Get a vendor - Get all vendors - Update a vendor ## Custom API Operations If the desired operation is not supported, use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API: 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for further information. ---------------------------------------- # Zoom Node Documentation ## Overview The Zoom node automates work in Zoom and integrates Zoom with other applications. It supports a range of features for creating, retrieving, deleting, and updating meetings. ### Credentials Refer to [Zoom credentials](https://docs.n8n.io/integrations/builtin/credentials/zoom/) for authentication setup. ## Operations - **Meeting** - **Create a meeting** - **Delete a meeting** - **Retrieve a meeting** - **Retrieve all meetings** - **Update a meeting** ## Using the HTTP Request Node If a desired operation is not supported, use the HTTP Request node to call the Zoom API. **Steps:** 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Zulip Node Documentation ## Overview The Zulip node is used to automate workflows in Zulip and integrate it with other applications. It supports functionalities including user and stream management and sending messages. ## Credentials Refer to [Zulip credentials](https://docs.n8n.io/integrations/builtin/credentials/zulip/) for authentication setup guidance. ## Operations ### Message - **Delete a message** - **Get a message** - **Send a private message** - **Send a message to stream** - **Update a message** - **Upload a file** ### Stream - **Create a stream** - **Delete a stream** - **Get all streams** - **Get subscribed streams** - **Update a stream** ### User - **Create a user** - **Deactivate a user** - **Get a user** - **Get all users** - **Update a user** ## Templates and Examples - [Browse Zulip integration templates](https://n8n.io/integrations/zulip/) - [Search all templates](https://n8n.io/workflows/) ---------------------------------------- # OpenAI Node Documentation Use the OpenAI node to automate work in OpenAI and integrate OpenAI with other applications. ## Operations - **Assistant** - **Create an Assistant** - **Delete an Assistant** - **List Assistants** - **Message an Assistant** - **Update an Assistant** - **Text** - **Message a Model** - **Classify Text for Violations** - **Image** - **Analyze Image** - **Generate an Image** - **Audio** - **Generate Audio** - **Transcribe a Recording** - **Translate a Recording** - **File** - **Delete a File** - **List Files** - **Upload a File** ## Credentials Refer to [OpenAI credentials](https://docs.n8n.io/integrations/builtin/credentials/openai/) for guidance on setting up authentication. ## What to do if your operation isn't supported If this node doesn't support the operation you want, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. 1. In the HTTP Request node, select **Authentication** \> **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ## Using tools with OpenAI assistants Some operations allow you to connect tools. Select the **Tools** connector to browse the available tools and add them. ### Operations that support tool connectors - **Assistant** - **Message an Assistant** - **Text** - **Message a Model** ## Common issues Refer to [Common issues](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.openai/common-issues/) for common questions or issues and suggested solutions. ---------------------------------------- # Perplexity Node Documentation Use the Perplexity node to automate work in Perplexity and integrate it with other applications. n8n has built-in support for messaging a model. ## Credentials Refer to the authentication information for this node in the [Perplexity Credentials Documentation](https://docs.n8n.io/integrations/builtin/credentials/perplexity/). ## Operations - **Message a Model**: Create one or more completions for a given text. ## Configuration Instructions If this node doesn't support the operation you want to do, you can use the [HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to call the service's API. 1. In the HTTP Request node, select **Authentication** > **Predefined Credential Type**. 2. Select the service you want to connect to. 3. Select your credential. Refer to [Custom API operations](https://docs.n8n.io/integrations/custom-operations/) for more information. ---------------------------------------- # Cluster Nodes Cluster nodes are node groups that work together to provide functionality in an n8n workflow. Instead of using a single node, you use a root node and one or more sub-nodes that extend the functionality of the node. ## Root Nodes Each cluster starts with one root node. ## Sub-Nodes Each root node can have one or more sub-nodes attached to it. ---------------------------------------- # Root Nodes Root nodes are foundational nodes within a group of cluster nodes. Cluster nodes are node groups that work together to provide functionality in an n8n workflow. Instead of using a single node, you use a root node and one or more sub-nodes that extend the functionality of the node. ## AI Glossary - **completion**: Completions are the responses generated by a model like GPT. - **hallucinations**: Hallucination in AI is when an LLM (large language model) mistakenly perceives patterns or objects that don't exist. - **vector database**: A vector database stores mathematical representations of information. Use with embeddings and retrievers to create a database that your AI can access when answering questions. - **vector store**: A vector store, or vector database, stores mathematical representations of information. Use with embeddings and retrievers to create a database that your AI can access when answering questions. ---------------------------------------- # Sub-Nodes Sub nodes attach to root nodes within a group of cluster nodes. They configure the overall functionality of the cluster. ## Core Concepts - **Cluster Nodes**: Node groups that work together to provide functionality in an n8n workflow. Use a root node alongside one or more sub-nodes to extend the functionality. - **Root Node**: The primary node that acts as an entry point in a workflow. - **Sub-Nodes**: Nodes that enhance the capabilities of the root node within the cluster framework. ## Terminology - **Completion**: Responses generated by a model like GPT. - **Hallucinations**: When an LLM (large language model) mistakenly perceives patterns or objects that don't exist. - **Vector Database**: Stores mathematical representations of information for use with embeddings and retrievers. - **Vector Store**: Similar to vector databases; stores mathematical representations for AI accessibility. ## Workflow Pattern Sub nodes can be used in conjunction with root nodes in an n8n workflow to achieve complex tasks by applying various configurations and operations. ---------------------------------------- # Core Nodes Library ## Core Concepts n8n's core nodes are the fundamental building blocks for creating workflows within the n8n platform. Each node represents a function that can be executed within a workflow, allowing for the automation of tasks and integration of various services. ## Node & Parameter Details - **Node:** A basic unit of workflow functionality in n8n. - **Parameters:** Configurable options within each node that allow users to customize the behavior of the node. ## Workflow Patterns Workflows in n8n are constructed by connecting multiple nodes, each serving a specific purpose. Nodes communicate via data passing, where the output of one node can be used as the input for another. ## Best Practices - Ensure nodes are configured with the correct parameters to achieve the desired functionality. - Use a combination of nodes to optimize the automation processes and reduce redundant operations. - Regularly review and organize workflows for improved readability and maintenance. ## Configuration Instructions To create a workflow using core nodes: 1. Start by selecting a trigger node to initiate the workflow. 2. Add additional nodes for processing data (e.g., HTTP Request, Google Sheets). 3. Connect nodes logically to define the flow of data. 4. Configure each node’s parameters to meet specific requirements. ---------------------------------------- # Activation Trigger Node The Activation Trigger node gets triggered when an event is fired by n8n or a workflow. It has been deprecated and replaced with the **n8n Trigger node** and the **Workflow Trigger node**. ## Node Parameters - **Events** - **Activation**: Executes when the workflow is activated. - **Start**: Executes when n8n starts or restarts. - **Update**: Executes when the workflow is saved while active. ## Important Notes - To use the Activation Trigger node in a workflow, it must be added to that workflow. - The Activation Trigger node triggers the workflow it is added to, allowing it to notify the state of the workflow. ---------------------------------------- # Aggregate Node Use the Aggregate node to group separate items or portions of them into individual items. ## Node Parameters ### Individual Fields - **Input Field Name**: Name of the field in the input data to aggregate. - **Rename Field**: Toggle to give the field a different name in the output. - **Output Field Name**: This field is displayed when **Rename Field** is turned on. Enter the field name for the aggregated output data. ### All Item Data - **Put Output in Field**: Name of the field to output the data in. - **Include**: Options for included fields: - **All fields**: Includes all field data with no further parameters. - **Specified Fields**: Enter a comma-separated list of fields to include. - **All Fields Except**: Enter a comma-separated list of fields to exclude. ## Node Options - **Disable Dot Notation**: Controls referencing child fields using `parent.child`. Turn on to disallow. - **Merge Lists**: Turn on if the field to aggregate is a list and you want a single flat list. - **Include Binaries**: Turn on to include binary data in the output. - **Keep Missing And Null Values**: Turn on to include null (empty) entries for missing values in the output. ---------------------------------------- # AI Transform Use the AI Transform node to generate code snippets based on your prompt. The AI is context-aware, understanding the workflow’s nodes and their data types. ## Node Parameters ### Instructions Enter your prompt for the AI and click **Generate code** to automatically populate the **Transformation Code**. The prompt should be in plain English and under 500 characters. ### Transformation Code The code snippet generated by the node is read-only. To edit this code, adjust your prompt in **Instructions** or copy and paste it into a **Code** node. ---------------------------------------- ## Code Node The Code node allows you to write custom JavaScript or Python and execute it within your workflow. ### Usage #### Choose a Mode - **Run Once for All Items**: Default mode; code executes once for all input items. - **Run Once for Each Item**: Executes code for each input item separately. ### JavaScript The Code node supports Node.js. #### Supported JavaScript Features - Supports promises for asynchronous code execution. - Use `console.log` for debugging. #### External Libraries - Self-hosted n8n allows usage of built-in and external npm modules. Refer to the guide on **Enable modules in Code node**. - n8n Cloud provides access to: - [crypto Node.js module](https://nodejs.org/docs/latest-v18.x/api/crypto.html) - [moment npm package](https://www.npmjs.com/package/moment) #### Built-in Methods and Variables - Methods and variables are accessed using `$variableName` or `$methodName()`. Use `$` in the Code node for suggestions. ### Python n8n supports Python using [Pyodide](https://pyodide.org/en/stable/), a port of CPython to WebAssembly. Limited to specific packages. #### Processing Speed - Slower than JavaScript due to additional compilation steps. #### Built-in Methods and Variables - Access using `_variableName` or `_methodName()`. Type `_` for suggestions. ### File System and HTTP Requests Access to the file system or making HTTP requests is not allowed. Use the following nodes instead: - [Read/Write File From Disk](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile/) - [HTTP Request](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) ### Key Concepts - Understand data structures, requirements for outputting data, and item linking in the Code node. ### Use AI in the Code Node Available to Cloud users; AI-generated code will overwrite existing code. The flow to use AI: 1. Set **Language** to **JavaScript**. 2. Select the **Ask AI** tab. 3. Write a query and generate code. ### Common Issues Refer to the **Common Issues** documentation for frequently faced problems and solutions. ---------------------------------------- # Compare Datasets The Compare Datasets node helps compare data from two input streams. ## Node Parameters 1. **Input A Field**: Name of the field to use from input stream A. 2. **Input B Field**: Name of the field to use from input stream B. 3. **Add Fields to Match**: Optional - set up more comparisons. 4. **When There Are Differences**: - **Use Input A Version**: Treat input stream A as the source of truth. - **Use Input B Version**: Treat input stream B as the source of truth. - **Use a Mix of Versions**: Use different inputs for different fields. - **Prefer**: Select either Input A or B as the main source of truth. - **For Everything Except**: Enter fields that are exceptions to pull from the other input source. - **Include Both Versions**: Include both input streams in the output. 5. **Fuzzy Compare**: When turned on, tolerates small type differences when comparing fields. ## Understand Item Comparison 1. n8n checks if the values of the fields match across both inputs. 2. If the fields match, n8n compares all fields within the items to determine if they are the same or different. ## Node Options ### Fields to Skip Comparing Enter field names to ignore in the comparison. ### Disable Dot Notation Toggle to disallow referencing child fields using `parent.child` (default: off). ### Multiple Matches Choose how to handle duplicate data: - **Include All Matches** (default) - **Include First Match Only**. ## Understand the Output There are four output options: - **In A only Branch**: Data that occurs only in the first input. - **Same Branch**: Data that's the same in both inputs. - **Different Branch**: Data that's different between inputs. - **In B only Branch**: Data that occurs only in the second output. ## Code Examples ### Input Examples ```json // Input 1 [ { "person": { "name": "Stefan", "language": "de" } }, { "person": { "name": "Jim", "language": "en" } }, { "person": { "name": "Hans", "language": "de" } } ] // Input 2 [ { "person": { "name": "Sara", "language": "de" } }, { "person": { "name": "Jane", "language": "en" } }, { "person": { "name": "Harriet", "language": "de" } } ] ``` ### Fruit Example ```json // Input 1 [ { "fruit": { "type": "apple", "color": "red" } }, { "fruit": { "type": "apple", "color": "red" } }, { "fruit": { "type": "banana", "color": "yellow" } } ] // Input 2 [ { "fruit": { "type": "apple", "color": "red" } }, { "fruit": { "type": "apple", "color": "red" } }, { "fruit": { "type": "banana", "color": "yellow" } } ] ``` ---------------------------------------- # Compression Node Use the Compression node to compress and decompress files. Supports Zip and Gzip formats. ## Node Parameters ### Operations - **Compress**: Create a compressed file from your input data. - **Decompress**: Decompress an existing compressed file. ### Compress - **Input Binary Field(s)**: Name of the fields in the input data that contain the binary files to compress. Use a comma-separated list for multiple files. - **Output Format**: Choose output format as **Zip** or **Gzip**. - **File Name**: Name of the created zip file. - **Put Output File in Field**: Name of the output field to contain the file. ### Decompress - **Put Output File in Field**: Name of the fields in the input data containing the binary files to decompress. Use a comma-separated list for multiple files. - **Output Prefix**: Prefix to add to the output file name. ---------------------------------------- # Convert to File Node The Convert to File node converts input JSON data into a binary format, enabling the output of various file types. ## Operations - **Convert to CSV** - **Convert to HTML** - **Convert to ICS** - **Convert to JSON** - **Convert to ODS** - **Convert to RTF** - **Convert to Text File** - **Convert to XLS** - **Convert to XLSX** - **Move Base64 String to File** Node parameters and options depend on the selected operation. ### Convert to CSV Parameters: - **Put Output File in Field**: Field name for output file. - **File Name**: Specify the generated output file name. - **Header Row**: Enable if the first row contains header names. ### Convert to HTML Parameters: - **Put Output File in Field**: Field name for output file. - **File Name**: Specify the generated output file name. - **Header Row**: Enable if the first row contains header names. ### Convert to ICS Parameters: - **Put Output File in Field**: Field name for output file. - **Event Title**: Title for the event. - **Start**: Date and time the event starts. - **End**: Date and time the event ends. - **All Day**: Specify whether the event is all day. Options: - **File Name**: Output file name. - **Attendees**: Add attendee details (Name, Email, RSVP). - **Busy Status**: Set status for applications (Busy, Tentative). - **Calendar Name**: Name for Apple and Microsoft calendars. - **Description**: Event description. - **Geolocation**: Latitude and Longitude for event location. - **Location**: Venue or location of the event. - **Recurrence Rule**: Define repeat pattern (RRULE). - **Organizer**: Organizer's Name and Email. - **Sequence**: Revision sequence number. - **Status**: Event status (Confirmed, Cancelled, Tentative). - **UID**: Unique ID for the event. - **URL**: URL associated with the event. - **Use Workflow Timezone**: Option to use workflow's timezone. ### Convert to JSON Parameters: - **Mode**: - **All Items to One File**: Single file for all input items. - **Each Item to Separate File**: Individual file for each item. Options: - **File Name**: Specify the output file name. - **Format**: Option to format JSON for readability. - **Encoding**: Character set for data encoding (default: utf8). ### Convert to ODS Parameters: - **Put Output File in Field**: Field name for output file. Options: - **File Name**: Specify the output file name. - **Compression**: Option to compress the output file size. - **Header Row**: Enable if headers are present. - **Sheet Name**: Specify the Sheet Name for the spreadsheet. ### Convert to RTF Parameters: - **Put Output File in Field**: Field name for output file. Options: - **File Name**: Specify the output file name. - **Header Row**: Enable if headers are present. ### Convert to Text File Parameters: - **Text Input Field**: Specify the field containing the string to convert. Options: - **File Name**: Specify the output file name. - **Encoding**: Character set for data encoding (default: utf8). ### Convert to XLS Parameters: - **Put Output File in Field**: Field name for output file. Options: - **File Name**: Specify the output file name. - **Header Row**: Enable if headers are present. - **Sheet Name**: Specify the Sheet Name for the spreadsheet. ### Convert to XLSX Parameters: - **Put Output File in Field**: Field name for output file. Options: - **File Name**: Specify the output file name. - **Compression**: Option to compress the output file size. - **Header Row**: Enable if headers are present. - **Sheet Name**: Specify the Sheet Name for the spreadsheet. ### Move Base64 String to File Parameters: - **Base64 Input Field**: Specify the field containing the Base64 string. Options: - **File Name**: Specify the output file name. - **MIME Type**: Specify the MIME type of the output file. ---------------------------------------- # Crypto Node in n8n Use the Crypto node to encrypt data in workflows. ## Actions - **Generate** a random string - **Hash** a text or file in a specified format - **Hmac** a text or file in a specified format - **Sign** a string using a private key ## Node Parameters ### Generate Parameters - **Property Name**: Name of the property to write the random string to. - **Type**: Select encoding type: - **ASCII** - **BASE64** - **HEX** - **UUID** ### Hash Parameters - **Type**: Select the hash type: - **MD5** - **SHA256** - **SHA3-256** - **SHA3-384** - **SHA3-512** - **SHA385** - **SHA512** - **Binary File**: Enable if hashing data from a binary file. - **Value**: Enter the value to hash if **Binary File** is off. - **Binary Property Name**: Name of the binary property if **Binary File** is on. - **Property Name**: Name of the property to write the hash to. - **Encoding**: Select encoding type: - **BASE64** - **HEX** ### Hmac Parameters - **Binary File**: Enable if encrypting data from a binary file. - **Value**: Enter the value to encrypt if **Binary File** is off. - **Binary Property Name**: Name of the binary property if **Binary File** is on. - **Type**: Select encryption type: - **MD5** - **SHA256** - **SHA3-256** - **SHA3-384** - **SHA3-512** - **SHA385** - **SHA512** - **Property Name**: Name of the property to write the hash to. - **Secret**: Secret or secret key for decoding. - **Encoding**: Select encoding type: - **BASE64** - **HEX** ### Sign Parameters - **Value**: Value to sign. - **Property Name**: Name of the property to write the signed value to. - **Algorithm Name or ID**: Choose from the list or specify an ID using an expression. - **Encoding**: Select encoding type: - **BASE64** - **HEX** - **Private Key**: Private key used for signing the string. ---------------------------------------- # Date & Time Node The Date & Time node manipulates date and time data and converts it to different formats. ## Timezone Settings - Workflow timezone if set. - n8n instance timezone if workflow timezone isn't set (default: `America/New York`). ## Operations - **Add to a Date**: Add a specified amount of time to a date. - **Extract Part of a Date**: Extract part of a date (year, month, day, etc.). - **Format a Date**: Transform a date to a new format. - **Get Current Date**: Get the current date and optionally include the current time. - **Get Time Between Dates**: Calculate the time between two dates. - **Round a Date**: Round a date to the nearest unit. - **Subtract From a Date**: Subtract a specified amount of time from a date. ## Operation Details ### Add to a Date #### Parameters - **Date to Add To**: Date to change. - **Time Unit to Add**: Select time unit for the **Duration**. - **Duration**: Number of time units to add. - **Output Field Name**: Field name for the new date. ### Extract Part of a Date #### Parameters - **Date**: Date to extract from. - **Part**: Select part to extract (Year, Month, Day, etc.). - **Output Field Name**: Field name for extracted part. ### Format a Date #### Parameters - **Date**: Date to format. - **Format**: Selected format (e.g., MM/DD/YYYY, YYYY-MM-DD). - **Output Field Name**: Field name for formatted date. ### Get Current Date #### Parameters - **Include Current Time**: Choice to include current time or set to midnight. - **Output Field Name**: Field name for current date. ### Get Time Between Dates #### Parameters - **Start Date**: Earlier date. - **End Date**: Later date. - **Units**: Select units for calculation (Year, Month, Day, etc.). - **Output Field Name**: Field name for calculated time. ### Round a Date #### Parameters - **Date**: Date to round. - **Mode**: Round Down or Round Up. - **To Nearest**: Selected unit (Year, Month, Day, etc.). - **Output Field Name**: Field name for rounded date. ### Subtract From a Date #### Parameters - **Date to Subtract From**: Date to subtract from. - **Time Unit to Subtract**: Select unit for **Duration**. - **Duration**: Amount of time units to subtract. - **Output Field Name**: Field name for resultant date. ## Supported Formats n8n supports all date formats from Luxon. Tokens used are case-sensitive. ---------------------------------------- # Debug Helper Use the Debug Helper node to trigger different error types or generate random datasets to help test n8n workflows. ## Operations Define the operation by selecting the **Category**: - **Do Nothing**: Don't do anything. - **Throw Error**: Throw an error with the specified type and message. - **Out Of Memory**: Generate a specific memory size to simulate being out of memory. - **Generate Random Data**: Generate some random data in a selected format. ## Node Parameters The node parameters depend on the **Category** selected. ### Throw Error - **Error Type**: Select the type of error to throw. Options: - **NodeApiError** - **NodeOperationError** - **Error** - **Error Message**: Enter the error message to throw. ### Out Of Memory - **Memory Size to Generate**: Enter the approximate amount of memory to generate. ### Generate Random Data - **Data Type**: Choose the type of random data: - **Address** - **Coordinates** - **Credit Card** - **Email** - **IPv4** - **IPv6** - **MAC** - **Nanoids**: - **Nanoid Alphabet**: The alphabet for generating the nanoids. - **Nanoid Length**: Length of each nanoid. - **URL** - **User Data** - **UUID** - **Version** - **Seed**: Specific seed for consistent data generation. Leave empty for random generation. - **Number of Items to Generate**: Enter the quantity of random items to generate. - **Output as Single Array**: Choose to generate the data as a single array (on) or multiple items (off). ---------------------------------------- # Edit Image Use the Edit Image node to manipulate and edit images. ## Dependencies 1. Install [GraphicsMagick](http://www.graphicsmagick.org/README.html) if not running on Docker. 2. Use a node like [Read/Write Files from Disk](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.readwritefile/) or [HTTP Request](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to pass the image file as a data property. ## Operations - **Blur** - **Border** - **Composite** - **Create** - **Crop** - **Draw** - **Get Information** - **Multi Step** - **Resize** - **Rotate** - **Shear** - **Text** - **Transparent** ## Node Parameters ### Blur parameters - **Property Name**: Name of the binary property with image data. - **Blur**: Strength of the blur (0-1000). - **Sigma**: Stigma for the blur (0-1000). ### Border parameters - **Property Name**: Name of the binary property with image data. - **Border Width**: Width of the border. - **Border Height**: Height of the border. - **Border Color**: Color for the border (hex). ### Composite parameters - **Property Name**: Name of the binary property with base image data. - **Composite Image Property**: Name of the binary property with composite image data. - **Operator**: Select from: Add, Atop, Bumpmap, Copy, Difference, etc. - **Position X**: x-axis position of the composite image. - **Position Y**: y-axis position of the composite image. ### Create parameters - **Property Name**: Name of the binary property with image data. - **Background Color**: Background color for the image (hex). - **Image Width**: Width of the image. - **Image Height**: Height of the image. ### Crop parameters - **Property Name**: Name of the binary property with image data. - **Width**: Width to crop to. - **Height**: Height to crop to. - **Position X**: x-axis position to start cropping from. - **Position Y**: y-axis position to start cropping from. ### Draw parameters - **Property Name**: Name of the binary property with image data. - **Primitive**: Shape to draw (Circle, Line, Rectangle). - **Color**: Color for the primitive (hex). - **Start Position X**: Starting x-axis position for drawing. - **Start Position Y**: Starting y-axis position for drawing. - **End Position X**: Ending x-axis position for drawing. - **End Position Y**: Ending y-axis position for drawing. - **Corner Radius**: Corner radius for the drawn primitive. ### Get Information parameters - **Property Name**: Name of the binary property with image data. ### Multi Step parameters - **Property Name**: Name of the binary property with image data. - **Operations**: List of operations to perform. ### Resize parameters - **Property Name**: Name of the binary property with image data. - **Width**: New width for the image. - **Height**: New height for the image. - **Option**: Select resizing option (Ignore Aspect Ratio, Maximum Area, etc.). ### Rotate parameters - **Property Name**: Name of the binary property with image data. - **Rotate**: Degrees to rotate (–360 to 360). - **Background Color**: Background color for rotation (hex). ### Shear parameters - **Property Name**: Name of the binary property with image data. - **Degrees X**: Degrees to shear from the x-axis. - **Degrees Y**: Degrees to shear from the y-axis. ### Text parameters - **Property Name**: Name of the binary property with image data. - **Text**: Text to write on the image. - **Font Size**: Font size for the text. - **Font Color**: Color for the text (hex). - **Position X**: Starting x-axis position for the text. - **Position Y**: Starting y-axis position for the text. - **Max Line Length**: Maximum characters per line before line break. ### Transparent parameters - **Property Name**: Name of the binary property with image data. - **Color**: Color to make transparent (hex). ## Node Options - **File Name**: Filename of the output file. - **Format**: Output file format (bmp, gif, jpeg, png, tiff, WebP). The **Text** operation includes **Font Name or ID** option. Select from dropdown or specify ID using an expression. ---------------------------------------- # Email Trigger (IMAP) Node Use the IMAP Email node to receive emails using an IMAP email server. This node is a trigger node. ## Credential Authentication information for this node can be found [here](https://docs.n8n.io/integrations/builtin/credentials/imap/). ## Operations - **Receive an email** ## Node Parameters ### Credential to Connect With Select or create an IMAP credential to connect to the server. ### Mailbox Name Enter the mailbox from which you want to receive emails. ### Action Choose whether to mark the email as read when n8n receives it. Options: - **None**: Leave it marked unread. - **Mark as Read**: Mark it as read. ### Download Attachments This toggle controls whether to download email attachments (on) or not (off). Only set if necessary to avoid increased processing. ### Format Choose the format to return the message: - **RAW**: Full email message data with body content as a base64url encoded string. - **Resolved**: Full email with all data resolved and attachments saved as binary data. - **Simple**: Full email; not recommended if inline attachments are needed. ## Node Options ### Custom Email Rules Enter custom email fetching rules to determine which emails the node fetches. Refer to [node-imap's search function criteria](https://github.com/mscdex/node-imap) for more information. ### Force Reconnect Every Minutes Set an interval in minutes to force reconnection. ---------------------------------------- # Error Trigger Node The Error Trigger node is used to create error workflows that get triggered when a linked workflow fails. It collects details about the failed workflow and executes the error workflow. ## Usage 1. Create a new workflow with the Error Trigger as the first node. 2. Name the workflow (e.g., `Error Handler`). 3. Click **Save**. 4. In the workflow to which you want to link this error workflow: 1. Click **Options** > **Settings**. 2. In **Error workflow**, select the previously created error workflow (e.g., `Error Handler`). 3. Click **Save**. **Notes:** - The workflow using the Error Trigger node does not need to be activated. - By default, workflows containing the Error Trigger node use themselves as the error workflow. - Error workflows cannot be tested during manual workflow executions. They only trigger upon automatic workflow errors. ## Error Data The default error data received by the Error Trigger is structured as follows: ### Execution Information ```json [ { "execution": { "id": "231", "url": "https://n8n.example.com/execution/231", "retryOf": "34", "error": { "message": "Example Error Message", "stack": "Stacktrace" }, "lastNodeExecuted": "Node With Error", "mode": "manual" }, "workflow": { "id": "1", "name": "Example Workflow" } } ] ``` **Exceptions:** - `execution.id` and `execution.url` are not present if the error occurs in the trigger node of the main workflow as it doesn’t execute. - `execution.retryOf` is only available if the execution is a retry of a failed execution. If the error originates from the trigger node of the main workflow, the data sent to the error workflow is different: ### Trigger Information ```json { "trigger": { "error": { "context": {}, "name": "WorkflowActivationError", "cause": { "message": "", "stack": "" }, "timestamp": 1654609328787, "message": "", "node": { // Additional details } }, "mode": "trigger" }, "workflow": { "id": "", "name": "" } } ``` ---------------------------------------- # Evaluation Node The Evaluation node performs operations related to evaluations to validate AI workflow reliability. It can conditionally execute logic based on whether the workflow is under evaluation, write evaluation outcomes to a Google Sheets dataset, or log scoring metrics for evaluation performance. ## Credentials The Evaluation node's **Set Outputs** operation requires Google Sheets credentials. ## Operations The Evaluation node offers the following operations: - **Set Outputs**: Write the results of an evaluation back to a Google Sheet dataset. - **Set Metrics**: Record metrics scoring the evaluation performance to n8n's **Evaluations** tab. - **Check If Evaluating**: Branches the workflow execution logic based on whether the current execution is an evaluation. ### Set Outputs **Parameters**: - **Credential to connect with**: Select existing Google Sheets credentials. - **Document Containing Dataset**: Choose the spreadsheet to write evaluation results to. Options include: - **From list**: Select from a dropdown. - **By URL**: Enter the spreadsheet URL. - **By ID**: Enter the `spreadsheetId` found in a Google Sheets URL: `https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=0`. - **Sheet Containing Dataset**: Choose the sheet for evaluation results. Options include: - **From list**: Select from a dropdown. - **By URL**: Enter the sheet URL. - **By ID**: Enter the `sheetId` found in a Google Sheets URL: `https://docs.google.com/spreadsheets/d/aBC-123_xYz/edit#gid=sheetId`. - **By Name**: Enter the sheet title. **Outputs Section**: - **Name**: The Google Sheet column name to write evaluation results. - **Value**: The value to write. ### Set Metrics **Parameters**: - **Metrics to Return**: Define the metrics to record and track for evaluations. For each metric: - **Name**: The name for the metric. - **Value**: The numeric value to record. ### Check If Evaluating This operation has no parameters and provides branching output connectors for conditional execution based on the evaluation status. ---------------------------------------- # Evaluation Trigger Node The Evaluation Trigger node is used to validate AI workflow reliability by processing an evaluation dataset from Google Sheets, sending items through the workflow sequentially. ## Requirements - Requires Google Sheets for the test dataset. - Configure a Google Sheets credential. ## Parameters - **Credential to connect with**: Select/create Google Sheets credentials. - **Document Containing Dataset**: Choose the spreadsheet document with the sheet containing the test dataset. - Options: - From list - By URL - By ID (find `spreadsheetId` in Google Sheets URL: `https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=0`). - **Sheet Containing Dataset**: Choose the sheet containing the test dataset. - Options: - From list - By URL - By ID (find `sheetId` in Google Sheets URL: `https://docs.google.com/spreadsheets/d/aBC-123_xYz/edit#gid=sheetId`). - By Name - **Limit Rows**: Option to limit the number of rows to process. - **Max Rows to Process**: Specify maximum rows to read when limit is enabled. ## Filters Optionally filter the dataset based on column values. - **Column**: Select a sheet column to filter. Options: - From list - By ID (specify ID using an expression). - **Value**: Specify the column value to filter by. Only rows with the given value for the selected column will be processed. ---------------------------------------- # Execute Command Node The Execute Command node runs shell commands on the host machine that runs n8n. It executes the command in the default shell of the host machine (e.g., `cmd` on Windows, `zsh` on macOS). If n8n is running with Docker, the command will run in the n8n container instead of the Docker host. This node is not available on n8n Cloud. ## Node Parameters ### Execute Once Choose whether the node executes only once (enabled) or once for every input item (disabled). ### Command Enter the command to execute on the host machine. #### Running Multiple Commands You can run multiple commands in the Execute Command node using one of the following methods: - Separate commands by `&&` on one line: ``` cd bin && ls ``` - Place each command on a new line: ``` cd bin ls ``` #### Running cURL Commands To execute a cURL command, create a Docker image based on the existing n8n image. Install the curl package with the following steps: 1. Create a file named `Dockerfile`. 2. Add the following code to the Dockerfile: ``` FROM docker.n8n.io/n8nio/n8n USER root RUN apk --update add curl USER node ``` 3. Build the Docker image with: ``` docker build -t n8n-curl ``` 4. Replace the Docker image used before with `n8n-curl`. 5. Run the newly created Docker image to execute commands using the Execute Command node. ## Common Issues Refer to the Common Issues documentation for solutions and troubleshooting. ---------------------------------------- # Execute Sub-workflow ## Node Parameters ### Source - **Database**: Load the workflow from the database by ID. - **From list**: Select the workflow from a list of workflows available to your account. - **Workflow ID**: Enter the workflow ID found in the workflow's URL. - **Local File**: Load the workflow from a locally saved JSON file. - **Workflow Path**: Enter the path to the local JSON workflow file. - **Parameter**: Load the workflow from a parameter. - **Workflow JSON**: Enter the JSON code to execute. - **URL**: Load the workflow from a URL. - **Workflow URL**: Enter the URL of the workflow. ### Workflow Inputs - If using **database** and **From list**, input items display for filling or mapping. - Optionally remove requested input items (receive `null` as value). - Enable **Attempt to convert types** to convert data to requested types. ### Mode - **Run once with all items**: Pass all input items into a single execution of the node. - **Run once for each item**: Execute the node for each input item. ## Node Options - **Wait for Sub-Workflow Completion**: Control whether to wait for the sub-workflow’s completion before continuing. ## Set Up and Use a Sub-workflow ### Create the Sub-workflow 1. Create a new workflow. 2. Optionally create a sub-workflow from an existing parent workflow using the **Execute Sub-workflow** node and selecting **Create a sub-workflow**. 3. Configure which workflows can call the sub-workflow and define input data modes. ### Call the Sub-workflow 1. Open the workflow where you want to call the sub-workflow. 2. Add the **Execute Sub-workflow** node. 3. Specify the sub-workflow (by ID, local file, JSON parameter, or URL). 4. Fill in required input items defined by the sub-workflow. 5. Save your workflow. ## How Data Passes Between Workflows - Data is passed from the **Workflow A**’s Execute Sub-workflow node to the sub-workflow's Execute Sub-workflow Trigger node, and returned back to Workflow A. ---------------------------------------- # Execute Sub-workflow Trigger Node ## Core Concept The Execute Sub-workflow Trigger node is used to start a workflow in response to another workflow. It should be the first node in the workflow, enabling the reuse of workflows or breaking large workflows into smaller components. ## Usage This node runs in response to a call from the Execute Sub-workflow or Call n8n Workflow Tool nodes. ### Create the Sub-workflow 1. Create a new workflow. 2. Optionally: - Use the Execute Sub-workflow node to create a sub-workflow from an existing parent workflow. - Select **Database** and **From list** options and choose **Create a sub-workflow**. - Extract nodes using Sub-workflow conversion in the context menu. 3. **Optional**: Configure call settings: - Navigate to the **Options** menu > **Settings**. - Change the **This workflow can be called by** setting. - Add the Execute Sub-workflow trigger node. - Set the **Input data mode**: - **Define using fields below** - **Define using JSON example** - **Accept all data** 4. Add functionality with other nodes as needed. 5. Save the sub-workflow. **Note**: The sub-workflow must not contain errors. To load data, follow the setup steps to load data from previous executions and adjust the Input data mode as necessary. ### Call the Sub-workflow 1. Open the parent workflow. 2. Add the **Execute Sub-workflow** node. 3. Set the sub-workflow you want to call by ID or URL. 4. Fill in the required input items defined by the sub-workflow. 5. Save your workflow. ## Data Flow 1. The Execute Sub-workflow node in the parent workflow passes data to the Execute Sub-workflow Trigger node in the sub-workflow. 2. The last node of the sub-workflow returns data back to the Execute Sub-workflow node in the parent workflow. ## Best Practices - Ensure there are no errors in the sub-workflow setup to allow successful triggering. - Use **Accept all data** mode for flexibility or define specific input items for better structure. - Test the workflow execution flow by using the **View sub-execution** link to monitor the process between parent and sub-workflows. ---------------------------------------- # Execution Data Use the Execution Data node to save metadata for workflow executions, enabling you to search by this data in the Executions list. You can retrieve custom execution data during workflow execution using the Code node. ## Operations - **Save Execution Data for Search** ## Data to Save Add a **Saved Field** for each key/value pair of metadata you'd like to save. ## Limitations The Execution Data node has the following restrictions when storing execution metadata: - `key`: limited to 50 characters - `value`: limited to 512 characters If either the `key` or `value` exceeds these limitations, n8n truncates to their maximum length and outputs a log entry. ---------------------------------------- # Extract From File The Extract From File node extracts data from a binary format file and converts it to JSON for workflow manipulation. For converting JSON back to a binary file type, use the Convert to File node. ## Operations Select the format of the source file to extract data from: - **Extract From CSV**: Extracts data from CSV files. - **Extract From HTML**: Extracts data from HTML files. - **Extract From JSON**: Extracts JSON data from a binary file. - **Extract From ICS**: Extracts fields from iCalendar format files. - **Extract From ODS**: Extracts fields from ODS spreadsheet files. - **Extract From PDF**: Extracts fields from PDF files. - **Extract From RTF**: Extracts fields from RTF files. - **Extract From Text File**: Extracts fields from standard text files. - **Extract From XLS**: Extracts fields from older Microsoft Excel files. - **Extract From XLSX**: Extracts fields from Microsoft Excel files. - **Move File to Base64 String**: Converts binary data to a base64 format. ## Example Workflow A Webhook node triggers the workflow. Upon receiving a CSV file, the Extract From File node outputs data as JSON 'row' objects. ### Receiving Files with a Webhook In the Webhook Node, enable **Raw body** in the Add Options to output the binary file expected by the following node. ## Node Parameters ### Input Binary Field Enter the name of the field containing the binary file. Default is 'data'. ### Destination Output Field Enter the name of the output field that will contain the extracted data. This parameter is available for the following operations: - Extract From JSON - Extract From ICS - Extract From Text File - Move File to Base64 String ---------------------------------------- ## Filter Node Documentation ### Core Concepts The Filter node in n8n processes items based on specified conditions. An item is passed to the next node if it meets the defined conditions; otherwise, it is omitted from the output. ### Node Parameters - **Conditions**: Create filter comparison conditions. - Use the data type dropdown to select the data type and comparison operation. - Example: For dates after a particular date, select **Date & Time > is after**. - Additional conditions can be added by selecting **Add condition**. ### Combining Conditions You can configure conditions to keep items based on: - **All conditions**: Use **AND** between conditions. - **Any conditions**: Use **OR** between conditions. - Note: Mixed AND and OR rules cannot be used. ### Node Options - **Ignore Case**: Whether to ignore letter case (enabled) or be case sensitive (disabled). - **Less Strict Type Validation**: Enables n8n to attempt to convert value types based on the operator (enabled) or not (disabled). Useful when encountering a "wrong type" error. ### Available Data Type Comparisons #### 1. String - exists - does not exist - is empty - is not empty - is equal to - is not equal to - contains - does not contain - starts with - does not start with - ends with - does not end with - matches regex - does not match regex #### 2. Number - exists - does not exist - is empty - is not empty - is equal to - is not equal to - is greater than - is less than - is greater than or equal to - is less than or equal to #### 3. Date & Time - exists - does not exist - is empty - is not empty - is equal to - is not equal to - is after - is before - is after or equal to - is before or equal to #### 4. Boolean - exists - does not exist - is empty - is not empty - is true - is false - is equal to - is not equal to #### 5. Array - exists - does not exist - is empty - is not empty - contains - does not contain - length equal to - length not equal to - length greater than - length less than - length greater than or equal to - length less than or equal to #### 6. Object - exists - does not exist - is empty - is not empty ---------------------------------------- # n8n Form Node Documentation ## Overview Use the n8n Form node to create user-facing forms with multiple steps. You must start the workflow with the n8n Form Trigger. ## Setting Up the Node ### Set Default Selections with Query Parameters - Query parameters can be used to set initial values for fields in production mode. - Format example URL for initial field values: ``` https://my-account.n8n.cloud/form/my-form?email=jane.doe%40example.com&name=Jane%20Doe ``` ### Displaying Custom HTML - Add a **Custom HTML** field to incorporate arbitrary HTML in the form. - Custom HTML content is read-only by default. ### Including Hidden Fields - Use **Hidden Field** form element for fields that won't display to users. - Pass values for hidden fields using query parameters. ### Defining the Form Using JSON Define form fields with a JSON array of objects: ```json [ { "fieldLabel": "Date Field", "fieldType": "date", "formatDate": "mm/dd/yyyy", "requiredField": true }, { "fieldLabel": "Dropdown Options", "fieldType": "dropdown", "fieldOptions": { "values": [ {"option": "option 1"}, {"option": "option 2"} ] }, "requiredField": true }, // Additional fields omitted for brevity ] ``` ### Form Ending - Use **Form Ending** to show a completion page, redirect, or display HTML/text. - Options: **Show Completion Screen**, **Redirect to URL**, or **Show Text**. ### Forms with Branches - Form workflows executing mutually exclusive branches will behave correctly by showing one branch according to submitted data. - Multiple branches executed sequentially will ignore all Form Ending nodes except for the last one executed. ## Node Options - **Form Title**: Title for the form displayed on the webpage. - **Form Description**: Description displayed beneath the main title. - **Button Label**: Label for the submit button. ## Running the Node ### Build and Test Workflows Use the **Test URL** in the n8n Form Trigger during development. ### Production Workflows Switch to the n8n Form Trigger's **Production URL** when ready to activate the workflow. ## Templates and Examples - View workflow examples and templates tailored for specific use cases (details omitted for brevity). ---------------------------------------- # n8n Form Trigger Node Documentation ## Core Concept The n8n Form trigger starts a workflow upon a user submitting a form, taking input data directly from the form. It generates the web page for the form automatically. ## Production and Testing Workflows - **Test URL**: Use this URL during development to view incoming data in the editor UI. - **Test Step**: Opens the form without running the entire workflow. - **Test Workflow**: Opens the form and runs the complete workflow upon submission. - **Production URL**: Use this once the workflow is ready. Activates the workflow for automatic execution upon form submission, but does not display incoming data in the editor interface. ## Setting Default Selections with Query Parameters - Initial values for fields can be set using query parameters appended to the Form Trigger URL. These parameters apply to all pages within the form and are only available in production mode. - **Percent-encode** field names or values using tools like URL Encode/Decode. Example: - Production URL: `https://my-account.n8n.cloud/form/my-form` - Query parameters: `?email=jane.doe%40example.com&name=Jane%20Doe` ## Node Parameters ### Authentication - **Basic Auth** - **None** **Using Basic Auth**: - Requires a **Username** and **Password** for the service being accessed. ### Form URLs - **Test URL**: Registered when using Test Step or Test Workflow. - **Production URL**: Registered when workflow is activated. ### Form Path - Set a custom slug for the form. ### Form Title - Set the title displayed on the web page and as the main `h1` title. ### Form Description - Description displayed below the main title, can include line breaks using `\n` or `
`. ### Form Elements - **Field Label**: The label for the input field. - **Element Type (Options)**: - **Custom HTML** - **Date** - **Dropdown List** - **Email** - **File** - **Hidden Field** - **Number** - **Password** - **Text** - **Textarea** - **Required Field**: Toggle to require user input. ### Respond When - Options for sending responses after form submission: - **Form Is Submitted**: Immediate response upon submission. - **Workflow Finishes**: Response sent after workflow completion. ## Node Options - **Append n8n Attribution**: Hide or display the n8n credit footer. - **Form Response**: - Respond With **Form Submitted Text** or **Redirect URL**. - **Ignore Bots**: Option to ignore bot requests. - **Use Workflow Timezone**: Use workflow-specific timezone instead of UTC for timestamps. ## Templates and Examples - Access integration templates and workflow examples on the n8n website. ---------------------------------------- # FTP Node The FTP node facilitates access and file uploads to FTP or SFTP servers. ## Credentials To connect to an SFTP server, use an SFTP credential. For more details on authentication, refer to the FTP credentials documentation. ## Operations - **Delete**: Remove a file or folder. - **Download**: Fetch a file from the server. - **List**: Retrieve folder content. - **Rename**: Change the name or location of a file or folder. - **Upload**: Send a file to the server. ### Uploading Files Use an additional node, such as the Read/Write Files from Disk node or the HTTP Request node, to attach a file for upload as a data property. ## Delete Operation - **Parameter**: - **Path**: The remote path to connect to. - **Options**: - **Folder**: If enabled, allows deletion of both folders and files. - **Recursive**: If enabled, deletes all files and directories within the specified folder. ## Download Operation - **Parameters**: - **Path**: The remote path to connect to. - **Put Output File in Field**: Name the output binary field for the retrieved file. ## List Operation - **Parameters**: - **Path**: The remote path to connect to. - **Recursive**: Option to return all directories/objects found recursively. ## Rename Operation - **Parameters**: - **Old Path**: The existing path of the file to rename. - **New Path**: The new path for the renamed file. - **Options**: - **Create Directories**: If enabled, the node will create the destination directory if it does not exist. ## Upload Operation - **Parameters**: - **Path**: The remote path to connect to. - **Binary File**: Select whether to upload a binary file or text content. - **Input Binary Field**: If uploading a binary file, specify the input binary field name. - **File Content**: If not uploading a binary file, enter the file's text content. ### Uploading Files Utilize an additional node like the Read/Write Files from Disk node or the HTTP Request node to attach a file for upload as a data property. ## Templates and Examples - Working with Excel spreadsheet files (xls & xlsx) - Download a file and upload it to an FTP server Refer to the n8n website for more templates and integrations. ---------------------------------------- # GraphQL Node Documentation ## Core Concepts GraphQL is an open-source data query and manipulation language for APIs, and a runtime for fulfilling queries with existing data. ## Node Parameters ### Authentication Select the type of authentication to use. If you select anything other than **None**, the **Credential for** parameter appears for you to select an existing or create a new authentication credential for that authentication type. ### HTTP Request Method Select the underlying HTTP Request method the node should use. Choose from: - **GET** - **POST**: If you select this method, you'll also need to select the **Request Format** the node should use for the query payload. Choose from: - **GraphQL (Raw)** - **JSON** ### Endpoint Enter the GraphQL Endpoint you'd like to hit. ### Ignore SSL Issues When you turn on this control, n8n ignores SSL certificate validation failure. ### Query Enter the GraphQL query you want to execute. Refer to relevant resources for information on writing your query. ### Response Format Select the format you'd like to receive query results in. Choose between: - **JSON** - **String**: If you select this format, enter a **Response Data Property Name** to define the property the string is written to. ## Headers Enter any **Headers** you want to pass as part of the query as **Name** / **Value** pairs. ---------------------------------------- # HTML Node in n8n The HTML node provides operations to help you work with HTML in n8n. ## Operations - **Generate HTML template**: Create an HTML template to output data as HTML. Supports: - Standard HTML - CSS in `