Video erstellen
Senden Sie eine Videogenerierungsaufgabe ab. Die Anfrage gibt sofort 202 Accepted mit einer Aufgaben-id und einer Polling-URL zurück — die Generierung läuft asynchron. Fragen Sie die Aufgabe ab oder erhalten Sie einen Webhook, und lesen Sie anschließend das Ergebnis mit Videostatus abrufen.
POST https://api.ofox.ai/v1/videosAnfrageparameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
model | string | ✅ | Modell-Slug, z. B. google/veo-3.1 oder bytedance/seedance-2.0 |
prompt | string | ✅ | Textbeschreibung des Videos |
duration | integer | — | Videolänge in Sekunden |
resolution | string | — | 480p / 720p / 1080p / 1K / 2K / 4K |
aspect_ratio | string | — | 16:9 / 9:16 / 1:1 / 4:3 / 3:4 / 3:2 / 2:3 / 21:9 / 9:21 |
size | string | — | Exakte Pixel WIDTHxHEIGHT (z. B. 1280x720), Alternative zu resolution + aspect_ratio |
frame_images | array | — | Frame-Steuerung (Bild-zu-Video / erster-und-letzter Frame). Vorhanden ⇒ wird als Bild-zu-Video behandelt. Siehe unten |
input_references | array | — | Steuert Motiv / Stil (Referenz-zu-Video), keine präzisen Frame-Anker. Siehe unten |
generate_audio | boolean | — | Standardmäßig true bei Modellen, die Audioausgabe unterstützen |
seed | integer | — | Deterministischer Generierungs-Seed (nicht bei allen Anbietern garantiert) |
callback_url | string | — | Webhook-URL für terminalen Zustand, muss HTTPS sein (siehe Webhooks) |
provider | object | — | Anbieterspezifische Durchreichung, siehe Provider passthrough |
frame_images[]-Element
Jedes Element fixiert einen Frame der Ausgabe. frame_type ist first_frame oder last_frame.
{
"type": "image_url",
"image_url": { "url": "https://example.com/first.jpg" },
"frame_type": "first_frame"
}input_references[]-Element
Übergeben Sie Bild- / Audio- / Videoreferenzen per type — sie steuern Motiv, Stil und Konsistenz, aber keine präzisen Frame-Anker:
{ "type": "image_url", "image_url": { "url": "https://example.com/subject.jpg" } }
{ "type": "audio_url", "audio_url": { "url": "https://example.com/voice.mp3" } }
{ "type": "video_url", "video_url": { "url": "https://example.com/ref.mp4" } }| Medium | type | Maximale Anzahl | Weitere Einschränkungen |
|---|---|---|---|
| Bild | image_url | ≤ 9 | — |
| Audio | audio_url | ≤ 3 | ≤ 15s pro Clip |
| Video | video_url | ≤ 1 | — |
Eine Überschreitung eines Limits gibt 400 too_many_references zurück (siehe Fehler).
frame_images und input_references schließen sich gegenseitig aus — eine einzelne Anfrage nutzt entweder das eine oder das andere, niemals beide. Wenn beides gesendet wird, gibt die API 400 references_conflict zurück.
Generierungsmodus (implizit)
Es gibt kein Feld gen_mode. Der Modus wird daraus abgeleitet, welche Eingaben Sie senden:
| Modus | Erkannt wenn |
|---|---|
text2video | Weder frame_images noch input_references |
img2video | frame_images mit einem first_frame |
img2video_end | frame_images mit first_frame + last_frame |
imgref2video | input_references, nur Bilder |
mixref2video | input_references mit Mischung aus Bild / Audio / Video |
Antwort
202 Accepted — die Aufgabe wird mit status: "pending" und einer polling_url angenommen:
{
"id": "9bcf3c60-7db2-4e1a-a1b2-c3d4e5f60718",
"status": "pending",
"polling_url": "https://api.ofox.ai/v1/videos/9bcf3c60-7db2-4e1a-a1b2-c3d4e5f60718"
}Fragen Sie polling_url ab (oder warten Sie auf einen Webhook), bis die Aufgabe einen terminalen Zustand erreicht — siehe Videostatus abrufen.
Anfragebeispiele
Ein /v1/videos-Schema deckt jeden Generierungsmodus ab; der Modus wird implizit aus Ihren Eingaben gewählt. Jedes folgende Beispiel läuft unverändert.
Text zu Video
Keine frame_images / input_references → Text-zu-Video.
curl -X POST https://api.ofox.ai/v1/videos \
-H "Authorization: Bearer $OFOX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "google/veo-3.1",
"prompt": "A golden retriever running on the beach at sunset",
"duration": 5,
"resolution": "1080p",
"aspect_ratio": "16:9",
"generate_audio": true
}'Kombinierbare Optionen
Die folgenden Felder sind unabhängig vom Generierungsmodus — fügen Sie beliebige davon zu jedem obigen Request Body hinzu.
Webhook (callback_url)
Erhalten Sie einen POST an Ihren Endpunkt, wenn die Aufgabe einen terminalen Zustand erreicht, statt per Polling abzufragen.
{
"model": "google/veo-3.1",
"prompt": "...",
"callback_url": "https://your-app.example/webhooks/ofox-video"
}callback_url muss HTTPS verwenden. Siehe Webhooks für Payload und Signatur.
Provider passthrough
Anbieterspezifische Parameter laufen über provider.options.<slug> — nur der passende Anbieter erhält sie. Parameter wie watermark werden nicht von jedem Modell unterstützt, daher liegen sie in Provider passthrough statt als Top-Level-Felder (dies folgt der OpenRouter-Konvention für Provider passthrough). Welche Passthrough-Optionen ein Modell akzeptiert, hängt von den Fähigkeiten des Modells ab.
{
"model": "alibaba/wan-2.7",
"prompt": "...",
"provider": {
"options": {
"dashscope": { "watermark": false, "audio_setting": "..." }
}
}
}