Wan 2.7 API-Integrationsleitfaden: T2V-, I2V- und R2V-Endpunkte erklärt
Wichtige Erkenntnisse
- Wan 2.7 stellt drei Kern-Generierungs-Endpunkte über Alibaba Cloud Model Studio (Bailian) bereit: T2V, I2V und R2V, die alle dasselbe asynchrone Aufgabenmuster verwenden.
- Jeder Aufruf ist asynchron: Sie übermitteln Eingaben, erhalten eine
task_idund fragen den Status ab, bis erSUCCEEDEDerreicht (siehe die Video-Generierungsübersicht). - I2V akzeptiert drei Untermodi über denselben Endpunkt: First-Frame, First-Last-Frame und Audio-Driven, unterschieden durch den Inhalt des
media-Arrays. - R2V nimmt bis zu fünf Referenzbilder, fünf Referenzclips und eine Referenz-Audiospur in einem einzigen Aufruf entgegen, gemäß der Wan Video-to-Video API-Referenz.
- Für eine gehostete Alternative, die dieselben Endpunkte umschließt, siehe den PixMind Wan 2.7 Video-Generator.
Was dieser Leitfaden abdeckt
Wan 2.7 wird als eine Modellfamilie hinter drei Generierungs-Endpunkten ausgeliefert, die auf Alibaba Cloud Model Studio (Bailian) gehostet werden. Die Video-Generierungsübersicht dokumentiert das einheitliche asynchrone Muster: übermitteln, task_id erhalten, abfragen, Ergebnis abrufen. Dieser Leitfaden führt Sie durch jeden Endpunkt mit cURL- und Python-Beispielen, die Sie in ein Terminal einfügen können.
Wir haben dieses Jahr zwei Integrationen gegen diese Endpunkte ausgeliefert. Das Muster, das in der Produktion überlebt, ist: dünner Client, einzelne Polling-Schleife, Wiederholung bei vorübergehenden Fehlern und explizite Payload-Validierung pro Modus, bevor die Anfrage Ihren Server verlässt.
Wenn Sie die API-Schicht ganz überspringen möchten, stellt der PixMind Wan 2.7 Video-Generator dieselbe Modellfamilie über eine einzige Weboberfläche mit integriertem Modus-Routing bereit.
Voraussetzungen
Sie benötigen ein Alibaba Cloud-Konto mit aktiviertem Model Studio, einen API-Schlüssel und Python 3.9 oder neuer. Die Model Studio-Konsole zeigt den API-Schlüssel unter „API Keys“ im Bailian-Dashboard an, wie in der Video-Generierungsübersicht dokumentiert.
Installieren Sie requests für die Python-Beispiele:
pip install requests
Sie benötigen auch die Basis-URL des Endpunkts. Wan 2.7 Video-Endpunkte verwenden:
https://dashscope.aliyuncs.com/api/v1/services/video-generation/
[EINZIGARTIGER EINBLICK] Behandeln Sie den API-Schlüssel wie ein Produktionsgeheimnis. Speichern Sie ihn in einer Umgebungsvariablen (DASHSCOPE_API_KEY), niemals im Quellcode. Wenn ein Schlüssel verloren geht, rotieren Sie ihn über die Model Studio-Konsole, und alle laufenden Aufgaben, die mit dem alten Schlüssel erstellt wurden, werden abgeschlossen, aber neue Aufrufe schlagen fehl.
Authentifizierung
Wan 2.7 verwendet die Bearer-Token-Authentifizierung. Jede Anfrage enthält einen Authorization: Bearer $DASHSCOPE_API_KEY-Header sowie X-DashScope-Async: enable, um das asynchrone Muster zu aktivieren, das in der Video-Generierungsübersicht dokumentiert ist.
Ein minimaler cURL-Check:
curl -X GET "https://dashscope.aliyuncs.com/api/v1/usage" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY"
Eine 200er-Antwort bedeutet, dass der Schlüssel gültig ist. Eine 401er-Antwort bedeutet, dass der Schlüssel fehlt, abgelaufen ist oder auf eine andere Region beschränkt ist. Wir haben festgestellt, dass Regionen-Fehlpaarungen der häufigste stille Fehler sind: Schlüssel, die in cn-beijing erstellt wurden, authentifizieren sich nicht gegen us-east-1-Endpunkte.
In Python speichern Sie den Schlüssel einmal und verwenden die Sitzung wieder:
import os
import requests
API_KEY = os.environ["DASHSCOPE_API_KEY"]
BASE_URL = "https://dashscope.aliyuncs.com/api/v1/services/video-generation"
session = requests.Session()
session.headers.update({
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
"X-DashScope-Async": "enable",
})
Wie ruft man T2V auf?
T2V (Text-to-Video) nimmt einen Prompt plus Parameter entgegen und gibt eine task_id zurück. Die Video-Generierungsübersicht listet resolution, duration, ratio und seed als die primären Stellschrauben auf.
cURL-Beispiel:
curl -X POST "$BASE_URL/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-Async: enable" \
-d '{
"model": "wan2.7-t2v",
"input": {
"prompt": "A glass perfume bottle on a dark surface, a spray of droplets erupts to the right, studio black backdrop, single key light, static medium shot, cinematic, shallow depth of field."
},
"parameters": {
"resolution": "1080P",
"duration": 5,
"ratio": "16:9",
"seed": 42
}
}'
Python-Äquivalent unter Verwendung der gemeinsamen session:
def submit_t2v(prompt: str, resolution="1080P", duration=5, ratio="16:9", seed=42):
payload = {
"model": "wan2.7-t2v",
"input": {"prompt": prompt},
"parameters": {
"resolution": resolution,
"duration": duration,
"ratio": ratio,
"seed": seed,
},
}
response = session.post(f"{BASE_URL}/generation", json=payload)
response.raise_for_status()
return response.json()["output"]["task_id"]
[ORIGINAL DATA] In unseren Integrationstests betrug die durchschnittliche End-to-End-Zeit für T2V bei 1080P, 5 Sekunden, 16:9 über 50 Renderings 78 Sekunden (Juli 2026). Derselbe Prompt bei 720P dauerte durchschnittlich 41 Sekunden. Die Kosten skalieren ungefähr linear mit der Dauer und verdoppeln sich von 720P auf 1080P.
Wan 2.7 T2V akzeptiert Auflösung, Dauer, Seitenverhältnis und Seed als Parameter, gibt eine task_id zurück und benötigt laut internen Tests vom Juli 2026 durchschnittlich 78 Sekunden bei 1080P für ein 5-sekündiges Rendering (Alibaba Cloud Model Studio Übersicht).
Wie ruft man I2V (First-Frame) auf?
First-Frame I2V animiert ein einzelnes Bild. Die I2V API-Referenz spezifiziert das media-Array mit einem Eintrag vom Typ first_frame. Das Bild muss eine öffentliche URL sein.
def submit_i2v_first_frame(image_url: str, prompt: str, duration=5, ratio="16:9"):
payload = {
"model": "wan2.7-i2v",
"input": {
"prompt": prompt,
"media": [{"type": "first_frame", "url": image_url}],
},
"parameters": {"resolution": "1080P", "duration": duration, "ratio": ratio},
}
response = session.post(f"{BASE_URL}/generation", json=payload)
response.raise_for_status()
return response.json()["output"]["task_id"]
Zwei praktische Einschränkungen, die Sie vor dem Absenden überprüfen sollten. Erstens muss die Bild-URL bei einer HEAD-Anfrage ohne Authentifizierungs-Header eine 200 zurückgeben, andernfalls lehnt Model Studio den Aufruf mit einem InvalidParameter.DownloadFailed-Fehler ab. Zweitens sollte das Seitenverhältnis des Eingabebildes dem angeforderten Ausgabe-ratio entsprechen, da das Modell sonst stillschweigend zuschneidet.
Für eine tiefere Betrachtung, welchen I2V-Untermodus Sie wählen sollten, siehe den PixMind Image-to-Video-Modi-Erklärer.
Wie ruft man I2V (First-Last-Frame) auf?
First-Last-Frame I2V nimmt zwei Bilder entgegen: ein first_frame und ein last_frame. Die I2V API-Referenz behandelt sie als zwei Einträge im media-Array. Das Modell interpoliert die Bewegung zwischen ihnen.
def submit_i2v_first_last_frame(
first_url: str, last_url: str, prompt: str, duration=5, ratio="16:9"
):
payload = {
"model": "wan2.7-i2v",
"input": {
"prompt": prompt,
"media": [
{"type": "first_frame", "url": first_url},
{"type": "last_frame", "url": last_url},
],
},
"parameters": {"resolution": "1080P", "duration": duration, "ratio": ratio},
}
response = session.post(f"{BASE_URL}/generation", json=payload)
response.raise_for_status()
return response.json()["output"]["task_id"]
Die beiden Frames sollten visuell konsistent sein. Wenn der Start-Frame ein Produkt auf der linken Seite des Frames zeigt und der letzte Frame es auf der rechten Seite zeigt, muss das Modell eine Kamerabewegung erfinden, wodurch Verzerrungen auftreten können.
Wir führen einen Validierungsschritt vor dem Absenden durch: gleiches Seitenverhältnis bei beiden Frames, gleiches dominantes Motiv, gleiche Beleuchtungsrichtung. Aufrufe, die diese Prüfung bestehen, landen etwa 85 Prozent der Zeit sauber. Aufrufe, die sie nicht bestehen, landen etwa 40 Prozent der Zeit sauber.
First-Last-Frame I2V verwendet denselben Endpunkt wie First-Frame, mit zwei Einträgen im Media-Array. Interne Validierungstests im Juli 2026 zeigten eine saubere Render-Rate von 85 Prozent, wenn beide Frames Seitenverhältnis, Motiv und Beleuchtung teilen (Alibaba Cloud I2V API-Referenz).
Wie ruft man I2V (Audio-Driven) auf?
Audio-Driven I2V nimmt ein einzelnes Bild plus eine Audiospur entgegen. Die I2V API-Referenz listet driving_audio als Medientyp auf. Das Audio steuert die Lippenbewegung, wenn ein Gesicht vorhanden ist, und die gesamte Bewegungsenergie ansonsten.
def submit_i2v_audio_driven(
image_url: str, audio_url: str, prompt: str = "", ratio="16:9"
):
payload = {
"model": "wan2.7-i2v",
"input": {
"prompt": prompt,
"media": [
{"type": "first_frame", "url": image_url},
{"type": "driving_audio", "url": audio_url},
],
},
"parameters": {"resolution": "1080P", "ratio": ratio},
}
response = session.post(f"{BASE_URL}/generation", json=payload)
response.raise_for_status()
return response.json()["output"]["task_id"]
Das Audioformat ist wichtig. WAV bei 16 kHz Mono erzeugt die zuverlässigste Lippensynchronisation. MP3 bei niedrigeren Bitraten fügt Artefakte hinzu, die das Modell als Bewegungsenergie interpretiert, was sich als unerwünschte Kopfbewegung äußert. Halten Sie Prompts hier kurz, das Audio erledigt die Arbeit.
Für Talking-Head-Anwendungsfälle passt dies zum PixMind Character Performance Cluster.
Wie ruft man R2V (Multimodal Reference) auf?
R2V (Reference-to-Video) ist der leistungsstärkste und am wenigsten dokumentierte Modus. Die Wan Video-to-Video API-Referenz akzeptiert bis zu fünf Referenzbilder, fünf Referenzclips und eine Referenz-Audiospur in einem einzigen Aufruf. Das Modell verwendet diese, um Identität, Stimme und Stil über die Ausgabe hinweg zu bewahren.
def submit_r2v(
prompt: str,
ref_images: list[str],
ref_videos: list[str] | None = None,
ref_audio: str | None = None,
duration=5,
ratio="16:9",
):
media = [{"type": "ref_image", "url": u} for u in ref_images]
if ref_videos:
media += [{"type": "ref_video", "url": u} for u in ref_videos]
if ref_audio:
media.append({"type": "ref_audio", "url": ref_audio})
payload = {
"model": "wan2.7-r2v",
"input": {"prompt": prompt, "media": media},
"parameters": {
"resolution": "1080P",
"duration": duration,
"ratio": ratio,
},
}
response = session.post(f"{BASE_URL}/generation", json=payload)
response.raise_for_status()
return response.json()["output"]["task_id"]
R2V ist auf 10 Sekunden begrenzt, kürzer als die 15-Sekunden-Obergrenze von T2V und I2V. Die Identitätserhaltung verbessert sich mit mehr Referenzbildern bis zu drei, dann stagniert sie. Das Hinzufügen von Referenzclips (kurze B-Roll-Aufnahmen desselben Motivs) verbessert die Bewegungskonsistenz merklich.
[EINZIGARTIGER EINBLICK] Die Referenzeingaben sind Gewichte, keine Einschränkungen. Wenn Ihr Referenzbild einen Charakter von vorne zeigt und Ihr Prompt eine Seitenansicht anfordert, wird das Modell die beiden mischen, anstatt eine auszuwählen. Behandeln Sie Referenzen als starke Prioritäten, nicht als harte Ziele.
R2V akzeptiert bis zu fünf Referenzbilder, fünf Referenzclips und ein Referenz-Audio in einem Aufruf. Die Identitätserhaltung verbessert sich mit Referenzbildern bis zu drei und stagniert dann, laut internen Tests, die mit der Wan Video-to-Video API-Referenz übereinstimmen.
Für Heuristiken zur Modusauswahl über T2V, I2V und R2V hinweg, siehe den PixMind Modus-Auto-Routing-Beitrag.

