by Harshil Agrawal
This example workflow demonstrates how to handle pagination. This example assumes that the API you are making the request to has pagination, and returns a cursor (something that points to the next page). This example workflow makes a request to the HubSpot API to fetch contacts. You will have to modify the parameters based on your API. Config URL node: This node sets the URL that the HTTP Request node calls. HTTP Request node: This node makes the API call and returns the data from the API. Based on your API, you will have to modify the parameters of the node. NoOp node and Wait node: These nodes help me avoiding any rate limits. If you're API has rate limits, make sure you configure the correct time in the Wait node. Check if pagination: This IF node checks if the API returns any cursor. If the API doesn't return any cursor, it means that there is no data to be fetched, and the node returns false. If the API returns a cursor, it means that there is still some data that needs to be fetched. In this case, the node returns true. Set next URL: This Set node is used to set the URL. In the next cycle, the HTTP Request node makes a call to this URL. Combine all data: This node combines all the data that gets returned by the API calls from the HTTP Request node.
by nepomuc
This flow migrates all repositories of a Gitlab group to a Gitea organization by triggering Gitea's integrated migration tool. Set up steps: Copy this workflow Create an empty Gitea-organization you want to migrate to. (The flow will skip all projects which have the same name of possibly already existing repos in the target Gitea organization.) Create an access token in your Gitea (https://gitea.example.com/user/settings/applications), set it up as a Header Auth with it's name being "Authorization" and value being "token [your-gitea-token]" and select it for the "Gitea:"-named nodes. Create a Personal access token in Gitlab (https://gitlab.com/-/user_settings/personal_access_tokens), create a Header Auth with name "PRIVATE-TOKEN" and value "[your-gitlab-token]" and select it for the "Gitlab:"-named node. Also keep the value of your Gitlab-token available for step 5. Edit the Set node right after the trigger node and set paste your personal access token in there as well as the names of the Gitlab source group and the Gitea target organization. Use the url-friendly version of their names by simply copy&pasting them from their URLs. Run the flow and enjoy the show :)
by Joachim Hummel
This workflow automatically fetches PDF invoices from a Nextcloud folder (/Invoice/Incoming), sends them via email to a fixed recipient (invoice@example.com), sends a Telegram notification, and archives the file to /Invoice/2025/archive. Key Steps: Triggered daily at 8 AM Lists files in /Invoice/Incoming Filters for existing entries Downloads the file Sends the invoice via email Sends a Telegram message with filename Moves the file to archive 📦 Technologies used: Nextcloud SMTP Email Telegram Bot ⚙️ Use case: Perfect for freelancers or small businesses to automate recurring invoice sending with minimal effort.
by Viktor Klepikovskyi
Preventing Google Sheets Quota Errors during Batch Processing This template provides a robust solution for dealing with Google Sheets API rate limits. It is designed for workflows that update a large number of rows in a Google Sheet and frequently fail with "too many requests" errors. The template uses a Wait node connected to the error output of the Google Sheets node, creating a retry loop that delays execution for a set period before attempting the update again. To use this template, simply replace the placeholder Google Sheets nodes with your own credentials and sheet. You can find an example Google Sheet for this template here. For a full explanation of this approach, check out the blog post here.
by Yaron Been
Izzaanel Betia AI Generator Description None Overview This n8n workflow integrates with the Replicate API to use the izzaanel/betia model. This powerful AI model can generate high-quality other content based on your inputs. Features Easy integration with Replicate API Automated status checking and result retrieval Support for all model parameters Error handling and retry logic Clean output formatting Parameters Required Parameters prompt** (string): Prompt for generated image. If you include the trigger_word used in the training process you are more likely to activate the trained object, style, or concept in the resulting image. Optional Parameters mask** (string, default: None): Image mask for image inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. seed** (integer, default: None): Random seed. Set for reproducible generation image** (string, default: None): Input image for image to image or inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. model** (string, default: dev): Which model to run inference with. The dev model performs best with around 28 inference steps but the schnell model only needs 4 steps. width** (integer, default: None): Width of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation height** (integer, default: None): Height of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation go_fast** (boolean, default: False): Run faster predictions with model optimized for speed (currently fp8 quantized); disable to run in original bf16 extra_lora** (string, default: None): Load LoRA weights. Supports Replicate models in the format <owner>/<username> or <owner>/<username>/<version>, HuggingFace URLs in the format huggingface.co/<owner>/<model-name>, CivitAI URLs in the format civitai.com/models/<id>[/<model-name>], or arbitrary .safetensors URLs from the Internet. For example, 'fofr/flux-pixar-cars' lora_scale** (number, default: 1): Determines how strongly the main LoRA should be applied. Sane results between 0 and 1 for base inference. For go_fast we apply a 1.5x multiplier to this value; we've generally seen good performance when scaling the base value by that amount. You may still need to experiment to find the best value for your particular lora. megapixels** (string, default: 1): Approximate number of megapixels for generated image How to Use Set up your Replicate API key in the workflow Configure the required parameters for your use case Run the workflow to generate other content Access the generated output from the final node API Reference Model: izzaanel/betia API Endpoint: https://api.replicate.com/v1/predictions Requirements Replicate API key n8n instance Basic understanding of other generation parameters
by Yaron Been
Settyan Flash V2.0.1 Beta.10 AI Generator Description None Overview This n8n workflow integrates with the Replicate API to use the settyan/flash-v2.0.1-beta.10 model. This powerful AI model can generate high-quality other content based on your inputs. Features Easy integration with Replicate API Automated status checking and result retrieval Support for all model parameters Error handling and retry logic Clean output formatting Parameters Required Parameters prompt** (string): Prompt for generated image. If you include the trigger_word used in the training process you are more likely to activate the trained object, style, or concept in the resulting image. Optional Parameters mask** (string, default: None): Image mask for image inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. seed** (integer, default: None): Random seed. Set for reproducible generation image** (string, default: None): Input image for image to image or inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. model** (string, default: dev): Which model to run inference with. The dev model performs best with around 28 inference steps but the schnell model only needs 4 steps. width** (integer, default: None): Width of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation height** (integer, default: None): Height of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation go_fast** (boolean, default: False): Run faster predictions with model optimized for speed (currently fp8 quantized); disable to run in original bf16 extra_lora** (string, default: None): Load LoRA weights. Supports Replicate models in the format <owner>/<username> or <owner>/<username>/<version>, HuggingFace URLs in the format huggingface.co/<owner>/<model-name>, CivitAI URLs in the format civitai.com/models/<id>[/<model-name>], or arbitrary .safetensors URLs from the Internet. For example, 'fofr/flux-pixar-cars' lora_scale** (number, default: 1): Determines how strongly the main LoRA should be applied. Sane results between 0 and 1 for base inference. For go_fast we apply a 1.5x multiplier to this value; we've generally seen good performance when scaling the base value by that amount. You may still need to experiment to find the best value for your particular lora. megapixels** (string, default: 1): Approximate number of megapixels for generated image How to Use Set up your Replicate API key in the workflow Configure the required parameters for your use case Run the workflow to generate other content Access the generated output from the final node API Reference Model: settyan/flash-v2.0.1-beta.10 API Endpoint: https://api.replicate.com/v1/predictions Requirements Replicate API key n8n instance Basic understanding of other generation parameters
by Yaron Been
Settyan Flash V2.0.0 Beta.10 AI Generator Description None Overview This n8n workflow integrates with the Replicate API to use the settyan/flash-v2.0.0-beta.10 model. This powerful AI model can generate high-quality other content based on your inputs. Features Easy integration with Replicate API Automated status checking and result retrieval Support for all model parameters Error handling and retry logic Clean output formatting Parameters Required Parameters prompt** (string): Prompt for generated image. If you include the trigger_word used in the training process you are more likely to activate the trained object, style, or concept in the resulting image. Optional Parameters mask** (string, default: None): Image mask for image inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. seed** (integer, default: None): Random seed. Set for reproducible generation image** (string, default: None): Input image for image to image or inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. model** (string, default: dev): Which model to run inference with. The dev model performs best with around 28 inference steps but the schnell model only needs 4 steps. width** (integer, default: None): Width of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation height** (integer, default: None): Height of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation go_fast** (boolean, default: False): Run faster predictions with model optimized for speed (currently fp8 quantized); disable to run in original bf16 extra_lora** (string, default: None): Load LoRA weights. Supports Replicate models in the format <owner>/<username> or <owner>/<username>/<version>, HuggingFace URLs in the format huggingface.co/<owner>/<model-name>, CivitAI URLs in the format civitai.com/models/<id>[/<model-name>], or arbitrary .safetensors URLs from the Internet. For example, 'fofr/flux-pixar-cars' lora_scale** (number, default: 1): Determines how strongly the main LoRA should be applied. Sane results between 0 and 1 for base inference. For go_fast we apply a 1.5x multiplier to this value; we've generally seen good performance when scaling the base value by that amount. You may still need to experiment to find the best value for your particular lora. megapixels** (string, default: 1): Approximate number of megapixels for generated image How to Use Set up your Replicate API key in the workflow Configure the required parameters for your use case Run the workflow to generate other content Access the generated output from the final node API Reference Model: settyan/flash-v2.0.0-beta.10 API Endpoint: https://api.replicate.com/v1/predictions Requirements Replicate API key n8n instance Basic understanding of other generation parameters
by Yaron Been
Barbacoaexpert1 Ai Haircuts AI Generator Description None Overview This n8n workflow integrates with the Replicate API to use the barbacoaexpert1/ai-haircuts model. This powerful AI model can generate high-quality other content based on your inputs. Features Easy integration with Replicate API Automated status checking and result retrieval Support for all model parameters Error handling and retry logic Clean output formatting Parameters Required Parameters prompt** (string): Prompt for generated image. If you include the trigger_word used in the training process you are more likely to activate the trained object, style, or concept in the resulting image. Optional Parameters mask** (string, default: None): Image mask for image inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. seed** (integer, default: None): Random seed. Set for reproducible generation image** (string, default: None): Input image for image to image or inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. model** (string, default: dev): Which model to run inference with. The dev model performs best with around 28 inference steps but the schnell model only needs 4 steps. width** (integer, default: None): Width of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation height** (integer, default: None): Height of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation go_fast** (boolean, default: False): Run faster predictions with model optimized for speed (currently fp8 quantized); disable to run in original bf16 extra_lora** (string, default: None): Load LoRA weights. Supports Replicate models in the format <owner>/<username> or <owner>/<username>/<version>, HuggingFace URLs in the format huggingface.co/<owner>/<model-name>, CivitAI URLs in the format civitai.com/models/<id>[/<model-name>], or arbitrary .safetensors URLs from the Internet. For example, 'fofr/flux-pixar-cars' lora_scale** (number, default: 1): Determines how strongly the main LoRA should be applied. Sane results between 0 and 1 for base inference. For go_fast we apply a 1.5x multiplier to this value; we've generally seen good performance when scaling the base value by that amount. You may still need to experiment to find the best value for your particular lora. megapixels** (string, default: 1): Approximate number of megapixels for generated image How to Use Set up your Replicate API key in the workflow Configure the required parameters for your use case Run the workflow to generate other content Access the generated output from the final node API Reference Model: barbacoaexpert1/ai-haircuts API Endpoint: https://api.replicate.com/v1/predictions Requirements Replicate API key n8n instance Basic understanding of other generation parameters
by Yaron Been
Monexia Nietgoed AI Generator Description None Overview This n8n workflow integrates with the Replicate API to use the monexia/nietgoed model. This powerful AI model can generate high-quality other content based on your inputs. Features Easy integration with Replicate API Automated status checking and result retrieval Support for all model parameters Error handling and retry logic Clean output formatting Parameters Required Parameters prompt** (string): Prompt for generated image. If you include the trigger_word used in the training process you are more likely to activate the trained object, style, or concept in the resulting image. Optional Parameters mask** (string, default: None): Image mask for image inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. seed** (integer, default: None): Random seed. Set for reproducible generation image** (string, default: None): Input image for image to image or inpainting mode. If provided, aspect_ratio, width, and height inputs are ignored. model** (string, default: dev): Which model to run inference with. The dev model performs best with around 28 inference steps but the schnell model only needs 4 steps. width** (integer, default: None): Width of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation height** (integer, default: None): Height of generated image. Only works if aspect_ratio is set to custom. Will be rounded to nearest multiple of 16. Incompatible with fast generation go_fast** (boolean, default: False): Run faster predictions with model optimized for speed (currently fp8 quantized); disable to run in original bf16 extra_lora** (string, default: None): Load LoRA weights. Supports Replicate models in the format <owner>/<username> or <owner>/<username>/<version>, HuggingFace URLs in the format huggingface.co/<owner>/<model-name>, CivitAI URLs in the format civitai.com/models/<id>[/<model-name>], or arbitrary .safetensors URLs from the Internet. For example, 'fofr/flux-pixar-cars' lora_scale** (number, default: 1): Determines how strongly the main LoRA should be applied. Sane results between 0 and 1 for base inference. For go_fast we apply a 1.5x multiplier to this value; we've generally seen good performance when scaling the base value by that amount. You may still need to experiment to find the best value for your particular lora. megapixels** (string, default: 1): Approximate number of megapixels for generated image How to Use Set up your Replicate API key in the workflow Configure the required parameters for your use case Run the workflow to generate other content Access the generated output from the final node API Reference Model: monexia/nietgoed API Endpoint: https://api.replicate.com/v1/predictions Requirements Replicate API key n8n instance Basic understanding of other generation parameters
by CustomJS
This n8n template demonstrates how to download multiple PDF files from public URLs and merge them into a single PDF using the PDF Toolkit from www.customjs.space. @custom-js/n8n-nodes-pdf-toolkit Notice Community nodes can only be installed on self-hosted instances of n8n. What this workflow does Downloads** each PDF using an HTTP Request. Populates* files into an array with *Merge** node from n8n. Merges** all downloaded PDFs using the Merge PDF node from the @custom-js/n8n-nodes-pdf-toolkit. Writes** the final merged PDF to disk. Requirements Self-hosted** n8n instance CustomJS API key** for merging multiple PDF files. PDF files to be merged** to be converted into a PDF Workflow Steps: Manual Trigger: Runs with user interaction. HTTP Request Node For PDF Download: Pass urls for PDF files to merge. Merge Node For Array Population: Just populates two files into an array. Merge PDF files: Uses the CustomJS node to merge the incoming PDF files into a single PDF file. If size of PDF files exceeds 6MB, you can simply pass an array of URLs for PDF files. Usage Get API key from customJS Sign up to customJS platform. Navigate to your profile page Press "Show" button to get API key Set Credentials for CustomJS API on n8n Copy and paste your API key generated from CustomJS here. Design workflow A Manual Trigger for starting workflow. Two HTTP Request Nodes for downloading PDF files. A Merge Node for populating files as an array. Merge PDFs node for merging files Write to Disk node for saving merged PDF file. You can replace logic for triggering and returning results. For example, you can trigger this workflow by calling a webhook and get a result as a response from webhook. Simply replace Manual Trigger and Write to Disk nodes. Perfect for Bundling reports or invoices. Generating document sets from external sources. Automating PDF handling without writing custom code
by MC Naveen
I wanted a system to monitor website content changes and notify me. So I made it using n8n. Especially my competitor blogs. I wanted to know how often they are posting new articles. (I used their sitemap.xml file) (The below workflow may vary) In the Below example, I used HackerNews for example. Explanation: First HTTP Request node crawls the webpage and grabs the website source code Then wait for x minutes Again, HTTP Node crawls the webpage If Node compares both results are equal if anything is changed. It’ll go to the false branch and notify me in telegram. Workflow: Sample Response:
by darrell_tw
Workflow Description This workflow demonstrates how to use the LINE Messaging API to handle two scenarios: Replying to a user's message using a reply token. Sending a push message to a specific LINE user using their user ID. Key Features Webhook Integration: Receives and processes incoming messages from LINE using a webhook. Conditional Logic: Checks if the received event type is a message and handles it accordingly. Reply Message: Automatically responds to the user's message using the LINE reply token. Push Message: Sends a test message to a specific LINE user using their unique user ID. Pre-Configuration To simplify the setup process, create a Header Auth credential in n8n: Name**: Authorization Value**: Bearer {line token} This will authenticate all API requests to the LINE Messaging API. Node Configurations 1.1. Webhook from LINE Message Purpose**: Captures incoming events from the LINE Messaging API. Configuration**: HTTP Method: POST Path: {n8n-webhook-page} 1.2. If Condition Purpose**: Checks if the received event type is message. Configuration**: Condition: {{ $json.body.events[0].type }} equals "message" 1.3. Line: Reply with Token Purpose**: Replies to the user's message using the LINE reply token. Configuration**: Method: POST URL: https://api.line.me/v2/bot/message/reply JSON Body: { "replyToken": "{{ $('Webhook from Line Message').item.json.body.events[0].replyToken }}", "messages": [ { "type": "text", "text": "收到您的訊息 : {{ $('Webhook from Line Message').item.json.body.events[0].message.text }}" } ] } 2.1. Manual Trigger: Test Workflow Purpose**: Triggers the workflow for testing the push message functionality. Configuration**: No additional setup required. 2.2. Edit Fields Purpose**: Prepares the unique LINE user ID for the push message. Configuration**: Field: line_uid: Uxxxxxxxxxxxx 2.3. Line: Push Message Purpose**: Sends a test message to a specific LINE user. Configuration**: Method: POST URL: https://api.line.me/v2/bot/message/push JSON Body: { "to": "{{ $json.line_uid }}", "messages": [ { "type": "text", "text": "推播測試" } ] } 工作流程描述 此工作流程展示如何使用 LINE Messaging API 處理兩種情境: 使用 reply token 回應使用者的訊息。 使用使用者的 user ID 發送 推播訊息。 主要功能 Webhook 整合:透過 Webhook 接收並處理來自 LINE 的訊息。 條件邏輯:檢查接收到的事件類型是否為訊息並進行處理。 回應訊息:使用 LINE 的 reply token 自動回覆使用者的訊息。 推播訊息:使用 LINE User ID 向指定用戶發送測試訊息。 預先設定 為簡化設定流程,請在 n8n 中建立 Header Auth 憑證: 名稱**:Authorization 值**:Bearer {line token} 此設定將用於認證所有 LINE Messaging API 的請求。 節點設定 1.1. Webhook from LINE Message 用途**:接收來自 LINE Messaging API 的事件。 設定**: HTTP 方法:POST 路徑:{n8n-webhook-page} 1.2. If 條件判斷 用途**:檢查接收到的事件類型是否為 message。 設定**: 條件: {{ $json.body.events[0].type }} 等於 "message" 1.3. Line: Reply with Token 用途**:使用 LINE reply token 回應使用者訊息。 設定**: 方法:POST URL:https://api.line.me/v2/bot/message/reply JSON 主體: { "replyToken": "{{ $('Webhook from Line Message').item.json.body.events[0].replyToken }}", "messages": [ { "type": "text", "text": "收到您的訊息 : {{ $('Webhook from Line Message').item.json.body.events[0].message.text }}" } ] } 2.1. 手動觸發:測試工作流程 用途**:測試推播訊息功能。 設定**:無需額外設定。 2.2. Edit Fields 用途**:準備推播訊息所需的 LINE 使用者 ID。 設定**: 欄位: line_uid:Uxxxxxxxxxxxx 2.3. Line: 推播訊息 用途**:向特定 LINE 使用者發送測試訊息。 設定**: 方法:POST URL:https://api.line.me/v2/bot/message/push JSON 主體: { "to": "{{ $json.line_uid }}", "messages": [ { "type": "text", "text": "推播測試" } ] } 完成示意圖 (Storyboard Example):