This workflow corresponds to n8n.io template #16890 — we link there as the canonical source.
This workflow follows the Form Trigger → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "WTnNBTsGT8of5zEG",
"name": "Veo3-1",
"tags": [],
"nodes": [
{
"id": "ae7b5b31-da89-4e72-b3a4-abdfa69dfcf8",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-400,
-800
],
"parameters": {
"width": 880,
"height": 1968,
"content": "## Generate AI Videos with Google Veo 3.1 API on Pollo API\n\n### Overview\nAutomate the creation of cinematic, publish-ready AI videos using [Pollo API](https://api.pollo.ai)'s Veo 3.1 API through this intuitive n8n workflow. Unlike standard AI video generators that rely on guesswork, Veo 3.1 API offers advanced frame-to-frame control and native audio synchronization, making it the ultimate engine for automated content pipelines.\n\n**Key Benefits:**\n- \ud83c\udfac Storyboard-level control with up to 3 reference images per generation.\n- \ud83c\udfb5 Native audio sync directly within the video output.\n- \u2702\ufe0f Production-ready results with zero editing required.\n- \ud83d\udcb0 Standard Veo 3.1 generation starts at just $0.80 for 4s video at 720p, 1080p, or 4K.\n\n### Perfect for\nAutomated e-commerce product showcases, batch UGC video ads, narrative storyboarding, social media content pipelines, and marketing teams that need high-quality AI videos with consistent visuals and synchronized audio.\n\n### Prerequisites\n- [Pollo API account](https://api.pollo.ai) and API key ([Get your API key here](https://api.pollo.ai/api-keys)).\n- Active n8n instance with form submission capabilities.\n- AI prompts and reference image URLs for video generation.\n\n### Quick Setup\n\n#### 1. **Get API Key**\nRegister at [api.pollo.ai](https://api.pollo.ai) and generate your API key.\n\n#### 2. **Configure Form Fields**\nSet up these fields in your \"On Form Submission\" node:\n- **`prompt`** (Required): Detailed text description of the video you want to generate.\n- **`image_url`** (Optional): Reference image URLs for video generation (up to 3 images, separate multiple URLs with commas).\n- **`model_path`** (Required): Enter `google/veo3-1` to route the request to the Veo 3.1 model.\n- **`api_key`** (Required): Your Pollo AI API key for authentication.\n\n#### 3. **Test & Use**\n- Execute the workflow.\n- Access the generated form URL.\n- Fill in your details and submit.\n- Wait for processing.\n- Results will be displayed automatically.\n\n### Usage Tips\n\n**3-Image Strategy for Brands:**\nPass your product close-up as Image 1, a lifestyle context as Image 2, and your brand logo or end-card as Image 3. The API will seamlessly blend them into a structured commercial.\n\n**Better Prompts:**\nInclude style (realistic, anime, cyberpunk), composition (close-up, wide shot), lighting (dramatic, soft), and mood (cheerful, mysterious).\n\n**Example:** \"Cinematic tracking shot of a sleek sports car driving through a neon-lit cyberpunk city, photorealistic, 4k resolution, dynamic motion.\"\n\n**Common Uses:**\n- Automated e-commerce product videos\n- UGC-style video ads\n- Social media video campaigns\n- Story-driven brand content\n- Product launch videos\n- Narrative marketing campaigns\n\n### Troubleshooting\n- **API Key Invalid**: Ensure your API key is correct and active.\n- **Generation Fails**: Check whether your reference image URLs are publicly accessible and not behind a login. Also, make sure your prompt follows safety guidelines.\n\n**Keywords:** Veo 3.1 API, Pollo API, multi-image video generation, Text-to-Video, Image-to-Video, automated video ads, e-commerce video, native audio sync, n8n template, AI video workflow\n "
},
"typeVersion": 1
},
{
"id": "aa430bdd-2121-46ff-bfd9-0a5d0da41b18",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
560,
0
],
"parameters": {
"color": 7,
"width": 416,
"height": 320,
"content": "## Capture and submit prompt\n\nStarts the workflow from a form submission and sends the entered prompt and generation settings to the Pollo video generation API."
},
"typeVersion": 1
},
{
"id": "fb6b604a-f97a-408b-92e6-03ccee322afc",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1024,
0
],
"parameters": {
"color": 7,
"width": 400,
"height": 544,
"content": "## Poll generation status\n\nWaits for Pollo to process the video, queries the task status, and loops back to wait again until the generation is complete."
},
"typeVersion": 1
},
{
"id": "69baf2c4-d7e2-4014-998c-e582dc3168bb",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1472,
160
],
"parameters": {
"color": 7,
"height": 368,
"content": "## Display generated video\n\nFormats the completed generation response for output, including task ID, status, video URL, and media type."
},
"typeVersion": 1
},
{
"id": "11709db2-d9d8-4109-bb64-4fb6148444bb",
"name": "When Prompt Submitted",
"type": "n8n-nodes-base.formTrigger",
"position": [
608,
160
],
"parameters": {
"options": {},
"formTitle": "Pollo AI video generator",
"formFields": {
"values": [
{
"fieldLabel": "prompt"
},
{
"fieldLabel": "image_url"
},
{
"fieldLabel": "model_path",
"placeholder": "google/veo3-1"
},
{
"fieldLabel": "api_key",
"placeholder": "pollo_xxxxxxxx"
}
]
},
"formDescription": "Fill in the following information to generate your video with the Pollo API"
},
"typeVersion": 2.2
},
{
"id": "7d128491-1e71-4c51-9ea1-8237b77cd067",
"name": "Post to Pollo API",
"type": "n8n-nodes-base.httpRequest",
"position": [
832,
160
],
"parameters": {
"url": "=https://pollo.ai/api/platform/generation/{{$json.model_path}}",
"method": "POST",
"options": {},
"jsonBody": "={{ JSON.stringify({ input: $json.image_url ? { prompt: $json.prompt, image: $json.image_url } : { prompt: $json.prompt } }) }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "x-api-key",
"value": "={{$json.api_key}}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "349fa154-dcb6-4189-a9a2-272baa5a104f",
"name": "Wait 10 Seconds",
"type": "n8n-nodes-base.wait",
"position": [
1072,
160
],
"parameters": {
"amount": 10
},
"typeVersion": 1.1
},
{
"id": "38c58597-e666-43bb-94ac-1b1650b86620",
"name": "Fetch Generation Status",
"type": "n8n-nodes-base.httpRequest",
"position": [
1280,
160
],
"parameters": {
"url": "=https://pollo.ai/api/platform/generation/{{$node[\"Post to Pollo API\"].json[\"data\"][\"taskId\"]}}/status",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "x-api-key",
"value": "={{$node[\"When Prompt Submitted\"].json[\"api_key\"]}}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "06647b5f-3b43-48fe-9fe3-4d5e5e8ed6ad",
"name": "If Generation Complete",
"type": "n8n-nodes-base.if",
"position": [
1120,
384
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "66666666-+123456789001",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.generations[0].status }}",
"rightValue": "succeed"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "ce2674d0-e0a8-4add-8a83-2f769d3d7518",
"name": "Set Result Fields",
"type": "n8n-nodes-base.set",
"position": [
1520,
368
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "77777777-+123456789001",
"name": "taskId",
"type": "string",
"value": "={{ $json.data.taskId }}"
},
{
"id": "77777777-+123456789002",
"name": "status",
"type": "string",
"value": "={{ $json.data.generations[0].status }}"
},
{
"id": "77777777-+123456789003",
"name": "url",
"type": "string",
"value": "={{ $json.data.generations[0].url }}"
},
{
"id": "77777777-+123456789004",
"name": "mediaType",
"type": "string",
"value": "={{ $json.data.generations[0].mediaType }}"
},
{
"id": "77777777-+123456789005",
"name": "credit",
"type": "number",
"value": "={{ $json.data.credit }}"
}
]
}
},
"typeVersion": 3.4
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "08bb72aa-eef0-4c13-bbcd-25420ba0367e",
"nodeGroups": [],
"connections": {
"Wait 10 Seconds": {
"main": [
[
{
"node": "Fetch Generation Status",
"type": "main",
"index": 0
}
]
]
},
"Post to Pollo API": {
"main": [
[
{
"node": "Wait 10 Seconds",
"type": "main",
"index": 0
}
]
]
},
"When Prompt Submitted": {
"main": [
[
{
"node": "Post to Pollo API",
"type": "main",
"index": 0
}
]
]
},
"If Generation Complete": {
"main": [
[
{
"node": "Set Result Fields",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 10 Seconds",
"type": "main",
"index": 0
}
]
]
},
"Fetch Generation Status": {
"main": [
[
{
"node": "If Generation Complete",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow collects a video prompt (and optional reference image URL) via an n8n form, sends a generation request to the Pollo API for Google Veo 3.1, polls the task status until it succeeds, and returns the finished video URL and related metadata. Receives a form submission…
Source: https://n8n.io/workflows/16890/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow allows you to import any workflow from a file or another n8n instance and map the credentials easily. A multi-form setup guides you through the entire process At the beginning you have t
[n8n] Advanced URL Parsing and Shortening Workflow - Switchy.io Integration. Uses splitInBatches, stickyNote, httpRequest, html. Event-driven trigger; 56 nodes.
[](https://youtu.be/c7yCZhmMjtI)
LDX hub All Services Demo. Uses formTrigger, httpRequest, form, n8n-nodes-ldxhub. Event-driven trigger; 53 nodes.
This workflow provides a single n8n form that routes to five LDXhub services (StructFlow, RefineLoop, RenderOCR, CastDoc, and ExtractDoc) to run one-off document processing jobs and return the generat