Endpoint
Video (job asinkron)
POST /videos membuat job video asinkron; lakukan polling GET /videos/{id} lalu unduh hasilnya dengan model seperti Veo 3.1 dan Sora 2 Pro.
Coba di playgroundBuat video dengan Veo 3.1, Sora 2 Pro, Kling, Seedance, Runway, Wan, Hailuo, dan lainnya. Generasi video memakan waktu dari puluhan detik hingga beberapa menit, jadi berjalan sebagai job asinkron: Anda membuat job, melakukan polling statusnya, lalu mengunduh hasilnya.
| Langkah | Request |
|---|---|
| 1. Buat | POST /api/v1/videos |
| 2. Polling | GET /api/v1/videos/{id} |
| 3. Unduh | GET /api/v1/videos/{id}/content?index=0 |
Membuat job
POST https://api14.com/api/v1/videos
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
model | string | ya | ID model video, mis. google/veo-3.1-fast. |
prompt | string | ya | Apa yang terjadi dalam video. |
duration | number | tidak | Panjang dalam detik. Default ke durasi pertama yang didukung model. |
resolution | string | tidak | mis. 720p, 1080p. Harus didukung oleh model. |
aspect_ratio | string | tidak | mis. 16:9, 9:16. |
generate_audio | boolean | tidak | Menghasilkan soundtrack jika didukung (default true). |
image | string | tidak | Frame pertama sebagai URL atau data: URI (image-to-video). |
Durasi, resolusi, dan rasio aspek yang didukung per model: GET /videos/models (publik) atau halaman model.
Pemeriksaan saldo
Sebelum job dikirim, gateway memperkirakan harganya sebagai durasi × harga per detik untuk resolusi (dan opsi audio) yang diminta. Jika saldo Anda lebih rendah dari perkiraan, request gagal dengan 402 insufficient_balance dan tidak ada yang dimulai.
Respons
{
"id": "vid_01JABCDEF",
"status": "queued",
"polling_url": "/api/v1/videos/vid_01JABCDEF"
}
Polling job
GET https://api14.com/api/v1/videos/{id}
{
"id": "vid_01JABCDEF",
"status": "completed",
"generation_id": "gen-1791100000-abc",
"unsigned_urls": ["/api/v1/videos/vid_01JABCDEF/content?index=0"],
"usage": { "cost": 1.2 }
}
status | Arti |
|---|---|
queued | Menunggu provider. |
in_progress | Sedang dirender. |
completed | Selesai; unsigned_urls mencantumkan keluaran. |
failed, cancelled, expired | Selesai tanpa keluaran; lihat error. Anda tidak ditagih. |
Lakukan polling setiap 5–10 detik. Hanya akun yang membuat job yang dapat membacanya; id lain mengembalikan 404 not_found.
Mengunduh hasil
GET https://api14.com/api/v1/videos/{id}/content?index=0
Mengembalikan byte video (biasanya video/mp4) dengan API key Anda. URL keluaran selalu mengarah ke gateway, tidak pernah ke provider upstream. Jika file belum siap atau sudah kedaluwarsa, Anda mendapat content_unavailable.
Contoh
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
});
// Video generation is asynchronous: submit, then poll until completed.
let job = await client.post("/videos", { body: {
"model": "google/veo-3.1-fast",
"prompt": "A drone shot over turquoise ocean waves at sunrise",
"duration": 8,
"resolution": "720p",
"aspect_ratio": "16:9"
} });
while (!["completed", "failed"].includes(job.status)) {
await new Promise((r) => setTimeout(r, 5000));
job = await client.get(`/videos/${job.id}`);
}
console.log(job.status, job.unsigned_urls);
Penagihan
Anda ditagih satu kali, saat job mencapai completed, memakai biaya aktual dari provider. Job yang gagal, dibatalkan, dan kedaluwarsa gratis. Job juga selesai di latar belakang, jadi job yang tidak pernah Anda polling tetap diselesaikan dan muncul di Usage.
Error
| Status | Kode | Kapan |
|---|---|---|
| 402 | insufficient_balance | Saldo di bawah perkiraan harga job. |
| 403 | plan_required | Paket Anda tidak mencakup model video. |
| 404 | model_not_found / not_found | Model tidak dikenal, atau id job bukan milik Anda. |
| 502 | upstream_unavailable | Status tidak dapat dibaca; coba lagi. |
Lihat Error.