Endpointy
Wideo (zadania asynchroniczne)
POST /videos tworzy zadanie generowania wideo; odpytuj GET /videos/{id} o status i pobierz gotowy plik z endpointu content.
Wypróbuj w playgroundGeneruj wideo za pomocą Veo 3.1, Sora 2 Pro, Kling, Seedance, Runway, Wan, Hailuo i innych. Generowanie wideo trwa od kilkudziesięciu sekund do kilku minut, więc działa jako zadanie asynchroniczne: tworzysz zadanie, odpytujesz o jego status, a następnie pobierasz wynik.
| Krok | Żądanie |
|---|---|
| 1. Utwórz | POST /api/v1/videos |
| 2. Odpytuj | GET /api/v1/videos/{id} |
| 3. Pobierz | GET /api/v1/videos/{id}/content?index=0 |
Utworzenie zadania
POST https://api14.com/api/v1/videos
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
model | string | tak | Identyfikator modelu wideo, np. google/veo-3.1-fast. |
prompt | string | tak | Co dzieje się w wideo. |
duration | number | nie | Długość w sekundach. Domyślnie pierwszy czas obsługiwany przez model. |
resolution | string | nie | np. 720p, 1080p. Musi być obsługiwana przez model. |
aspect_ratio | string | nie | np. 16:9, 9:16. |
generate_audio | boolean | nie | Generuje ścieżkę dźwiękową, jeśli jest obsługiwana (domyślnie true). |
image | string | nie | Pierwsza klatka jako adres URL lub URI data: (image-to-video). |
Obsługiwane czasy trwania, rozdzielczości i proporcje dla każdego modelu: GET /videos/models (publiczny) lub strona modelu.
Kontrola salda
Zanim zadanie zostanie wysłane, bramka szacuje jego cenę jako czas trwania × cena za sekundę dla żądanej rozdzielczości (i opcji dźwięku). Jeśli Twoje saldo jest niższe niż szacunek, żądanie kończy się błędem 402 insufficient_balance i nic nie jest uruchamiane.
Odpowiedź
{
"id": "vid_01JABCDEF",
"status": "queued",
"polling_url": "/api/v1/videos/vid_01JABCDEF"
}
Odpytywanie zadania
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 | Znaczenie |
|---|---|
queued | Oczekuje na dostawcę. |
in_progress | Trwa renderowanie. |
completed | Gotowe; unsigned_urls wymienia wyniki. |
failed, cancelled, expired | Zakończone bez wyniku; zobacz error. Nie jest pobierana opłata. |
Odpytuj co 5–10 sekund. Zadanie może odczytać tylko konto, które je utworzyło; inne identyfikatory zwracają 404 not_found.
Pobranie wyniku
GET https://api14.com/api/v1/videos/{id}/content?index=0
Zwraca bajty wideo (zwykle video/mp4) po uwierzytelnieniu Twoim kluczem API. Adresy URL wyników zawsze wskazują na bramkę, nigdy na dostawcę. Jeśli plik nie jest gotowy lub wygasł, otrzymasz content_unavailable.
Przykład
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);
Rozliczenia
Opłata jest pobierana jednorazowo, gdy zadanie osiągnie completed, według rzeczywistego kosztu dostawcy. Zadania nieudane, anulowane i wygasłe są bezpłatne. Zadania kończą się też w tle, więc zadanie, którego nigdy nie odpytujesz, i tak zostanie rozliczone i pojawi się w Usage.
Błędy
| Status | Kod | Kiedy |
|---|---|---|
| 402 | insufficient_balance | Saldo jest niższe niż szacowana cena zadania. |
| 403 | plan_required | Twój plan nie obejmuje modeli wideo. |
| 404 | model_not_found / not_found | Nieznany model lub identyfikator zadania nie należy do Ciebie. |
| 502 | upstream_unavailable | Nie udało się odczytać statusu; ponów próbę. |
Zobacz Błędy.