AutomationFlowsWeb Scraping › Generate Google Veo 3.1 AI Videos From Form Prompts with Pollo API

Generate Google Veo 3.1 AI Videos From Form Prompts with Pollo API

ByPolloAI @polloai on n8n.io

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…

Event trigger★★★★☆ complexity10 nodesForm TriggerHTTP Request
Web Scraping Trigger: Event Nodes: 10 Complexity: ★★★★☆ Added:

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 →

Download .json
{
  "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
          }
        ]
      ]
    }
  }
}
Pro

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 →

More Web Scraping workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Web Scraping

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

Execute Command, Read Write File, HTTP Request +3
Web Scraping

[n8n] Advanced URL Parsing and Shortening Workflow - Switchy.io Integration. Uses splitInBatches, stickyNote, httpRequest, html. Event-driven trigger; 56 nodes.

HTTP Request, GitHub, Stop And Error +1
Web Scraping

[](https://youtu.be/c7yCZhmMjtI)

HTTP Request, GitHub, Stop And Error +1
Web Scraping

LDX hub All Services Demo. Uses formTrigger, httpRequest, form, n8n-nodes-ldxhub. Event-driven trigger; 53 nodes.

Form Trigger, HTTP Request, Form +1
Web Scraping

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

Form Trigger, HTTP Request, Form +1