Endpoints
Video (asynchrone taken)
Maak met POST /videos een videotaak aan, poll de status met GET /videos/{id} en download het resultaat, met kosten, statussen en foutcodes.
Probeer het in de playgroundGenereer video met Veo 3.1, Sora 2 Pro, Kling, Seedance, Runway, Wan, Hailuo en meer. Videogeneratie duurt van tientallen seconden tot enkele minuten, dus het draait als een asynchrone taak: je maakt een taak aan, pollt de status en downloadt daarna het resultaat.
| Stap | Request |
|---|---|
| 1. Aanmaken | POST /api/v1/videos |
| 2. Pollen | GET /api/v1/videos/{id} |
| 3. Downloaden | GET /api/v1/videos/{id}/content?index=0 |
Een taak aanmaken
POST https://api14.com/api/v1/videos
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
model | string | ja | Een videomodel-id, bijv. google/veo-3.1-fast. |
prompt | string | ja | Wat er in de video gebeurt. |
duration | number | nee | Lengte in seconden. Standaard de eerste ondersteunde duur van het model. |
resolution | string | nee | Bijv. 720p, 1080p. Moet door het model worden ondersteund. |
aspect_ratio | string | nee | Bijv. 16:9, 9:16. |
generate_audio | boolean | nee | Genereer een soundtrack waar ondersteund (standaard true). |
image | string | nee | Eerste frame als URL of data:-URI (image-to-video). |
Ondersteunde duren, resoluties en beeldverhoudingen per model: GET /videos/models (openbaar) of de modelpagina.
Saldocontrole
Voordat de taak wordt ingediend, schat de gateway de prijs als duur × de prijs per seconde voor de gevraagde resolutie (en audio-optie). Als je saldo lager is dan de schatting, mislukt het request met 402 insufficient_balance en wordt er niets gestart.
Response
{
"id": "vid_01JABCDEF",
"status": "queued",
"polling_url": "/api/v1/videos/vid_01JABCDEF"
}
De taak pollen
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 | Betekenis |
|---|---|
queued | Wacht op de provider. |
in_progress | Wordt gerenderd. |
completed | Klaar; unsigned_urls bevat de uitvoer. |
failed, cancelled, expired | Afgerond zonder uitvoer; zie error. Je wordt niet gefactureerd. |
Poll elke 5 tot 10 seconden. Alleen het account dat de taak heeft aangemaakt kan hem lezen; andere id's geven 404 not_found.
Het resultaat downloaden
GET https://api14.com/api/v1/videos/{id}/content?index=0
Geeft de videobytes terug (meestal video/mp4) met je API-key. Uitvoer-URL's wijzen altijd naar de gateway, nooit naar de upstream-provider. Als het bestand niet klaar is of is verlopen, krijg je content_unavailable.
Voorbeeld
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);
Facturering
Je wordt eenmalig gefactureerd, wanneer de taak completed bereikt, op basis van de werkelijke kosten van de provider. Mislukte, geannuleerde en verlopen taken zijn gratis. Taken worden ook op de achtergrond afgerond, dus een taak die je nooit pollt wordt toch afgerekend en verschijnt in Gebruik.
Fouten
| Status | Code | Wanneer |
|---|---|---|
| 402 | insufficient_balance | Het saldo is lager dan de geschatte prijs van de taak. |
| 403 | plan_required | Je abonnement bevat geen videomodellen. |
| 404 | model_not_found / not_found | Onbekend model, of het taak-id is niet van jou. |
| 502 | upstream_unavailable | De status kon niet worden gelezen; probeer opnieuw. |
Zie Fouten.