API-Referenz
Asynchrone Tasks
Bild-, Video- und Musik-Jobs teilen einen dauerhaften Lebenszyklus: einmal einreichen, task_id speichern, einen Endzustand abwarten, dann das Ergebnis abrufen. Bauen Sie einen Task-Runner und wählen Sie pro Modell nur die Endpunktfamilie.
#Ein Lebenszyklus für alle asynchronen Modelle
- 1
Einmal einreichen
Verwenden Sie einen eindeutigen Idempotency-Key und speichern Sie die Antwort sofort.
POST /v1/{capability} - 2
task_id speichern
Speichern Sie sie, bevor der Worker den Job bestätigt.
task_id - 3
Abfragen oder Webhook empfangen
Vergleichen Sie status ohne Berücksichtigung der Groß-/Kleinschreibung und stoppen Sie bei einem Endzustand.
GET /{task_id} - 4
Ergebnis abrufen und speichern
Rufen Sie nach Erfolg /content auf und speichern Sie die zurückgegebene Plattform-URL.
GET /{task_id}/content
#Endpunktfamilien
| Fähigkeit | Einreichen | Abfragen | Inhalt |
|---|---|---|---|
| Bild | /v1/images/tasks | /v1/images/tasks/{task_id} | /v1/images/tasks/{task_id}/content |
| Video | /v1/videos | /v1/videos/{task_id} | /v1/videos/{task_id}/content |
| Musik | /v1/music/generations | /v1/music/tasks/{task_id} | /v1/music/tasks/{task_id}/content |
#Statuswerte
Ein Lebenszyklus, zwei Wire-Vokabulare. Bild-, Musik- und 3D-Tasks melden die Task-Begriffe von OpenAI; Videos und alle Webhook-Payloads melden die Video-Begriffe von OpenAI. Eine Statusprüfung, die für eine Familie geschrieben wurde, greift in der anderen stillschweigend nie — diese Tabelle ist die Zuordnung.
| Lebenszyklus | Bild · Musik · 3D | Video · Webhook | Endzustand | Bedeutung |
|---|---|---|---|---|
| NOT_START | processing | queued | nein | Vom Gateway angenommen, noch keinem Kanal übergeben. |
| SUBMITTED | queued | queued | nein | An den Upstream gesendet und vom Anbieter bestätigt. |
| QUEUED | queued | queued | nein | Wartet in der Warteschlange des Anbieters. |
| IN_PROGRESS | processing | in_progress | nein | Wird gerendert. progress enthält einen Prozentwert als String, z. B. "60%". |
| SUCCESS | succeeded | completed | ja | Abgeschlossen. Rufen Sie das Ergebnis über /content ab. |
| FAILURE | failed | failed | ja | Endgültig fehlgeschlagen. fail_reason nennt den Grund; das reservierte Kontingent wird erstattet. |
| UNKNOWN | unknown | unknown | nein | Der Anbieter meldet keinen Status mehr, den das Gateway zuordnen kann. Fragen Sie mit einer Frist weiter ab und gleichen Sie dann ab — werten Sie es weder als Erfolg noch als Fehlschlag. |
Auf die Menge der Endzustände prüfen, nie auf „läuft nicht“
UNKNOWN ist kein Fehlschlag
#Sichere Abfrageschleife
Stoppen Sie bei den Endzustandswörtern der Familie, die Sie abfragen, setzen Sie für alles andere eine feste Zeitgrenze, und nutzen Sie Backoff, damit ein hängender Task nicht zur Endlosschleife wird.
import time, requests
# The two vocabularies. Pick the one that matches the endpoint you poll.
TASK_DONE, TASK_FAILED = {"succeeded"}, {"failed"} # images / music / 3D
VIDEO_DONE, VIDEO_FAILED = {"completed"}, {"failed"} # videos + webhooks
DEADLINE_SECONDS = 15 * 60
def wait_for_image_task(task_id, api_key):
started = time.monotonic()
delay = 2
while True:
response = requests.get(
f"https://www.aisplice.store/v1/images/tasks/{task_id}",
headers={"Authorization": f"Bearer {api_key}"},
timeout=30,
)
response.raise_for_status()
task = response.json()
status = task.get("status", "")
if status in TASK_DONE:
return task
if status in TASK_FAILED:
raise RuntimeError((task.get("error") or {}).get("message", "task failed"))
# queued / processing / unknown all mean "not finished". Wait — but
# never forever: hand an overdue task to reconciliation.
if time.monotonic() - started > DEADLINE_SECONDS:
raise TimeoutError(f"task {task_id} still {status} after the deadline")
time.sleep(delay)
delay = min(delay * 1.5, 15)Nach Neustarts fortsetzen
#Aufbewahrung der Ergebnisse
Rufen Sie /content erst nach Erfolg ab. Speichern Sie die zurückgegebene Plattform-URL in Ihrem Geschäftsdatensatz und laden Sie eine eigene Kopie herunter, wenn Ihre Aufbewahrungsanforderungen unabhängigen Speicher verlangen.
Immer noch nicht gelöst?
Senden Sie uns die Anfrage-ID oder die Fehlermeldung, und wir sehen uns das an.