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.

Available models and prices

Built from the live GET /v1/models price list: prices include our margin, in rubles and in dollars at the internal rate. Anything missing is temporarily not served by the gateway.

ModelUnit₽$Cost examplesEndpoint
veo-3.1-fastrecommendedper clip42 ₽$0.467
1 generation: 42 ₽ · $0.467
10 generations: 420 ₽ · $4.67
/v1/videos
veo-3.1-qualityrecommendedper clip78 ₽$0.867
1 generation: 78 ₽ · $0.867
10 generations: 780 ₽ · $8.67
/v1/videos
veo-3.1-literecommendedper clip24 ₽$0.267
1 generation: 24 ₽ · $0.267
10 generations: 240 ₽ · $2.67
/v1/videos
veo-3-fastrecommendedalso: gemini-video-stdper clip42 ₽$0.467
1 generation: 42 ₽ · $0.467
10 generations: 420 ₽ · $4.67
/v1/videos
veo-3-qualityrecommendedper clip78 ₽$0.867
1 generation: 78 ₽ · $0.867
10 generations: 780 ₽ · $8.67
/v1/videos
veo-extendrecommendedper clip42 ₽$0.467
1 generation: 42 ₽ · $0.467
10 generations: 420 ₽ · $4.67
/v1/videos

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.

First request

One zc-sk-… key, the x-api-key header (or Authorization: Bearer), base URL https://zerocoder.com/api/v1. Samples are generated from the real route contracts.

1

Create a key

Account → API: top up the balance in rubles and create a zc-sk-… key

2

Send a request

Copy the sample below — the model id is already taken from the price list.

3

Check the charge

GET /v1/balance shows the balance; the call price comes back in the response.

model: veo-3.1-fast
# 1) start the render — price_rub is charged up front, refunded if the render fails
curl https://zerocoder.com/api/v1/videos \
  -H "x-api-key: zc-sk-…" -H "content-type: application/json" \
  -d '{"model": "veo-3.1-fast", "prompt": "A drone shot over a foggy pine forest at sunrise, slow dolly in", "seconds": 5, "aspect": "16:9"}'
# → {"id":"vid_…","object":"video","model":"veo-3.1-fast","status":"queued","seconds":5,"price_rub":…,"balance_rub":…,"poll":"/api/v1/videos?id=vid_…"}

# 2) poll until status is "completed" (url) or "failed" (refunded: true)
curl "https://zerocoder.com/api/v1/videos?id=vid_…" -H "x-api-key: zc-sk-…"
# image-to-video: add "image": "https://…/frame.jpg" to the body
import time, requests

API = "https://zerocoder.com/api/v1"
H = {"x-api-key": "zc-sk-…"}

job = requests.post(f"{API}/videos", headers=H, json={
    "model": "veo-3.1-fast",
    "prompt": "A drone shot over a foggy pine forest at sunrise, slow dolly in",
    "seconds": 5,            # 4–10
    "aspect": "16:9",        # or 9:16 / 1:1; "image": "https://…" for image-to-video
}).json()
print("charged", job["price_rub"], "RUB, balance", job["balance_rub"])

while True:
    st = requests.get(f"{API}/videos", headers=H, params={"id": job["id"]}).json()
    if st["status"] == "completed":
        print(st["url"]); break
    if st["status"] == "failed":
        print("failed, refunded:", st.get("refunded")); break
    time.sleep(4)
const API = "https://zerocoder.com/api/v1";
const H = { "x-api-key": "zc-sk-…", "content-type": "application/json" };

const job = await fetch(`${API}/videos`, {
  method: "POST", headers: H,
  body: JSON.stringify({ model: "veo-3.1-fast", prompt: "A drone shot over a foggy pine forest at sunrise, slow dolly in", seconds: 5, aspect: "16:9" }),
}).then((r) => r.json());
console.log("charged", job.price_rub, "RUB");

for (;;) {
  const st = await fetch(`${API}/videos?id=${job.id}`, { headers: H }).then((r) => r.json());
  if (st.status === "completed") { console.log(st.url); break; }
  if (st.status === "failed") { console.log("failed, refunded:", st.refunded); break; }
  await new Promise((r) => setTimeout(r, 4000));
}

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, 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

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

FAQ

Does the Veo API generate sound and speech?

Yes. Veo produces a synchronised soundtrack: speech from the quoted lines in your prompt, ambience and music. Audio is not billed separately.

Why is Veo priced per clip instead of per second?

That is how the provider prices it: a fixed-length clip costs a fixed amount. The table marks it as “per clip”; the POST /v1/videos response states the price in price_rub before generation starts.

How do I get a Veo API key?

Sign up at Zerocoder, open the API section of your account and create a zc-sk-… key. The same key unlocks Veo and every other model in the catalogue — no separate Veo key needed.

How is Veo API billed?

Top up the API balance in rubles (Russian bank card or invoice for companies). Usage is charged per second or per clip of Veo video at the price returned by GET /v1/models; Veo prices already include our margin, there are no hidden fees.

What if Veo fails to generate the clip?

If the provider fails a Veo generation, the charge is refunded automatically and the response carries refunded: true. You only pay for a finished clip.

What are the Veo API rate limits?

A shared limit of 30 requests per minute per key across all generation endpoints, Veo included. Above that you get 429 rate_limit_error; for higher Veo volumes contact us and we raise it individually.

Do I need a VPN or a foreign card for Veo API?

No. Veo requests go to zerocoder.com, payment is in rubles, and accounting documents are available on request.

Can I try Veo without code?

Yes: Veo is available in the Zerocoder studio and in the free tools catalogue — check the quality by hand, then wire up the Veo API.

AI API for your product

70% cheaper than the official APIs — one key for GPT, Claude, Gemini, images and video