This workflow corresponds to n8n.io template #17978 — 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": "LH7vgTUwjhSkVxDB",
"name": "Create metaphor-driven video ads with Veo 3 via Pollo API",
"tags": [],
"nodes": [
{
"id": "92b33e4b-d3a1-464f-a597-bf9ac6f4a05a",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
580,
-880
],
"parameters": {
"width": 880,
"height": 1968,
"content": "## Create metaphor-driven video ads with Veo 3 via Pollo API\n\n\n### Overview\nAutomate the creation of cinematic AI video ads using [Pollo API](https://api.pollo.ai)'s [Veo 3 API](https://docs.pollo.ai/m/google/veo3) through this intuitive n8n workflow. Veo 3 is well suited for product concepts that need to feel symbolic, sensory, and emotionally clear, pairing cinematic visuals with native dialogue, sound effects, and background audio.\n\n\n**Key Benefits:**\n- \ud83c\udfad Metaphor-led product storytelling that turns abstract benefits into memorable visual scenes.\n- \ud83d\udd0a Native audio generation with dialogue, sound effects, and ambient background noise.\n- \ud83c\udfa5 Strong prompt understanding for camera movement, scene mood, product action, and ad pacing.\n- \u23f1\ufe0f 8-second video generation for fast product concept testing inside repeatable n8n workflows.\n\n\n### Perfect for\nE-commerce marketers, product teams, ad agencies, creative strategists, startup founders, and growth teams that need emotionally sharp video ad concepts from simple product ideas.\n\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 optional product, packaging, or style-reference image URLs for generation.\n\n\n### Quick Setup\n\n\n#### 1. **Get API Key**\nRegister at [api.pollo.ai](https://api.pollo.ai) and generate your API key.\n\n\n#### 2. **Configure Form Fields**\nSet up these fields in your \"On Form Submission\" node:\n- **`prompt`** (Required): Detailed text description of the product concept, metaphor, scene, camera movement, and audio mood you want in the video ad.\n- **`image_url`** (Optional): Publicly accessible product, packaging, or reference image URL for image-to-video or reference-led generation.\n- **`model_path`** (Required): Enter `google/veo3` to route the request to the Veo 3 model.\n- **`api_key`** (Required): Your Pollo AI API key for authentication.\n\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\n### Usage Tips\n\n\n**Metaphor First, Product Second:**\nStart with the feeling or transformation the product creates, then express it as a visual metaphor. Let the product appear as the reason the scene shifts, resolves, or becomes easier.\n\n\n**Better Prompts:**\nInclude the product type, customer pain point, central metaphor, visual transformation, camera direction, sound design, and final product moment.\n\n\n**Example:** \"An 8-second cinematic ad for noise-canceling headphones: a commuter stands in a chaotic subway as the surrounding noise becomes sharp glass fragments floating in the air. When they put on the headphones, the glass melts into soft blue light, the camera slowly pushes in, ambient noise fades into calm music, and the final shot shows the headphones glowing subtly.\"\n\n\n**Common Uses:**\n- Product benefit metaphor ads\n- E-commerce concept video testing\n- Social media launch teasers\n- Founder-led product pitch visuals\n- Brand moodboard-to-video experiments\n- Paid ad creative variations\n\n\n### Troubleshooting\n- **API Key Invalid**: Ensure your API key is correct and active.\n- **Generation Fails**: Check whether your product or reference image URLs are publicly accessible and not behind a login. Also, make sure your prompt follows safety guidelines.\n\n\n**Keywords:** Veo 3 API, Pollo API, Text-to-Video, Image-to-Video, automated video ads, e-commerce video, Reference-to-Video, AI video ads, AI video with audio, n8n template, AI workflow"
},
"typeVersion": 1
},
{
"id": "a97b8f0e-a633-4672-bbff-f5ed8062bb24",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1540,
-80
],
"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": "a84055fb-8b39-4fbd-880d-b785667598fe",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
2020,
-80
],
"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": "29e72b6e-d809-4c38-8581-891e452077cd",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2460,
100
],
"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": "f52c60de-248c-41e3-878d-dfa7c1e68cf5",
"name": "When Prompt Submitted",
"type": "n8n-nodes-base.formTrigger",
"position": [
1600,
100
],
"parameters": {
"options": {},
"formTitle": "Pollo AI video generator",
"formFields": {
"values": [
{
"fieldLabel": "prompt"
},
{
"fieldLabel": "image_url"
},
{
"fieldLabel": "model_path",
"placeholder": "google/veo3"
},
{
"fieldLabel": "api_key",
"placeholder": "pollo_xxxxxxxx"
}
]
},
"formDescription": "Fill in the following information to generate your video with the Pollo API"
},
"typeVersion": 2.2
},
{
"id": "9e0b117b-af90-4241-9e90-52a770bd5e83",
"name": "Post to Pollo API",
"type": "n8n-nodes-base.httpRequest",
"position": [
1820,
100
],
"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": "df370be5-7d28-458f-bfcc-1bef48954a26",
"name": "Wait 10 Seconds",
"type": "n8n-nodes-base.wait",
"position": [
2060,
100
],
"parameters": {
"amount": 10
},
"typeVersion": 1.1
},
{
"id": "4f9e68af-4325-477d-a489-ac7b5ad0d002",
"name": "Fetch Generation Status",
"type": "n8n-nodes-base.httpRequest",
"position": [
2260,
100
],
"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": "0d26319d-7ce6-4cf3-9848-c79e8cd7863b",
"name": "If Generation Complete",
"type": "n8n-nodes-base.if",
"position": [
2100,
320
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "or",
"conditions": [
{
"id": "66666666-+123456789001",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.generations[0].status }}",
"rightValue": "succeed"
},
{
"id": "41a1d076-e578-466a-b7bf-d4b9941c0e5a",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.generations[0].status }}",
"rightValue": "failed"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "894b2d88-4b0a-4812-b0ad-157097cc953e",
"name": "Set Result Fields",
"type": "n8n-nodes-base.set",
"position": [
2500,
300
],
"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.generations[0].failMsg || '').includes('Credits refunded') ? 0 : $json.data.credit }}"
}
]
}
},
"typeVersion": 3.4
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "4810de90-274e-4b1b-b02b-3586bf5e3a3b",
"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-ad prompt via an n8n form and submits it to Pollo API’s Google Veo 3 generation endpoint (optionally with an image reference), then polls Pollo for completion and returns the final task status and video URL. Receives a submission from an n8n form…
Source: https://n8n.io/workflows/17978/ — 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