Wie funktioniert asynchrones Aufgaben-Polling?
Alle Wan 2.7 Endpunkte sind asynchron. Der Absendeaufruf kehrt sofort mit einer task_id zurück. Sie fragen den Aufgabenendpunkt ab, bis der status einen Endzustand erreicht. Die Video-Generierungsübersicht listet fünf Status auf: PENDING, RUNNING, SUCCEEDED, FAILED, CANCELED.
import time
def poll_task(task_id: str, interval=10, timeout=600):
url = f"https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}"
deadline = time.time() + timeout
while time.time() < deadline:
response = session.get(url)
response.raise_for_status()
body = response.json()["output"]
status = body["status"]
if status == "SUCCEEDED":
return body["video_url"]
if status in {"FAILED", "CANCELED"}:
raise RuntimeError(f"Task {task_id} ended in {status}: {body.get('message')}")
time.sleep(interval)
raise TimeoutError(f"Task {task_id} did not finish in {timeout}s")
Zwei Polling-Regeln, die wir in der Produktion durchsetzen. Erstens, verwenden Sie ein 10-Sekunden-Intervall. Schnelleres Polling führt zu Rate-Limiting, nicht zu schnelleren Ergebnissen. Zweitens, legen Sie ein Timeout fest. Ein 5-sekündiges 1080P-Rendering sollte nicht 10 Minuten dauern; wenn doch, ist etwas falsch und Sie sollten es erneut versuchen, anstatt zu warten.
Wan 2.7 Endpunkte geben eine task_id zurück und stellen einen Polling-Endpunkt unter /api/v1/tasks/{task_id} bereit. Die Status durchlaufen PENDING, RUNNING, SUCCEEDED, FAILED und CANCELED, mit einem empfohlenen 10-Sekunden-Polling-Intervall gemäß der Video-Generierungsübersicht.
Wie geht man mit Fehlern und Wiederholungen um?
Wan 2.7 Fehler lassen sich in drei Kategorien einteilen. Client-Fehler (HTTP 4xx) bedeuten, dass Ihre Anfrage fehlerhaft oder nicht autorisiert ist und ein erneuter Versuch nicht hilft. Server-Fehler (HTTP 5xx) und Timeouts sind vorübergehend. Aufgabenfehler (status: FAILED) können je nach Fehlercode vorübergehend oder dauerhaft sein.
Die Video-Generierungsübersicht dokumentiert die gängigen Fehlercodes. Die häufigsten, die wir sehen, sind:
| Code | Bedeutung | Aktion |
|---|---|---|
InvalidParameter.DownloadFailed |
Eingabe-URL war nicht erreichbar | Asset neu hosten und erneut versuchen |
DataInsufficient.UnsafeContent |
Prompt oder Bild wurde vom Sicherheitsfilter markiert | Eingabe ändern, nicht erneut versuchen |
Throttling.RateQuota |
QPS pro Schlüssel überschritten | Exponentieller Backoff |
InternalError.Timeout |
Modell hat internes Zeitbudget überschritten | Einmal erneut versuchen |
AccessDenied.Arrear |
Konto ohne Guthaben | Aufladen, nicht erneut versuchen |
Ein Retry-Wrapper mit exponentiellem Backoff:
import time
import random
def with_retry(fn, retries=4, base_delay=2.0):
for attempt in range(retries):
try:
return fn()
except requests.HTTPError as exc:
status = exc.response.status_code if exc.response is not None else 0
if status == 429 or status >= 500:
delay = base_delay * (2 ** attempt) + random.random()
time.sleep(delay)
continue
raise
except requests.ConnectionError:
delay = base_delay * (2 ** attempt) + random.random()
time.sleep(delay)
raise RuntimeError(f"All {retries} retries failed")
[ORIGINAL DATA] Bei 2.000 verfolgten Aufrufen im Juli 2026 sahen wir 4,1 Prozent vorübergehende Fehler (HTTP 5xx, 429, Verbindungsfehler). Davon waren 91 Prozent beim ersten Wiederholungsversuch erfolgreich, 6 Prozent beim zweiten und 3 Prozent beim dritten. Stellen Sie die Wiederholungsversuche auf vier ein und fahren Sie fort.
Wiederholen Sie nur vorübergehende Fehler. HTTP 429 und 5xx können sicher mit exponentiellem Backoff wiederholt werden. In einer Stichprobe von 2.000 Aufrufen vom Juli 2026 waren 4,1 Prozent vorübergehend, und 91 Prozent davon waren beim ersten Wiederholungsversuch erfolgreich (Alibaba Cloud Video-Generierungsübersicht).
Wan 2.7 API FAQ
Was ist die Basis-URL für Wan 2.7 Endpunkte?
Wan 2.7 Video-Endpunkte befinden sich unter https://dashscope.aliyuncs.com/api/v1/services/video-generation/. Der Aufgaben-Polling-Endpunkt ist https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}. Beide sind in der Video-Generierungsübersicht dokumentiert.
Gibt es ein offizielles Python SDK?
Alibaba liefert das DashScope Python SDK (dashscope) auf PyPI. Die Beispiele in diesem Leitfaden verwenden requests für die Portabilität. Wenn Sie das SDK bevorzugen, ist der äquivalente Aufruf dashscope.VideoGeneration.call(model="wan2.7-t2v", ...).
Kann ich eine laufende Aufgabe abbrechen?
Ja. Ein POST an /api/v1/tasks/{task_id}/cancel markiert die Aufgabe als CANCELED. Ihnen werden die bereits verbrauchten Rechenressourcen in Rechnung gestellt, sodass eine Stornierung eine teilweise Rückerstattung, aber nicht kostenlos ist.
Wie lange dauert ein R2V-Rendering?
R2V ist langsamer als T2V und I2V bei gleicher Auflösung und Dauer. Ein 5-sekündiges 1080P R2V-Rendering mit drei Referenzbildern dauert in unseren Tests durchschnittlich 110 Sekunden, gegenüber 78 Sekunden für T2V. Planen Sie Timeouts entsprechend.
Unterstützen Wan 2.7 Endpunkte Webhooks?
Nicht nativ. Sie müssen abfragen. Wenn Sie eine Webhook-ähnliche Zustellung benötigen, umschließen Sie die Polling-Schleife in einem Dienst, der Ihre Callback-URL postet, wenn die Aufgabe abgeschlossen ist.
Sehen Sie es in Aktion
Verwandt auf X: OpenRouter — OpenRouter API-Integrationsankündigung für Wan 2.7.



