Google · Video · API

Veo API — ruble pricing and a 5-minute setup

Veo API (Google) with ruble billing: Veo 3 and 3.1 Fast / Quality / Lite through one Zerocoder key. Per-clip pricing, native audio, samples, limits, refunds.

What Veo is and where it's strong

Veo is Google's video generation family: you send a text prompt (and, for some clips, a reference frame) and get back a short video clip. The family covers several tiers, from a lightweight fast option to a quality-first tier, plus an extend mode for lengthening an existing clip. Pick a tier based on how much detail and camera complexity your scene needs — see GET /v1/models for the full list and current prices.

Good fits

  • Short marketing and social clips built from a text brief
  • Turning a single reference image into a moving scene
  • Extending or continuing a clip that's already been generated

What Zerocoder adds

One API key and one ruble wallet cover every Veo model listed above — no separate accounts per model. Top up the wallet with a Russian card or a company invoice directly in the cabinet; no VPN or foreign card is needed. Docs, examples and your keys live in the Zerocoder cabinet, and the HTTP contract is close enough to the usual video-generation pattern that existing SDK/HTTP client code needs only small changes to point at the new endpoint.

How a request and response work

You call POST /v1/videos with the model id, your prompt, the clip length in seconds, an aspect or size, and optionally a reference image URL for image-to-video. The call returns a task id with status queued and the charge already deducted from your balance. You then poll GET /v1/videos with that id every few seconds: status moves to processing and then to completed with a video URL, or to failed, in which case the charge is refunded automatically.

Models and prices

The live GET /v1/models price list in rubles and dollars. Where we are cheaper, the vendor's official price for the same unit is struck through. Endpoint: /v1/videos

Model prices in rubles and dollars; where we are cheaper, the vendor's official price for the same unit is struck through
ModelPriceUnitDiscount
Veo 3.1 Fastrecommendedveo-3.1-fast · Google
Official price: 54 ₽, Zerocoder price: 42 ₽$0.467per clipofficial: $0.12/s × 5 s · 1080p-22%
Veo 3.1 Qualityveo-3.1-quality · Google
Official price: 180 ₽, Zerocoder price: 78 ₽$0.867per clipofficial: $0.40/s × 5 s · 1080p-56%
Veo 3.1 Liteveo-3.1-lite · Google
Official price: 36 ₽, Zerocoder price: 24 ₽$0.267per clipofficial: $0.08/s × 5 s · 1080p-33%
Veo 3 Fastveo-3-fast · Googlealso: gemini-video-std
42 ₽$0.467per clip—
Veo 3 Qualityveo-3-quality · Google
78 ₽$0.867per clip—
Veo Extendveo-extend · Google
42 ₽$0.467per clip—
Struck-through prices are the vendors’ official rates from their own pages: Google — checked 4 October 2026. Dollars at the internal rate 1 $ = 90 ₽; the Zerocoder price includes ruble billing and no-VPN access. Comparison assumptions:
  • per-clip prices: the official figure is the per-second price × 5 s (the API default for seconds); if the clip is longer, the official price is higher and the saving is larger than shown
  • video — the official tier of the resolution shown in the row (1080p): by default our API call renders at that resolution or higher, and where the vendor has no matching tier the cheaper one is used, so the saving is understated, not overstated

Cost calculator

Pick a model and a volume — the calculator uses the same formulas as API billing.

per clip42 ₽ $0.467
per month · 10420 ₽ $4.67

Prices from GET /v1/models, internal exchange rate. Failed generations are not charged.

  1. Get a keyin the API dashboard
  2. Top up the walletin rubles: card, SBP or invoice
  3. Make the callPOST /v1/videos, model veo‑3.1‑fast
First request

Connect the Veo API: a key, one POST and a status poll

POST /v1/videos starts the render and returns the job id and price_rub right away; GET /v1/videos?id=… returns the status and the clip URL. If the render fails, the money goes back to the balance automatically.

Base URL
https://zerocoder.com/api/v1

Key — in the x-api-key or Authorization: Bearer header

Model in the samples — veo-3.1-fast; any text‑to‑video or image‑to‑video model from the table works

