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:9Veo 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.
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.
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.
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.
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 | Price | Unit | Discount |
|---|---|---|---|
Veo 3.1 Fastrecommended veo-3.1-fast · Google | Official price: | per clipofficial: $0.12/s × 5 s · 1080p | -22% |
Veo 3.1 Quality veo-3.1-quality · Google | Official price: | per clipofficial: $0.40/s × 5 s · 1080p | -56% |
Veo 3.1 Lite veo-3.1-lite · Google | Official price: | per clipofficial: $0.08/s × 5 s · 1080p | -33% |
Veo 3 Fast veo-3-fast · Googlealso: gemini-video-std | 42 ₽$0.467 | per clip | — |
Veo 3 Quality veo-3-quality · Google | 78 ₽$0.867 | per clip | — |
Veo Extend veo-extend · Google | 42 ₽$0.467 | per clip | — |
Pick a model and a volume — the calculator uses the same formulas as API billing.
Prices from GET /v1/models, internal exchange rate. Failed generations are not charged.
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 URLhttps://zerocoder.com /api/v1Key — 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 failureconst 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 refundedGoogle list price (Veo 3.1 Fast, 1080p), per-second price × 5 s (the API default); checked 4 October 2026

From a key to production — six steps based on the real /api/v1 contracts. Each step links to the relevant docs section.
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 →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 →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 →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 →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 →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 →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 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 Zapier → Custom Request action: POST, Data — JSON with model and prompt, Headers — x-api-key. Response fields are available to the following Zap steps.
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.
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.
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.

More than a key: we help wire Veo and other models into your workflows — from audit to production, with invoice payment.
# 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
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.
Tracking since Aug 6, 2026.
Social media agency auto-generates short product teaser clips from campaign briefs
Indie hacker builds a text-to-video feature inside a content creation SaaS
E-commerce team turns product photos into short moving showcase clips via image-to-video
Internal marketing tool extends an existing brand clip into a longer cut
Chatbot or Telegram bot that generates a video clip on request and sends back the link
Pipeline that batch-generates background video loops for a landing page builder

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.
A sleek electric kettle on a marble counter, steam rising, morning light through linen curtains, slow orbit, premium commercial feel
seconds: 8aspect: 16:9Wide shot of a red fox crossing a snowy meadow at dusk, long lens, shallow focus, gentle snowfall, documentary realism
seconds: 8aspect: 16:9Time-lapse of a city skyline from day to night, clouds streaking, windows lighting up one by one, static camera
seconds: 8aspect: 16:9Storybook watercolor animation: a small paper boat floats down a stream between mossy stones, gentle pan, soft pastel palette
seconds: 5aspect: 1:1A barista pours latte art in a sunlit cafe, handheld close-up, warm tones, vertical framing
seconds: 5aspect: 9:16
Industries where this kind of generation becomes part of the workflow rather than an experiment.
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.
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.
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.
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.
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.
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.
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.
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.

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