Zum Hauptinhalt springen

Video-API-Lösung

Aus einem Prompt oder einem Standbild wird fertiges Video.

Video ist in den meisten Produkten das teuerste Ergebnis und das am längsten erwartete. Beide Zahlen entstehen aus drei Feldern im Anfragekörper, und der Auftrag läuft weiter, lange nachdem die auslösende Anfrage verschwunden ist.

Die Herausforderung

Was Video von jeder anderen Aufgabe unterscheidet

Eine Videoanfrage ist keine langsamere Bildanfrage. Länge, Auflösung und der Audioschalter bestimmen Ihren Preis und Ihre Wartezeit, und zwar bevor ein einziges Bild existiert.

01

Länge und Auflösung sind Preisregler, keine Voreinstellungen

Die meisten Video-Endpunkte rechnen pro Ausgabesekunde in der gewählten Auflösung ab. duration_seconds von 5 auf 10 verdoppelt die Kosten ungefähr, eine Auflösungsstufe noch einmal. Beide sind im Schema als preisrelevant markiert, deshalb gehört die Schätzung neben das Bedienelement und nicht auf die Rechnung.

02

Erzeugtes Audio ist ein anderer Tarif

Wo generate_audio existiert, verschiebt dieser Schalter die Anfrage auf einen anderen Tarif. Ein Formular, das ihn versteckt, verschickt still jedes Mal die teurere Variante.

03

Die HTTP-Antwort ist nicht das Video

createTask antwortet mit 202 Accepted und einer taskId im Zustand queued. Die Erzeugung läuft serverseitig noch Minuten weiter. Wer auf dem ursprünglichen Socket wartet, läuft in einen Timeout, während Auftrag und Kosten weiterlaufen.

Der Ansatz

Erst den Preis festhalten, dann genau einmal senden

Holen Sie mit POST /api/v1/jobs/quote eine Schätzung für genau diesen Anfragekörper, zeigen Sie den Betrag an und senden Sie denselben Körper dann mit quoteId, expectedCost und einem gespeicherten Idempotency-Key an createTask. Ein zwischenzeitlich geänderter Preis scheitert mit Geschäftscode 40901, statt später auf der Rechnung aufzutauchen.

Ein Erstellungsaufruf transportiert Modell, geprüfte Eingabe und optional einen Callback. HTTP 202 heißt angenommen, nicht fertig.

POST /api/v1/jobs/createTask

POST /api/v1/jobs/createTask
Authorization: Bearer $SPICY_API_KEY
Idempotency-Key: 7b1f0c2e-9a4d-4f31-8c67-2b5e0d9a1c44
Content-Type: application/json
{
  "model": "<publisher>/<model>/text-to-video",
  "input": {
    "prompt": "A slow aerial drift over a misty pine forest at sunrise",
    "duration_seconds": 5,
    "resolution": "1080p",
    "generate_audio": true
  },
  "callBackUrl": "https://example.com/hooks/spicyapi"
}

202 Accepted

HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

Vertrag

Was Sie früh festhalten sollten

Video-API: vergleichen, testen, integrieren — Was Sie früh festhalten sollten
Feld oder HeaderWert oder Grenze
POST /api/v1/jobs/createTask202 Accepted · state queued
duration_seconds · resolution · generate_audioprice-affecting fields
Idempotency-Key24 h · scoped to one API key
output.assets[].expiresAtsigned URL · results kept 14 days

Horizontal wischen, um alle Spalten zu sehen.

Integration

Vom ersten Aufruf bis in die Produktion

  1. 01Endpunkt auf der Modellseite wählen und den model-Wert exakt übernehmen; das Aufgabensuffix gehört dazu.
  2. 02Den geplanten Anfragekörper schätzen lassen und estimatedCost, quantity und unit neben den Absendeknopf stellen.
  3. 03Aus dem Backend mit Idempotency-Key senden, data.taskId im eigenen Datensatz ablegen und sofort antworten.
  4. 04Über den signierten Callback abschließen, ersatzweise recordInfo mit exponentiellem Backoff abfragen und die Datei vor Ablauf der URL holen.

Passung

Wann dieser Weg der richtige ist

Dafür geeignet

  • Sie brauchen fertige Videodateien – Anzeigen, Trailer, Loops, Social Cuts – und können pro Clip Minuten Latenz hinnehmen.
  • Länge, Auflösung und Audio sollen wählbar sein, und jede Kombination muss vor der Bestätigung einen Preis haben.

Dafür nicht geeignet

  • Sie brauchen eine Antwort innerhalb eines Anfragezyklus. Textmodelle streamen, Video nicht.
  • Sie wollen mitten in der Erzeugung abbrechen. Ein angenommener Auftrag läuft bis zum Endzustand; zurück kommt nur die nicht verbrauchte Reservierung.

Belege

Was Sie selbst prüfen können

Jedes Feld stammt aus dem veröffentlichten Schema

Das Formular jeder Modellseite entsteht aus dem input_schema dieses Endpunkts, und der Server prüft gegen dasselbe Dokument. Ein nicht deklariertes Feld ergibt 400 statt stillem Verwerfen.

Die Schätzung ist eine Obergrenze, keine Vermutung

createTask reserviert den geschätzten Betrag und gibt ihn als cost mit settled: false zurück. Die Endabrechnung übersteigt die Reservierung nie; bei Fehler oder Ablauf wird sie vollständig freigegeben.

Jeder Schlüssel hat seine eigene Ausgabengrenze

Begrenzen Sie einen Schlüssel pro Tag, pro Monat und über seine Laufzeit, beschränken Sie ihn auf bestimmte Modelle und Quell-IPs, und senden Sie jede Schreiboperation mit demselben Idempotenzschlüssel.

Vor dem Start

Plattformverhalten zum Bestätigen

  • Prüfen, ob der Endpunkt heute aufrufbar ist; Verfügbarkeit wird je Endpunkt veröffentlicht, nicht je Familie.
  • taskId und Idempotency-Key gemeinsam außerhalb der Browsersitzung speichern.
  • Callback-Signatur prüfen, bevor der Körper gelesen wird, und Zustellungen als wiederholbar behandeln.
  • Fertige Medien in den eigenen Speicher kopieren; Ergebnisse werden 14 Tage vorgehalten.

Häufige Fragen

Was auf dieser Seite gefragt wird

Das hängt vom Endpunkt, der gewünschten Länge und der aktuellen Warteschlange ab – deshalb ist diese API asynchron. Behandeln Sie 202 als Ende Ihrer Anfrage und den Callback oder eine begrenzte Abfrage als Ende des Auftrags. Einen synchronen Video-Endpunkt gibt es nicht.

Weiter

Video-Endpunkte vergleichen und ausprobieren

Vergleichen Sie Video-Endpunkte nach Länge, Auflösung, Audio und Preis und senden Sie dieselbe Anfrage anschließend serverseitig.

Weitere Leitfäden