import time, requests API = "https://zerocoder.com/api/v1"H = {"x-api-key": "zc-sk-…"} r = requests.post(f"{API}/videos", headers=H, json={    "model": "veo-3.1-fast",    "prompt": "Drone shot over a foggy forest at dawn",    "seconds": 5,      # 4–10    "aspect": "16:9",  # image-to-video: "image": "https://…"})r.raise_for_status()job = r.json()  # status "queued", price_rub charged st = {}while st.get("status") not in ("completed", "failed"):    time.sleep(4)    r = requests.get(f"{API}/videos", headers=H,                     params={"id": job["id"]})    st = r.json() if r.ok else {}  # 502 → poll againprint(st)  # "url", or "refunded": true on failure
const API = "https://zerocoder.com/api/v1";const H = {  "x-api-key": "zc-sk-…",  "content-type": "application/json",}; const res = await fetch(`${API}/videos`, {  method: "POST", headers: H,  body: JSON.stringify({    model: "veo-3.1-fast", seconds: 5, aspect: "16:9",    prompt: "Drone shot over a foggy forest at dawn",  }), // image-to-video: add image: "https://…"});const job = await res.json(); // "queued", price_rubif (!res.ok) throw new Error(job.error.message); const poll = `${API}/videos?id=${job.id}`;let st = {};while (st.status !== "completed" && st.status !== "failed") {  await new Promise((go) => setTimeout(go, 4000));  const r = await fetch(poll, { headers: H });  st = r.ok ? await r.json() : {}; // 502 → poll again}console.log(st); // url, or refunded: true
# 1) start the render: price_rub is charged up front,#    refunded if the render failscurl https://zerocoder.com/api/v1/videos \  -H "x-api-key: zc-sk-…" \  -H "content-type: application/json" \  -d '{"model": "veo-3.1-fast", "seconds": 5,       "aspect": "16:9",       "prompt": "Drone shot over a foggy forest at dawn"}'# → {"id":"…","object":"video","status":"queued",#    "seconds":5,"price_rub":…,"balance_rub":…,#    "poll":"/api/v1/videos?id=…"}# image-to-video: add "image": "https://…/frame.jpg"
# 2) poll every few seconds: "completed" or "failed"curl "https://zerocoder.com/api/v1/videos?id=…" \  -H "x-api-key: zc-sk-…"# rendering → "status": "queued" | "running" | …# done      → "status": "completed", "url": "https://…"# failed    → "status": "failed", "refunded": true# HTTP 502 "Status check failed" → just poll again;#   a render that never finishes is refunded
// Live price comparisonveo-3.1-fast · per clip
  • Zerocoder-22%$0.47
  • Official API$0.60

Google list price (Veo 3.1 Fast, 1080p), per-second price × 5 s (the API default); checked 4 October 2026

How to connect the Veo API: first request in 5 minutes

From a key to production — six steps based on the real /api/v1 contracts. Each step links to the relevant docs section.

  1. 1

    Get a key in your account

    Sign up, open the API section of your account, top up the balance in rubles and create a zc-sk-… key. One key unlocks Veo and every other model in the catalogue.

    Read more →
  2. 2

    Send the first request

    POST /v1/videos with model, prompt, seconds and aspect: the response carries the job id, status queued and price_rub — the amount is charged before the Veo render starts.

    Read more →
  3. 3

    Poll the job status

    GET /v1/videos?id=… every few seconds until status is completed (url field) or failed (refunded: true — the money is already back on the balance). The file URL is temporary — download right away.

    Read more →
  4. 4

    Handle limits and errors

    30 requests per minute per key: on 429 wait and retry with a growing pause; 402 — top up the balance; 400 — check model against GET /v1/models. Failed generations are not charged, so retrying is safe.

    Read more →
  5. 5

    Watch the budget

    GET /v1/balance returns the balance and 30-day spend; every call's price comes back in the response — write it to your logs and set an alert threshold in your own monitoring.

    Read more →
  6. 6

    Ship to production

    Keep the key in server secrets, never in the frontend. For high Veo volumes contact us — the limit is raised individually and companies can pay by invoice. Check the observed stability on the status page.

    Read more →

No code

Any tool that can make an HTTP request can call our API: one POST with the x-api-key header.
HTTP Requestn8n

HTTP Request node: POST to the /api/v1 endpoint, x-api-key header and a JSON body built from workflow fields. For video add a Wait node and a second HTTP Request on GET ?id= in a loop until completed.

HTTP → Make a requestMake

HTTP “Make a request” module: POST, Body type JSON, x-api-key header. The response is parsed automatically — the image url or the answer text flows into the next modules.

Webhooks by ZapierZapier

Webhooks by Zapier → Custom Request action: POST, Data — JSON with model and prompt, Headers — x-api-key. Response fields are available to the following Zap steps.

Apps ScriptGoogle Sheets

In Apps Script use UrlFetchApp.fetch with method post, contentType application/json and a payload from the cells: prompts in one column, results written to the next one.

any bot frameworkTelegram bot

A bot on aiogram, grammY or Telegraf calls the same HTTP API: user message → model request → reply in the chat. For video — poll the status and send the file from the finished URL.

OpenAI-compatible base URLPython / Node SDK

For text models the official OpenAI and Anthropic SDKs work with a swapped base URL and our key — your application code stays the same. Images and video are a plain HTTP call from any language.

For business

We'll help bring AI into your business

More than a key: we help wire Veo and other models into your workflows — from audit to production, with invoice payment.

  • Process auditWe find where AI pays off in your workflows: support, sales, content, documents — and name specific scenarios and models.
  • Integration into CRM, website, Telegram, n8nWired through our API or ready no-code scenarios; one key and a shared balance for every model.
  • Ruble payment by invoiceCompanies get an invoice for bank transfer, accounting documents and a top-up of the API balance.
  • Support and limitsHelp with prompts and architecture, request limits raised individually for your load.

Inputs, limits and refunds

  • Text → video and image → video (image: public https URL)
  • Duration seconds: 4–10 (default 5)
  • aspect 16:9 / 9:16 / 1:1 or an explicit size
  • Charged up front by price_rub at the requested resolution (size / resolution), refunded if the render fails (refunded: true)
  • A job stuck in the queue over 30 minutes is refunded automatically
  • 30 requests per minute per key (all endpoints combined)

Error responses and refunds

# 401 {"type":"error","error":{"type":"authentication_error","message":"Invalid or revoked API key."}}
# 402 {"type":"error","error":{"type":"billing_error","message":"Not enough API balance: …"}}
# 429 {"type":"error","error":{"type":"rate_limit_error","message":"…"}}   ← 30 requests/min per key
# 400 {"type":"error","error":{"type":"invalid_request_error","message":"Unknown model \"…\". See GET /v1/models."}}
# 502 {"type":"error","error":{"type":"api_error","message":"… Charge refunded."}}   ← start failed → money back
# GET ?id → {"id":"vid_…","status":"failed","refunded":true}                        ← render failed → money back

Observed stability of the API and video generation

Numbers come from the public /status summary: the share of successful requests over a period for the whole API and for the category as a whole (the summary has no per-model breakdown), no SLA promises. Failed generations are not charged, so retrying is safe.

Developer APIoperational

—now (2 h window)
78.5%last 30 days
78.5%last 90 days

Video generationdegraded

—now (2 h window)
80%last 30 days
80%last 90 days

Refunds and charges

  • Charged up front by price_rub; a failed render is refunded automatically with refunded: true in the response
  • A job stuck in the queue over 30 minutes is refunded automatically
  • Status and file URL — in GET /v1/videos?id=

Tracking since Aug 6, 2026.

Use cases

1

Social media agency auto-generates short product teaser clips from campaign briefs

2

Indie hacker builds a text-to-video feature inside a content creation SaaS

3

E-commerce team turns product photos into short moving showcase clips via image-to-video

4

Internal marketing tool extends an existing brand clip into a longer cut

5

Chatbot or Telegram bot that generates a video clip on request and sends back the link

6

Pipeline that batch-generates background video loops for a landing page builder

Prompting tips

  • State the shot type and camera move explicitly: wide static shot, slow dolly-in, handheld pan — vague prompts give generic motion
  • Describe the light and time of day (soft morning light, harsh noon sun, neon night) to anchor mood and color
  • Break the prompt into what happens at the start, middle and end of the clip so the motion has a clear arc across the seconds
  • For image-to-video, describe the reference frame itself (subject, pose, framing) so motion stays consistent with it
  • Match aspect and seconds to the target platform, and avoid on-screen text, dense crowds and close-up hands in the scene

Ready-made prompts for Veo

Copy the prompt and the parameters into the request body — the fields are named exactly as in the /api/v1 contract. Replace the angle-bracket placeholders with your material.

Product commercial

A sleek electric kettle on a marble counter, steam rising, morning light through linen curtains, slow orbit, premium commercial feel
seconds: 8aspect: 16:9

Nature documentary shot

Wide shot of a red fox crossing a snowy meadow at dusk, long lens, shallow focus, gentle snowfall, documentary realism
seconds: 8aspect: 16:9

City time-lapse

Time-lapse of a city skyline from day to night, clouds streaking, windows lighting up one by one, static camera
seconds: 8aspect: 16:9

Children's book illustration

Storybook watercolor animation: a small paper boat floats down a stream between mossy stones, gentle pan, soft pastel palette
seconds: 5aspect: 1:1

Vertical clip for stories

A barista pours latte art in a sunlit cafe, handheld close-up, warm tones, vertical framing
seconds: 5aspect: 9:16

Who the Veo API is for

Industries where this kind of generation becomes part of the workflow rather than an experiment.

E-commerce & marketplacesProduct video cards from catalogue photos — hundreds of SKUs without a shoot, Veo through one key.
Media & socialVertical clips for Reels, Shorts and TikTok — on a schedule from text ideas.
Agencies & productionPreviz, storyboards and B-roll for clients in hours instead of days.
EdTechIllustrative clips for lessons and concepts explained in motion.
Real estate & autoBring listing photos to life: fly-throughs, turns, atmosphere.
SaaS & appsVeo video generation inside your product — one key and a shared balance.

FAQ

How much does the Veo API cost, and why is the price per clip?

Veo is billed per fixed-length clip rather than per second: each version in the table above has its own price for one clip, and the same figure comes back in price_rub of the POST /v1/videos response before generation starts. So the spend on a batch of Veo clips is a simple multiplication — the calculator on this page does it for you.

How do I connect to the Veo API from Python?

With requests and no SDK: POST to /v1/videos with the x-api-key header and a body of model (the Veo version id), prompt and aspect; the response carries a job id that you poll via GET /v1/videos until the status is completed. The Veo sample for Python, Node.js and the shell is in the “First request” block above; no Google Cloud account needed.

What are the Veo API limits on format and request rate?

One Veo clip is a fixed-length video in aspect 16:9, 9:16 or 1:1; the start frame for image-to-video is passed as a public https URL. A key has a shared limit of 30 requests per minute across all endpoints; above it Veo returns 429 and you retry later. A long queue is safe: a clip stuck for more than 30 minutes is refunded to the balance.

How do Veo Fast, Quality and Lite differ, and which id do I send?

Fast is the quick Veo variant for drafts and series of variations, Quality gives the most detailed light and materials for the final clip, Lite is the most economical. Exact ids of all Veo versions are in the table and in GET /v1/models; the short alias gemini-video-std points to the current standard version if you do not want to track version numbers.

What happens to the payment if Veo fails to generate the clip?

The Veo clip price is charged at start but refunded to the API balance automatically when the provider fails — the job status will show refunded: true. If the clip sits in the queue for more than 30 minutes the refund also happens on its own. You pay only for Veo clips with status completed and a file link.

Does the Veo API accept invoice payment from a legal entity?

Yes: a legal entity requests an invoice in the API account, pays it from the corporate account, and the amount is credited to the API balance — the Veo key stays the same. Russian bank cards use the regular top-up, and accounting documents are provided on request. No dollars or foreign card required.

Is there free access to the Veo API?

There are no free API credits: the wallet starts with a minimum first top-up and every Veo clip is charged at the table price. You can judge for free how Veo voices and animates a scene in the Zerocoder studio and the Veo tool in the catalogue — then send the same prompt through the API.

Does the Veo API generate speech and sound together with the video?

Yes, Veo produces a synchronised soundtrack: quoted lines in the prompt become speech with lip movement, and separately described ambience and music go underneath. There is no extra charge for audio — it is included in the clip price. For voice-over name who speaks and keep one shot per clip so the sound does not break at cuts.

AI API for your product

Up to -56% vs the official API · ruble billing, no VPN