promptstringErforderlichDer Shot selbst: Motiv, eine Handlung, eine Kamerabewegung, dann Licht und Ton. Lange Adjektivlisten bewegen das Ergebnis weniger als eine klare Handlung.
- Standardwert
- Nicht festgelegt
- Einschränkungen
- minLength:1
Wan 3.0 Prime Text-zu-Video ist Alibabas schnelles Wan 3.0 und macht aus einem Prompt 2 bis 30 Sekunden mit Ton in derselben Datei. Es rendert in 480p, 720p oder 1080p in fünf Seitenverhältnissen, mit demselben Anfragekörper wie Wan 3.0.
Die Beispiele verwenden die öffentlichen Parameter des gewählten Endpunkts. Ersetzen Sie API-Schlüssel und Beispielmedien und senden Sie die Anfrage von Ihrem Server.
SDKs & Integrationenhttps://api.spicyapi.ai/api/v1/jobs/createTaskBewahren Sie den API-Schlüssel serverseitig in der Umgebungsvariablen SPICY_API_KEY auf. Verwenden Sie Bearer-Authentifizierung und für JSON-Anfragen Content-Type: application/json.
Authorization: Bearer $SPICY_API_KEY# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
-d '{
"model": "alibaba/wan-3.0-prime/text-to-video",
"input": {
"prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
"resolution": "720p",
"aspect_ratio": "16:9",
"duration_seconds": 5
}
}'
# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"Erzeugt aus dem Eingabeschema dieses Modells – genau dem, gegen das die API jede Anfrage prüft.
Diese Felder gehören in das input-Objekt des Request-Bodys. Namen und Typen entsprechen der API. Wo kein Standardwert angegeben ist, dürfen Sie auch keinen annehmen.
promptstringErforderlichDer Shot selbst: Motiv, eine Handlung, eine Kamerabewegung, dann Licht und Ton. Lange Adjektivlisten bewegen das Ergebnis weniger als eine klare Handlung.
seedintegerOptional0 bis 2147483647. Festhalten, um ein geändertes Feld nach dem anderen zu vergleichen; weglassen für Vielfalt.
enable_prompt_expansionbooleanOptionalStandardmäßig aus. Eingeschaltet wird der Prompt vor der Generierung umgeschrieben, was dünnen Briefings hilft und bei ausführlichen gegen Sie arbeitet.
generate_audiobooleanOptionalStandardmäßig an. Der Clip kommt mit bereits am Bild verankertem Ton zurück. Auf false setzen, wenn Sie die Einstellung selbst vertonen.
duration_secondsintegerOptionalPreisrelevantJede ganze Zahl von 2 bis 30 oder -1 für die automatische Dauer, bei der das Modell die Länge wählt: Das Maximum von 30 Sekunden wird vorab reserviert, abgerechnet wird die tatsächlich gelieferte Länge. Vorgabe 5. Längere Clips driften stärker – klären Sie den Look bei 5 Sekunden, bevor Sie verlängern.
-123456789101112131415161718192021222324252627282930resolutionstringOptionalPreisrelevant480p, 720p oder 1080p. Vorgabe 720p. Die Auflösung ändert den Preis und die Zeit, bis der Task zurückkommt.
"480p""720p""1080p"enable_thinkingbooleanOptionalLässt das Modell den Auftrag und das Referenzmaterial vor der Generierung durchdenken. Das hilft bei umfangreichen Dokumenten, Webseiten und komplexen Referenzbildern und macht den Lauf langsamer. Standardmäßig aus; mit einer Referenzdatei oder einem Link schaltet es sich automatisch ein. Am Preis ändert es nichts.
aspect_ratiostringOptional16:9, 9:16, 1:1, 4:3, 3:4 oder adaptive, womit das Modell wählt. Vorgabe ist 16:9.
"16:9""9:16""1:1""4:3""3:4""adaptive"{
"type": "object",
"required": [
"prompt"
],
"x-pricing": {
"billingMode": "duration_capped",
"variantFields": [
"resolution"
]
},
"properties": {
"seed": {
"type": "integer",
"x-ui": {
"order": 10,
"widget": "number"
},
"maximum": 2147483647,
"minimum": 0,
"description": "Random seed. Keep it fixed only for controlled comparisons, not as a frame-identical guarantee."
},
"prompt": {
"type": "string",
"x-ui": {
"order": 100,
"widget": "textarea",
"primary": true
},
"minLength": 1,
"description": "Describe the subject, action, camera, light, pacing, and boundaries for the shot."
},
"resolution": {
"enum": [
"480p",
"720p",
"1080p"
],
"type": "string",
"x-ui": {
"order": 60,
"widget": "radio",
"advanced": false,
"affects_price": true
},
"default": "720p",
"description": "Output resolution."
},
"aspect_ratio": {
"enum": [
"16:9",
"9:16",
"1:1",
"4:3",
"3:4",
"adaptive"
],
"type": "string",
"x-ui": {
"order": 70,
"widget": "select"
},
"default": "16:9",
"description": "Output aspect ratio; adaptive follows the input media and the intent."
},
"generate_audio": {
"type": "boolean",
"x-ui": {
"order": 40,
"widget": "switch"
},
"default": true,
"description": "Request generated audio with the video."
},
"enable_thinking": {
"type": "boolean",
"x-ui": {
"order": 66,
"widget": "switch"
},
"default": false,
"description": "Let the model reason about the brief and the reference material before generating. Helps with complex references; slower. Switches on by itself when a reference file or link is given."
},
"duration_seconds": {
"enum": [
-1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30
],
"type": "integer",
"x-ui": {
"unit": "s",
"order": 50,
"widget": "slider",
"advanced": false,
"enum_labels": {
"-1": "Smart"
},
"affects_price": true
},
"default": 5,
"description": "Requested output length in seconds. Pass -1 for smart duration: the model picks the length from the prompt and any input media instead of a fixed number."
},
"enable_prompt_expansion": {
"type": "boolean",
"x-ui": {
"order": 30,
"widget": "switch"
},
"default": false,
"description": "Allow the service to expand the submitted creative brief before generation."
}
},
"additionalProperties": false
}HTTP 202 bestätigt die Annahme, nicht den Abschluss. Speichern Sie die zurückgegebene taskId und fragen Sie diesen Auftrag ab. Erstellen Sie währenddessen keinen weiteren Auftrag.
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"
}
}Diese Antwort enthält bereits die Kostenschätzung, damit Ihre Anwendung in Auftragsverlauf und Abrechnung denselben Betrag anzeigen kann.
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
--data-urlencode "taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"Beginnen Sie mit etwa 2 Sekunden Abstand und verlängern Sie das Intervall schrittweise. Bei einem Endzustand hören Sie auf. Nach einem Verbindungsfehler fragen Sie dieselbe taskId ab. Neu anlegen nur mit demselben Idempotency-Key und demselben Request-Body.
import { verifyWebhook } from "@spicyapi/sdk";
// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
const { payload } = verifyWebhook({
rawBody: req.body,
timestamp: req.header("X-Webhook-Timestamp"),
signature: req.header("X-Webhook-Signature"),
payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
secret: process.env.SPICY_WEBHOOK_SECRET,
});
res.status(200).end();
void handleFinishedTask(payload);
});Übergeben Sie callBackUrl beim Anlegen der Aufgabe, dann wird Ihnen der fertige Datensatz per POST zugestellt — ganz ohne Polling-Schleife. Jede Zustellung trägt X-Webhook-Timestamp, X-Webhook-Signature und X-Webhook-Payload-Version. Die Signatur ist ein base64-HMAC-SHA256 über taskId.timestamp.sha256(body) und muss deshalb gegen die Rohbytes geprüft werden: Wer das JSON parst und neu serialisiert, verändert sie, und die Prüfung schlägt fehl. Fehlgeschlagene Zustellungen werden wiederholt, dieselbe taskId kann also zweimal ankommen — machen Sie den Handler idempotent. Antworten Sie zuerst mit 2xx und arbeiten Sie danach; ein langsamer Handler gilt als fehlgeschlagene Zustellung.
Lesen Sie output erst aus, wenn state den Wert succeeded hat. Nutzen Sie bei Fehlern errorCode, errorMessage und request_id zur Diagnose. Beispielkosten und -zustände bilden keine tatsächliche Abrechnung ab.
{
"code": 200,
"msg": "success",
"request_id": "req_example_record",
"data": {
"taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
"model": "alibaba/wan-3.0-prime/text-to-video",
"state": "succeeded",
"output": {
"assets": [
{
"key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.mp4",
"mime": "video/mp4",
"url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.mp4?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
"expiresAt": "2026-08-28T12:20:08.000Z"
}
]
},
"cost": "0.750000",
"settled": true,
"createdAt": "2026-08-28T12:00:00Z",
"completedAt": "2026-08-28T12:00:30Z"
}
}Verfügbare Dateien lassen sich direkt über assets[].url ohne API-Authorization-Header öffnen oder herunterladen. Der signierte Link läuft zu expiresAt ab. Fragen Sie den Auftrag innerhalb der Aufbewahrungsfrist erneut ab, um den Link zu erneuern. Noch ausstehende oder nicht verfügbare Dateien haben keine URL. Behandeln Sie signierte Links vertraulich.
Nutzen Sie SpicyAPI in Ihrer App, im Terminal, mit KI-Assistenten oder in visuellen Workflows. Wählen Sie die passende Anleitung.
Weitere Integrationen
Den Code oben müssen Sie nicht schreiben. Verbinden Sie den MCP-Server einmal, und jeder Agent, der MCP spricht — Claude Code, Codex, Cursor, Windsurf, VS Code, Gemini CLI, Cline, LibreChat — ruft dieses Modell beim Namen auf. Oder Sie starten es mit einem einzigen Befehl in der Shell.
Nimm alibaba/wan-3.0-prime/text-to-video für fünf Sekunden Dachterrasse im Neonlicht der Dämmerung, langsame Fahrt nach vorn, und speichere das Ergebnis in ./out/.
Der Agent schlägt das Modell im Katalog nach, lädt die lokale Datei für Sie hoch und zeigt Ihnen dann den genauen Kostenvoranschlag samt Höchstbetrag — und wartet auf Ihre Bestätigung. Vorher wird nichts abgerechnet.
claude mcp add spicyapi -e SPICY_API_KEY=$SPICY_API_KEY \
-- npx --yes --package=@spicyapi/mcp spicyapi-mcp
npx skills add spicyapi-ai/spicy-skillDie erste Zeile gibt dem Agent die Werkzeuge, die zweite den Skill — die Spielregeln dazu: erst Preis nennen, dann abrechnen; lokale Dateien hochladen statt Bytes einzufügen; die URL des fertigen Ergebnisses lesen statt sie zu raten. Alle anderen Clients binden denselben Server über ihre eigene Konfigurationsdatei ein, siehe Entwicklerbereich.
npx @spicyapi/cli tasks create --model alibaba/wan-3.0-prime/text-to-video \
--input-json '{"prompt":"A slow aerial shot drifting over a misty pine forest at sunrise","resolution":"720p","aspect_ratio":"16:9","duration_seconds":5}' \
--waitDie Eingabe stammt aus dem Schema dieses Endpunkts, genau wie die Beispiele oben. --wait wartet den Task ab und gibt ihn aus; --yes überspringt die Rückfrage in der CI. Setzen Sie vorher SPICY_API_KEY – ein Schlüssel für API, CLI und MCP-Server.
npx @spicyapi/cli tasks create --model alibaba/wan-3.0-prime/text-to-video \
--input-json '{…}' --retention 1h --wait
npx @spicyapi/cli tasks get $TASK_ID # read back the retention that applied--retention verkürzt die Aufbewahrung nur — 30m, 1h, 7d, oder 0: löschen, sobald die Aufgabe einen Endzustand erreicht. Es gilt immer der kürzeste Wert aus Anfrage, Kontoeinstellung und Plattform-Obergrenze; lesen Sie ihn deshalb aus dem Datensatz zurück, statt den angefragten Wert vorauszusetzen. Ein längeres Fenster als vom Konto erlaubt bewirkt nichts.
Installieren Sie die SpicyAPI-Nodes über den ComfyUI Manager oder mit dem Befehl unten und suchen Sie auf der Arbeitsfläche nach Wan 3.0 Prime · Text to Video. Der Node bietet dieselben Optionen wie diese Seite und zeigt seinen Preis, bevor er läuft.
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapiDas eingebettete Panel liest dasselbe Schema wie diese Seite und kann daher nicht von der API abweichen. Soll der Inhalt in Ihrer Dokumentation durchsuchbar bleiben, holen Sie stattdessen das JSON unter /api/embed/models/ und rendern es selbst.
<iframe src="https://spicyapi.ai/embed/de/models/wan-3-0-prime/api?model=alibaba%2Fwan-3.0-prime%2Ftext-to-video" width="100%" height="560" loading="lazy" title="Anfragebeispiel" style="border:1px solid rgba(0,0,0,.12)"></iframe>