Generierungen
Verfolgen Sie eine Generierung der Direct API per Long-Polling bis zu ihrem endgültigen Status, lesen Sie mehrere auf einmal und erfahren Sie, wann Sie abfragen sollten.
Eine Generierung ist eine asynchrone Arbeitseinheit: ein Bild, ein Video, eine Audiospur, ein Render. Tools mit returns_generation: true starten eine oder mehrere davon und antworten sofort mit ihren IDs. Verfolgen Sie sie per Polling, per Webhook oder beidem: Nutzen Sie einen Webhook als Hauptsignal und eine gelegentliche Abfrage als Sicherheitsnetz.
Status
queued ──► in_progress ──► succeeded
│ │
│ ├──────► failed
└─────────────┴──────► cancelled| Status | Endgültig | Bedeutung |
|---|---|---|
queued | nein | angenommen, wartet auf Modellkapazität |
in_progress | nein | das Modell arbeitet |
succeeded | ja | assets enthält die Ausgabe |
failed | ja | error nennt den Grund; die Belastung wird erstattet, und billing.credits_refunded gibt an, wie viel |
cancelled | ja | gestoppt, bevor eine Ausgabe entstand; die Belastung wird erstattet |
Behandeln Sie jeden Status, den Sie nicht kennen, als nicht endgültig und verfolgen Sie die Generierung weiter; neue Zwischenstatus können hinzukommen.
Das Generierungsobjekt
{
"object": "generation",
"id": "0192a7b3-a1c4-7e02-8f9d-1a2b3c4d5e6f",
"tool": "generate_video",
"status": "succeeded",
"project_id": "01928f4e-5b7c-7d2a-9e11-3c4b5a6d7e8f",
"model_id": "mdl_7rk2pq9vxa4m",
"created_at": "2026-10-25T09:14:03.120Z",
"completed_at": "2026-10-25T09:15:41.902Z",
"error": null,
"billing": {
"estimated_credits": 120,
"credits_charged": 96,
"credits_refunded": 0,
"credits_are_final": true,
"credits_settle_on_output_duration": true
},
"assets": [
{
"id": "0192a7b4-0f1e-7d3c-9b8a-7c6d5e4f3a2b",
"type": "video",
"name": "Bicycle hero shot",
"mime_type": "video/mp4",
"width": 1920,
"height": 1080,
"duration_seconds": 8,
"url": "https://mcp.morphic.com/m/Xk29dPq",
"url_expires_at": null,
"studio_url": "https://studio.morphic.com/…",
"final_generation_expires_at": null
}
],
"content_left_out": [],
"render_warnings": [],
"metadata": { "order_id": "4411" },
"poll_after_seconds": null
}| Feld | Bedeutung |
|---|---|
error | null oder bei failed { "error_code": "…", "message": "…" }. Die Meldung kann Ihren Nutzern bedenkenlos angezeigt werden. |
billing | was diese Generierung gekostet hat; siehe Credits und Nutzung |
assets[].id | die Asset-ID, die andere Tools als Eingabe annehmen (image_asset_id, video_asset_id, …) |
assets[].url | ein Kurzlink zum Herunterladen der Medien; er läuft nicht ab, und url_expires_at ist null |
assets[].studio_url | öffnet das Asset in Morphic Studio für Ihr Team |
assets[].final_generation_expires_at | nur bei Videoentwürfen: bis wann finalize_video_draft es in voller Auflösung rendern kann |
content_left_out, render_warnings | nur bei Kompositionen und Timeline-Exporten: was die Ausgabe nicht aufnehmen konnte und warum |
poll_after_seconds | solange nicht endgültig: wie lange Sie bis zur nächsten Abfrage warten sollten; null, sobald endgültig |
Eine Generierung lesen
GET /v1/direct/generations/{id} antwortet mit 200 und { "generation": { … } }.
curl -s "https://mcp.morphic.com/v1/direct/generations/$ID?wait=45" \
-H "Authorization: Bearer $MORPHIC_API_KEY"waitist optional,0bis45Sekunden. Die Anfrage wird offen gehalten, bis sich der Status der Generierung ändert oder sie abgeschlossen ist, und antwortet dann sofort.- Läuft die Wartezeit ab, antwortet sie mit dem aktuellen Stand. Ein Wert über 45 wird auf 45 begrenzt.
- Eine Generierung einer anderen Organisation oder eine, die dieser Schlüssel nicht lesen darf, antwortet mit
404, nie mit403, sodass sich IDs nicht ausprobieren lassen.
Mehrere Generierungen lesen
POST /v1/direct/generations/batch-get liest bis zu 10 Generierungen in einer Anfrage.
curl -s https://mcp.morphic.com/v1/direct/generations/batch-get \
-H "Authorization: Bearer $MORPHIC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ids": ["0192a7b3-…", "0192a7b3-…"], "wait": 30}'- Mit
waitantwortet die Anfrage, sobald eine davon ihren Status ändert oder alle endgültig sind. - Die Antwort lautet
{ "generations": [ … ], "not_found": ["…"] }, in der angefragten Reihenfolge.
Wie oft Sie abfragen sollten
Jeder Start und jedes nicht endgültige Lesen enthält poll_after_seconds. Warten Sie mindestens so lange bis zur nächsten Abfrage und verlängern Sie die Abstände danach schrittweise.
| Ausgabe | Erste Abfrage nach | Typische Dauer bis zum Abschluss |
|---|---|---|
| Bild, Bildbearbeitung, Hochskalierung, Bildoperationen | 5 s | 5 bis 60 s |
| Sprache, Soundeffekt, Transkription | 10 s | 10 bis 90 s |
| Musik, Dialog | 20 s | 30 s bis 3 min |
| Video, Videobearbeitung, Lippensynchronisation, Renders | 30 s | 1 bis 10 min, unter Last länger |
Ein Long-Poll (wait=45) zählt als eine einzige Abfrage, egal wie lange er offen gehalten wird. Er ist daher sowohl die schnellste als auch die günstigste Art abzufragen. Setzen Sie das Timeout Ihres HTTP-Clients über die Wartezeit: 60 s für wait=45.
import time, requests
def wait_for(generation_id, key):
headers = {"Authorization": f"Bearer {key}"}
url = f"https://mcp.morphic.com/v1/direct/generations/{generation_id}"
while True:
r = requests.get(url, params={"wait": 45}, headers=headers, timeout=60)
if r.status_code == 429:
time.sleep(int(r.headers.get("Retry-After", "5")))
continue
r.raise_for_status()
gen = r.json()["generation"]
if gen["status"] in ("succeeded", "failed", "cancelled"):
return gen
# A long-poll already waited; only sleep if the server asks for more.
time.sleep(max(0, (gen.get("poll_after_seconds") or 0) - 45))Polling-Limits
| Limit | Wert | Bei Überschreitung |
|---|---|---|
| Abfragen einer Generierung durch einen Schlüssel | 30 pro Minute | 429, Retry-After |
| Abfragen aller Generierungen durch einen Schlüssel | 1200 pro Minute | 429, Retry-After |
wait | 45 Sekunden | begrenzt |
| IDs pro gebündeltem Lesen | 10 | 400 |
Ein gebündeltes Lesen zählt gegen beide Limits einmal pro ID. Im empfohlenen Rhythmus kann ein Schlüssel mehrere Hundert laufende Generierungen gleichzeitig verfolgen; wenn Sie mehr verfolgen, nutzen Sie Webhooks.
Wenn Sie Probleme haben oder Fragen haben, können Sie sich gerne an uns wenden. Wir helfen Ihnen gerne. Schreiben Sie uns an support@morphic.com.
Ein Tool aufrufen
Rufen Sie jedes Tool der Direct API mit derselben Anfrageform auf, lesen Sie Ergebnis und Abrechnung und wiederholen Sie kostenpflichtige Aufrufe sicher mit einem Idempotency-Key.
Webhooks
Erhalten Sie eine signierte Benachrichtigung, wenn eine Generierung der Direct API abgeschlossen ist, prüfen Sie sie und lesen Sie die Generierung für die Details.