Home › Guides › Veo without Google Cloud

Calling Veo without setting up Google Cloud

Updated 2026-10-02

Most developers who search for a Veo API are not trying to learn Google Cloud. They want to send a prompt and get an MP4 back. This page lays out what the direct route asks of you, what changes when you call Veo through a gateway, and the cases where going direct to Google is still the better choice.

What the direct route typically involves

Google exposes Veo through its own platforms, and the exact setup depends on which one you choose and changes over time, so treat the list below as the general shape and confirm the specifics in Google's current documentation. For the enterprise-style route (Vertex AI) you should expect most of the following:

  1. A cloud project with billing attached. Generation is charged to a billing account, so someone with the right permissions has to create and fund it.
  2. The relevant API enabled on that project, plus a region choice, since model availability can differ by region.
  3. Identity and access management. A service account with a role that allows prediction calls, and a way to get credentials to wherever your code runs (key files, workload identity, or application default credentials locally).
  4. Quota awareness. Video generation is heavy, and per-project, per-region limits apply. Raising them can mean a request and a wait.
  5. Long-running operation handling. Video jobs are asynchronous. You start an operation, poll it, and then fetch the result, which may be delivered to storage you also have to configure.

None of this is unreasonable for a team that already lives in that ecosystem. It is real overhead for a small team, a prototype, or a product whose main stack is somewhere else.

What changes with a gateway

Through VideoRouter the integration surface collapses to one API key and one HTTP endpoint. There is no project to create, no service account to mint, and no per-model quota request on your side. Veo is just a model id:

curl https://videorouter.sh/api/v1/videos \
  -H "Authorization: Bearer llmr_sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"model": "google/veo-3.1-fast", "prompt": "a lighthouse beam sweeping across a foggy harbor", "duration_secs": 8}'

The response is a job. Its status moves queued, in_progress, then completed or failed, and you poll GET /videos/{id} until it finishes. Polling is free. The finished job carries the video URL in data[0].url. Errors use the OpenAI-style {"error": {"message", "type", "code"}} envelope, so the error handling you wrote for any other API mostly carries over.

A side-by-side comparison

ConcernGoing directThrough a gateway key
Account setupCloud project, billing account, enabled APIs, IAMOne account, one prepaid balance
Credentials in your codeService account or application default credentialsA single bearer key you can scope and revoke
QuotasPer-project and per-region, managed with the providerPer-key rate limits and optional monthly spend cap on your side
HostsOne (Google)Google plus other hosts that resell Veo, with automatic failover
Switching to another video modelA different SDK and auth pathChange the model string
BillingCloud invoiceCharged once at job creation from requested seconds, plus a 2% platform fee; failed-upstream jobs are not billed

The part people miss: Google is still one of the hosts

Skipping the cloud setup does not mean skipping Google's infrastructure. Google appears as one host among several on the Veo model pages, and the others resell the same model at their own prices. Unpinned requests go to the cheapest healthy host and fail over down the list if a submission is rejected. If you want a particular host, add it to the model id, for example google/veo-3.1/google. Note that this suffix is a soft preference: the platform tries that host first and still falls back to the rest of the pool if it errors. For a hard pin with no fallback, use "provider": {"only": ["google"], "allow_fallbacks": false}. The model pages list every host and the live price per resolution, and the pricing page shows the spread.

When going direct is still right

If none of those apply, the gateway route costs you less time and still lets you point at Google when you want to.

Practical notes before you ship

The quickstart has a complete create-poll-download script, and you can create a key at videorouter.sh/signup.

Frequently asked questions

Do I need a Google Cloud project to call Veo through VideoRouter?

No. You use a single VideoRouter API key against https://videorouter.sh/api/v1/videos. Google is one of several hosts the request can be routed to, but you never configure it yourself.

Can I still force the request to go to Google's own infrastructure?

Yes. Use google/veo-3.1/google to prefer that host, or provider.only with allow_fallbacks: false for a hard pin with no failover.

Is it the same Veo model as calling Google directly?

Requests are served by Google or by third-party hosts reselling the same Veo 3.1 family. The model pages list each host.

How is it billed compared with a cloud invoice?

The full cost is charged once at job creation from the requested duration, plus a 2% platform fee. Polling is free and jobs that fail upstream are not billed.

Keep reading

Using Veo is one part of the job.

VideoRouter puts it next to dozens of other video and image models behind one API key, so you can compare providers, prices and fail over automatically. Compare providers on VideoRouter →