Character action scene
A knight in silver armor runs across a drawbridge as embers fall around him, dynamic tracking shot, dramatic lighting
seconds: 5aspect: 16:9MiniMax Hailuo API with ruble billing: text-to-video and image-to-video through one Zerocoder key. Per-clip pricing, code samples, limits, refunds.
Minimax Hailuo is a video generation family: you send a text prompt (or a reference frame for image-to-video) and get back a short video clip. The family covers two tiers, from a fast cheap option to a higher-quality one, so you pick the model that matches the shot you need.
One API key and one ruble wallet work for every model on the platform, including both Hailuo ids — no separate contracts per provider. You pay with a Russian card or a company invoice, no VPN or foreign card needed. Docs and the API cabinet are on the site, and the request shape follows common SDK conventions, so existing HTTP clients work with minimal changes.
You call the video endpoint with a model id, a prompt, a clip length in seconds, and an aspect ratio or size; for image-to-video you also pass a reference frame URL. The call returns a task id and the price charged, then the task moves through queued, processing, and completed states as you poll for it. If generation fails on the provider side, the charge is returned to your wallet 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 |
|---|---|---|---|
MiniMax 3 Hailuorecommended minimax-3-hailuo · MiniMax | Official price: | per clipofficial: $0.08/s × 5 s · 768P | -58% |
MiniMax H3 minimax-h3 · MiniMax | from 5.56 ₽$0.062 | per second of video768p — 5.56 ₽ · 2k — 9.04 ₽ | — |
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 — minimax-3-hailuo; 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": "minimax-3-hailuo", "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: "minimax-3-hailuo", 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": "minimax-3-hailuo", "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 refundedMiniMax list price (MiniMax-H3 (Hailuo 3), 768P), 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 MiniMax Hailuo 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 MiniMax Hailuo 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 MiniMax Hailuo 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 MiniMax Hailuo 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.
A short-video app lets users turn a product photo into a moving teaser clip
A marketing team generates b-roll variations for ad creatives from text prompts
A chatbot answers with a short animated reply instead of a static image
An internal tool batch-generates preview clips for a game or app concept catalog
A social media scheduler auto-creates background video loops for posts
A storyboard pipeline converts static scene sketches into motion drafts for review

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 knight in silver armor runs across a drawbridge as embers fall around him, dynamic tracking shot, dramatic lighting
seconds: 5aspect: 16:9Anime style: a girl with a red umbrella walks through a rainy neon street, reflections on wet pavement, slow pan
seconds: 5aspect: 9:16A golden retriever puppy chases soap bubbles in a sunny backyard, slow motion, playful energy
seconds: 5aspect: 16:9Handheld walk through a Moroccan spice market, colorful stalls, dust floating in sunlight, warm cinematic grade
seconds: 5aspect: 16:9
Industries where this kind of generation becomes part of the workflow rather than an experiment.
MiniMax Hailuo pricing depends on the version: Hailuo is billed per clip at a fixed price, per-second versions per second at the rate of the resolution (without size or resolution — 1080p or the nearest higher tier). The unit and prices of every row are in the table above and in GET /v1/models; the amount comes back in price_rub of the POST /v1/videos response before generation, with no hidden extras.
One POST to /v1/videos with the x-api-key header: the body has model with the Hailuo id from the table, prompt describing the character and the action, aspect and optionally image with a link to the start frame. The response carries a job id; poll GET /v1/videos every few seconds until the status is completed. The MiniMax Hailuo sample for Python, Node.js and the shell is above.
A Hailuo clip in MiniMax Hailuo is a fixed-length video, while per-second versions take seconds from 4 to 10; the frame format is aspect 16:9, 9:16 or 1:1 or an explicit size, and the start image must be a public https URL. The shared key limit is 30 requests per minute across all endpoints; above it you get 429. A clip stuck in the queue for more than 30 minutes is refunded to the balance automatically.
Every MiniMax Hailuo version is a row in the table above with its own billing unit — per clip or per second by resolution; take the id from GET /v1/models and put it in the model field. New gateway versions appear in the table automatically and retired ones disappear from it — watch the list, not the vendor's news.
The MiniMax Hailuo clip price is charged at start but refunded to the API balance automatically when the provider fails — the job status will show refunded: true. The same applies to a job idle in the queue for more than 30 minutes. Only jobs that end with status completed and a video link are paid for.
Yes: a company requests an invoice in the API account, pays from the corporate account, and the amount is credited to the API balance — MiniMax Hailuo clips are generated with the same key. A Russian bank card works for an instant top-up, and accounting documents are issued on request. No foreign card or MiniMax account needed.
There are no free clips in the API: the wallet starts with a minimum first top-up and every MiniMax Hailuo clip is charged at the table price. You can judge Hailuo's character animation for free in the Zerocoder studio and the “Create video” tool in the catalogue — then move the winning prompt into a /v1/videos request.
Yes, that is the model's main strength: pass a link to an illustration or photo of the character, full-length or waist-up, in the image field and describe the emotion and gesture in the prompt — Hailuo brings the hero to life while keeping their look. One character and one action per clip give the steadiest result; name the style (“3D cartoon”, “watercolour”) at the start of the prompt.

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