How to Generate AI Video with Veo 3.1 via the Google Flow API Useapi.net has launched a third-party Google Flow API that enables developers to generate AI video with Veo 3.1 via a single curl command. The service uses a flat subscription model instead of per-second billing, offering significant cost savings compared to the official Gemini API. Developers can choose from multiple Veo models and image generation tools, with pricing starting at $15 per month. Veo 3.1, Google's flagship video model, runs from a single curl through useapi.net. You drive your own The official Gemini API and Vertex meter Veo per second of output. This third-party Google Flow API https://useapi.net/docs/api-google-flow-v1 runs on a flat subscription https://useapi.net/docs/subscription instead — you spend your normal Flow credits plus one monthly fee for API access, far cheaper per clip. Below: the models you get, the price gap versus the official API, then the two-call workflow and a runnable batch script. Pick a model per request with the model field default veo-3.1-fast . Credit costs come from Google's official Flow credits table https://support.google.com/flow/answer/16526234 : | Model id | Tier / speed | Durations | Credits per generation | |---|---|---|---| veo-3.1-lite | Cheapest Veo | 4s, 6s, 8s | 10 Non-Ultra · 5 Ultra | veo-3.1-lite-low-priority | Lite, lower priority | 4s, 6s, 8s | 0 — Ultra $199 only | veo-3.1-fast default | Fast Veo | 4s, 6s, 8s | 20 Non-Ultra · 10 Ultra | veo-3.1-quality | Highest-quality Veo | 8s only | 100 | omni-flash | Gemini Omni Flash, audio-native | 4s, 6s, 8s, 10s | 15 / 20 / 25 / 30 by length | Notes from the overview https://useapi.net/docs/api-google-flow-v1 : 4s / 6s are Ultra-only on Veo, veo-3.1-quality is 8s only, veo-3.1-lite-low-priority costs 0 credits but is available only to Google AI Ultra $199 subscribers, and 10s clips are omni-flash only. Google Flow can also generate stills with Imagen 4 and the Nano Banana models via the separate POST /images https://useapi.net/docs/api-google-flow-v1/post-google-flow-images endpoint. You spend your Google AI plan's Flow credits as usual, plus a flat $15/month https://useapi.net/docs/subscription to useapi.net for API access to every supported service — no per-call surcharge. Third-party Google Flow API https://useapi.net/docs/api-google-flow-v1 by useapi.net https://useapi.net/ vs. the official Gemini API https://ai.google.dev/gemini-api/docs/pricing — drive your own Google Flow subscription instead of metered, per-call API billing: | Model | Official Gemini API | useapi.net Flow Pro | useapi.net Flow Ultra | |---|---|---|---| | Veo 3.1 Fast — 8s clip | $0.80 | ~$0.40 | ~$0.10 | | Veo 3.1 Quality — 8s clip | $3.20 | ~$2.00 | ~$1.00 | | Veo 3.1 Lite — 8s clip | $0.40 | ~$0.20 | ~$0.05 | | Veo 3.1 Lite, lower priority | — | — | $0 Ultra $199 | | Gemini Omni Flash — 8s clip | — Flow only | ~$0.50 | ~$0.25 | | Nano Banana Pro — per image | $0.134 | included | included | | Nano Banana — per image | $0.039 | included | included | | Imagen 4 — per image | metered | included | included | Expected daily output — Ultra $199/mo plan. Daily averages observed on top real accounts. These are expected, not guaranteed: Google governs the underlying Flow allowances and they vary with demand. | Free workload no Flow credits spent | Avg generations / day | |---|---| | Veo 3.1 Lite — lower priority video | ~1,000 | | Images — Nano Banana, Nano Banana Pro, Imagen 4 | up to ~500 | Averages from the busiest real accounts — not guarantees. They are set by Google's own allowances and fluctuate with demand. Applies only to the free lower-priority video queue and image generation. Credit-metered models Veo 3.1 Fast / Quality and Gemini Omni Flash are not shown here — their volume is bounded by your plan's monthly Flow credits see the credit table https://useapi.net/docs/api-google-flow-v1 , not a free allowance. Veo is billed per second on the Gemini API an 8-second 720p clip shown and images are priced per image. Through useapi.net you spend your own Flow plan credits and pay a flat $15/month https://useapi.net/docs/subscription — image generation is included on any Google AI plan, and there is no Google Cloud project, API key, or per-call metering. Full per-tier credit allowances and the per-model cost breakdown live on the Google Flow overview https://useapi.net/docs/api-google-flow-v1 . See the setup guide https://useapi.net/docs/start-here/setup-google-flow to connect your account. You need a useapi.net API token https://useapi.net/docs/start-here/setup-useapi and a connected Google Flow account https://useapi.net/docs/start-here/setup-google-flow . Generation is asynchronous: pass async: true and the create call returns a jobid immediately, then you poll until the video is ready. POST https://api.useapi.net/v1/google-flow/videos : curl -X POST "https://api.useapi.net/v1/google-flow/videos" \ -H "Authorization: Bearer $USEAPI TOKEN" \ -H "Content-Type: application/json" \ -d '{ "prompt": "A serene mountain landscape at sunset, camera slowly panning right", "model": "veo-3.1-fast", "aspectRatio": "landscape", "duration": 8, "async": true }' In async mode the response returns immediately with 201 Created , a lowercase jobid , and status: "created" : { "jobid": "j1731859234567v-u12345-email:jo @gmail.com-bot:google-flow", "type": "video", "status": "created", "created": "2026-06-15T12:34:56.789Z", "request": { "async": true, "prompt": "A serene mountain landscape at sunset, camera slowly panning right", "model": "veo-3.1-fast", "aspectRatio": "landscape", "duration": 8 } } GET https://api.useapi.net/v1/google-flow/jobs/{jobId} : curl "https://api.useapi.net/v1/google-flow/jobs/{jobId}" \ -H "Authorization: Bearer $USEAPI TOKEN" status moves through created → started → completed . When it reaches completed , the finished MP4 is in response.media .videoUrl a single prompt with count 1 returns one entry per clip : { "jobid": "j1731859234567v-...", "type": "video", "status": "completed", "response": { "media": { "mediaGenerationId": "user:12345-email:6a6f...-video:a1d95d21-...", "videoUrl": "https://flow-content.google/video/a1d95d21-...?Expires=...", "thumbnailUrl": "https://flow-content.google/image/a1d95d21-...?Expires=..." } , "remainingCredits": 18760 } } Veo 3.1 typically finishes in 60–180 seconds depending on model and mode. The signed videoUrl is valid for about 24 hours, so download promptly. Prefer not to poll? Pass a replyUrl in the create body to receive a webhook callback when the job completes. Veo takes image inputs two different ways. Upload each image first with POST /assets/ email https://useapi.net/docs/api-google-flow-v1/post-google-flow-assets-email raw bytes, an image Content-Type , PNG/JPEG/WebP up to 20 MB . The upload response nests the id at mediaGenerationId.mediaGenerationId — that nested string is what you pass back. When you supply any image input you can omit email : the request routes to the account where the image was uploaded.Your image becomes a literal frame of the clip. Pass it as startImage to start from that frame: curl -X POST "https://api.useapi.net/v1/google-flow/videos" \ -H "Authorization: Bearer $USEAPI TOKEN" \ -H "Content-Type: application/json" \ -d '{ "prompt": "Brave Captain Cat chasing away the pirates ", "model": "veo-3.1-fast", "aspectRatio": "portrait", "startImage": "user:12345-email:6a6f...-image:ff9aa5cc-...", "async": true }' Add endImage a second uploaded reference id to pin the last frame so Veo generates the transition between the two. endImage requires startImage — end-frame-only is not supported. On omni-flash , only startImage is accepted. Your images guide the whole clip — subject, character, or style — rather than a specific frame. Pass referenceImage 1 through referenceImage 3 Veo accepts up to 3, on 8-second clips only, and not on veo-3.1-quality . R2V cannot be combined with startImage / endImage : curl -X POST "https://api.useapi.net/v1/google-flow/videos" \ -H "Authorization: Bearer $USEAPI TOKEN" \ -H "Content-Type: application/json" \ -d '{ "prompt": "A lady says to the dog, \"Say meow meow meow.\" The dog looks at the lady with a surprised, frustrated look and woofs in a human voice, \"What the heck lady? \"", "model": "veo-3.1-fast", "aspectRatio": "portrait", "referenceImage 1": "user:12345-email:6a6f...-image:abcde-...", "async": true }' Mention each reference inline with an @referenceImage N marker in the prompt, add a referenceAudio 1 a system voice name like Zephyr for narration, or pass a reusable character https://useapi.net/docs/api-google-flow-v1/post-google-flow-characters as character 1 it drives the same R2V mode and counts toward the 3-reference budget . Omni Flash takes references further — up to 7, plus video-to-video editing and synced voices — see the Omni Flash tutorial https://useapi.net/docs/articles/omni-flash-bash . Finding the right shot takes many attempts, and running them by hand is tedious. The Node.js script reads a list of prompts from prompts.json https://github.com/useapi/google-flow-api/blob/main/veo-video/prompts.json , uploads any start/end frame images, submits each job in async mode, then polls and downloads every finished MP4 — so you can queue a batch and come back to the winners. You need Node.js https://nodejs.org v21 or newer. Put prompts.json and google-flow.mjs https://github.com/useapi/google-flow-api/blob/main/veo-video/google-flow.mjs in the same folder and run node ./google-flow.mjs API TOKEN EMAIL , where API TOKEN is your useapi.net EMAIL is your connected health field before submitting.Prefer to clone and run it locally? The complete google-flow.mjs and prompts.json are on GitHub in useapi/google-flow-api https://github.com/useapi/google-flow-api/tree/main/veo-video . Real Veo 3.1 clips generated through this Google Flow API, taken straight from our release notes. From Google Flow API v1: Initial Release https://useapi.net/blog/251117 . Animated from a Nano Banana still passed as startImage . From Veo 3.1 Lite and Voice Narration https://useapi.net/blog/260403 . A reference-to-video generation with the referenceAudio 1: "Zephyr" preset adding spoken dialogue. From Veo 3.1 Portrait R2V https://useapi.net/blog/260113 . Portrait R2V from a single reference image. veo-3.1-quality is the highest-fidelity model, veo-3.1-fast is the default balance, and veo-3.1-lite is the cheapest, with veo-3.1-lite-low-priority available to Ultra subscribers at lower scheduling priority. See Supported models above for per-model credits and durations. email mediaGenerationId.mediaGenerationId as startImage — and optionally endImage for a first→last transition Veo only, requires startImage . See Image-to-video above. captchaToken and relies on this automatic solving.Visit our Discord Server https://discord.gg/w28uK3cnmF or Telegram Channel https://t.me/use api for any support questions and concerns. We regularly post guides and tutorials on the YouTube Channel https://www.youtube.com/@midjourneyapi . Check our GitHub repo https://github.com/useapi/google-flow-api with code examples.