Ставка за секунду зависит от разрешения и звука — весь прайс ниже, в блоке «Провайдеры». Параметры запроса — в гайде по видеогенерации.
1. Зарегистрируйтесь или войдите
Создайте аккаунт, чтобы управлять биллингом и выпускать API ключи для доступа к ZvenoAI.
2. Получите API ключ
Перейдите в раздел API ключей, создайте новый ключ и сохраните его в безопасном месте — он понадобится для аутентификации запросов.
3. Отправьте первый запрос
Используйте любой OpenAI-совместимый SDK. Укажите базовый URL ZvenoAI и передайте ваш API ключ в заголовке Authorization.
Видеогенерация — асинхронная: отправка → опрос → скачивание. Замените ZVENOAI_API_KEY на свой ключ; модель здесь — google/veo-3.1. Подробнее в гайде.
# 1. Отправка задачи
JOB=$(curl -sS https://api.zveno.ai/v1/videos \
-H "Authorization: Bearer <ZVENOAI_API_KEY>" \
-H "Content-Type: application/json" \
-d '{"model":"google/veo-3.1","prompt":"Wide shot of a child flying a red kite at sunset"}')
JOB_ID=$(echo "$JOB" | jq -r .id)
# 2. Опрос (терминальные статусы: completed | failed)
while :; do
STATUS=$(curl -sS "https://api.zveno.ai/v1/videos/$JOB_ID" \
-H "Authorization: Bearer <ZVENOAI_API_KEY>" | jq -r .status)
echo "статус: $STATUS"
case "$STATUS" in completed|failed) break ;; esac
sleep 5
done
# 3. Скачивание (только если completed)
[[ "$STATUS" == "completed" ]] && curl -fsS "https://api.zveno.ai/v1/videos/$JOB_ID/content" \
-H "Authorization: Bearer <ZVENOAI_API_KEY>" \
-o output.mp4import os, time, requests
BASE = "https://api.zveno.ai"
KEY = os.environ["ZVENOAI_API_KEY"]
H = {"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"}
# 1. Отправка задачи
job = requests.post(f"{BASE}/v1/videos", headers=H, json={
"model": "google/veo-3.1",
"prompt": "Wide shot of a child flying a red kite at sunset",
}).json()
# 2. Опрос (терминальные статусы: completed | failed)
while job["status"] in ("pending", "in_progress"):
time.sleep(5)
job = requests.get(job["polling_url"], headers=H).json()
if job["status"] != "completed":
raise SystemExit(f"{job['status']}: {job.get('error') or '—'}")
# 3. Скачивание
with requests.get(job["unsigned_urls"][0], headers=H, stream=True) as r:
with open("output.mp4", "wb") as f:
for chunk in r.iter_content(1 << 20):
f.write(chunk)const BASE = 'https://api.zveno.ai'
const KEY = process.env.ZVENOAI_API_KEY
const H = { Authorization: `Bearer ${KEY}`, 'Content-Type': 'application/json' }
// 1. Отправка задачи
let job = await fetch(`${BASE}/v1/videos`, {
method: 'POST',
headers: H,
body: JSON.stringify({
model: 'google/veo-3.1',
prompt: 'Wide shot of a child flying a red kite at sunset',
}),
}).then((r) => r.json())
// 2. Опрос (терминальные статусы: completed | failed)
while (['pending', 'in_progress'].includes(job.status)) {
await new Promise((r) => setTimeout(r, 5000))
job = await fetch(job.polling_url, { headers: H }).then((r) => r.json())
}
if (job.status !== 'completed') throw new Error(`${job.status}: ${job.error ?? '—'}`)
// 3. Скачивание
const res = await fetch(job.unsigned_urls[0], { headers: H })
const fs = await import('node:fs')
const { Readable } = await import('node:stream')
const { pipeline } = await import('node:stream/promises')
await pipeline(Readable.fromWeb(res.body), fs.createWriteStream('output.mp4'))