Umstieg von fal, Replicateoder WaveSpeed
Aufrufe an Seedance 2.0 und Qwen-Image auf /v1 umstellen: Authentifizierung, Modell-IDs, jedes Feld, asynchrone Aufträge und Webhooks und was sich nicht übernehmen lässt.
Nicht nur eine neue Basis-URL
Bei keiner der drei reicht es, die Basis-URL und den Schlüssel zu ändern. Jede Anfrage ändert sich außerdem so:
- Der Schlüssel:
Authorization: Bearermit einem Schlüssel, der mitsk_test_odersk_live_beginnt. - Die Modell-ID steht im Body als
model, und eine ID deckt Text, ein Startbild und Referenzen ab. - Ein
Idempotency-Key-Header bei jeder Generierungsanfrage. - Eine Preisobergrenze:
max_creditsoder einequote_idvonPOST /v1/quotes. - Das Ergebnis ist ein Auftrag: Frag
GET /v1/jobs/{id}ab oder empfange unseren signierten Webhook.
- fal
- Am nächsten an unserer API: Die meisten Seedance-Feldnamen stammen von fal. Benenne außerdem
image_urlsinreference_image_urlsum, sendedurationals Zahl und verschiebefal_webhookalswebhook_urlin den Body. - Replicate
- Nimm die Felder aus
inputheraus. Benenne außerdemimageinimage_url,reference_imagesinreference_image_urlsundwebhookinwebhook_urlum. - WaveSpeed
- Benenne außerdem
imageinimage_urlundreference_imagesinreference_image_urlsum und verschiebestandard_webhookalswebhook_urlin den Body. Lies Ergebnisse überGET /v1/jobs/{id}.
Authentifizierung
Wohin Anfragen gehen und wie sie signiert werden.
| Plattform | Basis-URL | Auth-Header |
|---|---|---|
| Pershot | https://api.pershot.app/v1 | Authorization: Bearer $API_KEY |
| fal | https://queue.fal.run | Authorization: Key $FAL_KEY |
| Replicate | https://api.replicate.com/v1 | Authorization: Bearer $REPLICATE_API_TOKEN |
| WaveSpeed | https://api.wavespeed.ai/api/v3 | Authorization: Bearer $WAVESPEED_API_KEY |
Zugang zur Entwickler-API gibt es auf Antrag: Beantrage ihn im Studio unter API-Schlüssel. Der Schlüssel wird einmal angezeigt. Ein Entwicklerschlüssel verbraucht das Entwickler-API-Guthaben, und derselbe Schlüssel funktioniert als Bearer-Header am MCP-Server.
Modell-IDs
Bei den anderen steht die ID in der URL, bei uns im Body als model. Eine unserer IDs deckt Text, ein Startbild und Referenzen ab: Die Felder, die du sendest, entscheiden.
| Bei uns | fal | Replicate | WaveSpeed | Hinweise |
|---|---|---|---|---|
seedance-2.0-fast | bytedance/seedance-2.0/fast/text-to-videobytedance/seedance-2.0/fast/image-to-videobytedance/seedance-2.0/fast/reference-to-video | bytedance/seedance-2.0-fast | bytedance/seedance-2.0-fast/text-to-videobytedance/seedance-2.0-fast/image-to-video | Eine ID für Text, ein Startbild und Referenzbilder. |
seedance-2.0-mini | bytedance/seedance-2.0/mini/text-to-videobytedance/seedance-2.0/mini/image-to-videobytedance/seedance-2.0/mini/reference-to-video | bytedance/seedance-2.0-mini | bytedance/seedance-2.0-mini/text-to-video | Eine ID für Text, ein Startbild und Referenzbilder. |
qwen-image-2512 | fal-ai/qwen-image-2512 | qwen/qwen-image-2512 | wavespeed-ai/qwen-image/text-to-image-2512 | Dieselben offenen Gewichte. |
qwen-image-2512-lightning | fal-ai/qwen-image-2512/lora | keins | keins | Unsere 4-Schritt-Stufe Lightning. fal betreibt sie als LoRA auf seinem /lora-Endpunkt; auf Replicate oder WaveSpeed haben wir kein fertiges Lightning-Modell gefunden. |
qwen-image-edit-2511 | fal-ai/qwen-image-edit-2511 | qwen/qwen-image-edit-2511 | wavespeed-ai/qwen-image/edit-2511 | Dieselben offenen Gewichte. |
qwen-image-edit-2511-lightning | fal-ai/qwen-image-edit-2511/lora | keins | keins | Unsere 4-Schritt-Stufe Lightning. fal betreibt sie als LoRA auf seinem /lora-Endpunkt; auf Replicate oder WaveSpeed haben wir kein fertiges Lightning-Modell gefunden. |
- Für KI-Agenten
- Klartext für KI-Agenten: Eingaben, zulässige Werte, jeder Preis und ein Anfragebeispiel
seedance-2.0-fastseedance-2.0-miniqwen-image-2512-lightningqwen-image-2512qwen-image-edit-2511-lightningqwen-image-edit-2511
Seedance 2.0, Feld für Feld
Unsere Namen folgen fal, wo fal das Feld hat, und die Hinweise sagen, wo sie abweichen. Die Felder stehen auf der obersten Ebene des JSON-Bodys; Replicate verpackt sie in input.
| Bei uns | fal | Replicate | WaveSpeed | Hinweise |
|---|---|---|---|---|
model | in der URL | in der URL | in der URL | Eine ID im Body für Text, ein Startbild und Referenzen. Bei den anderen steht sie in der URL. |
prompt | prompt | prompt | prompt | Der Text bleibt gleich. |
duration | duration | duration | duration | Eine ganze Zahl, 4 bis 15, Standard 5. fal sendet einen String und bietet auto; Replicate nutzt -1 für automatisch. Eine automatische Länge gibt es hier nicht. |
resolution | resolution | resolution | resolution | 480p oder 720p, Standard 720p. WaveSpeed führt auch 1080p und 4k; hier sind höhere Auflösungen der separate Schritt enhance. |
aspect_ratio | aspect_ratio | aspect_ratio | aspect_ratio | 16:9, 9:16 oder 1:1, Standard 16:9. Kein auto, adaptive, 4:3, 3:4 oder 21:9. |
generate_audio | generate_audio | generate_audio | generate_audio | Gleiche Bedeutung, standardmäßig an. Der Preis ist mit und ohne gleich. |
image_url | image_url | image | image | Das Startbild. Derselbe Name wie bei fal; Replicate und WaveSpeed nennen es image. Nicht zusammen mit Referenzbildern. |
reference_image_urls | image_urls | reference_images | reference_images | Bis zu 9 Bilder, im Prompt @image1, @image2. Anders als bei fal, das es image_urls nennt. |
seed | keins | seed | keins | Wird akzeptiert und nicht genutzt: Seedance 2.0 nimmt keinen Seed an. fal und WaveSpeed führen keinen. |
quote_id | keins | keins | keins | Neu: Sende genau eins von beiden, quote_id oder max_credits. Ein Auftrag kostet nie mehr. |
max_credits | keins | keins | keins | Neu: Sende genau eins von beiden, quote_id oder max_credits. Ein Auftrag kostet nie mehr. |
webhook_url | fal_webhookQuery-String | webhook | standard_webhookQuery-String | Im Body. Anders als bei fal, das fal_webhook in der Query-String erwartet. |
end_user_id | end_user_id | keins | keins | Derselbe Name wie bei fal. Für freigegebene Entwicklerkonten (Zugang auf Antrag): deine eigene Nutzer-ID, sichtbar in der Nutzung. |
project_id | keins | keins | keins | Nur bei uns, optional: Projekte und Anbieter-Routing. |
shot_id | keins | keins | keins | Nur bei uns, optional: Projekte und Anbieter-Routing. |
routing_preference | keins | keins | keins | Nur bei uns, optional: Projekte und Anbieter-Routing. |
enhance | keins | keins | keins | Nur bei uns, optional: eine KI-Hochskalierung nach der Generierung, gekennzeichnet als AI Enhanced. |
Idempotency-KeyHeader | keins | keins | keins | Neu und erforderlich: Derselbe Schlüssel innerhalb von 24 Stunden liefert denselben Auftrag. |
Seedance-Felder der anderen ohne Gegenstück bei uns. Unverändert gesendet, werden sie als unbekannte Felder abgelehnt (400 invalid_request).
- fal
end_image_urlvideo_urlsaudio_urlsbitrate_modecodec- Replicate
last_frame_imagereference_videosreference_audios- WaveSpeed
last_imagereference_videosreference_audiosenable_web_search
Qwen-Image, Feld für Feld
Unser Bild-Body ist kleiner als ihrer: eine Größe und ein Seitenverhältnis statt freier Pixelmaße, ein Bild pro Auftrag und keine Sampler-Einstellungen.
| Bei uns | fal | Replicate | WaveSpeed | Hinweise |
|---|---|---|---|---|
model | in der URL | in der URL | in der URL | Vier IDs im Body: Image Mini und Image Fast, jeweils zum Generieren und Bearbeiten. |
prompt | prompt | prompt | prompt | Der Text bleibt gleich. |
size | image_size | keins | size | 1K oder 2K, Standard 1K. Zusammen mit dem Seitenverhältnis ergibt das eine feste Größe, höchstens 2048 px pro Seite. Keine freie Breite und Höhe. |
aspect_ratio | image_size | aspect_ratio | size | 16:9, 9:16 oder 1:1, Standard 1:1. Es ändert den Preis nicht. |
image_url | image_urls | image | images | Nur Bearbeitungsmodelle: genau ein Ausgangsbild, als URL. Die anderen nehmen eine Liste. |
seed | seed | seed | seed | Gleiche Bedeutung. |
quote_id | keins | keins | keins | Neu: Sende genau eins von beiden, quote_id oder max_credits. Ein Auftrag kostet nie mehr. |
max_credits | keins | keins | keins | Neu: Sende genau eins von beiden, quote_id oder max_credits. Ein Auftrag kostet nie mehr. |
webhook_url | fal_webhookQuery-String | webhook | standard_webhookQuery-String | Im Body. Anders als bei fal, das fal_webhook in der Query-String erwartet. |
end_user_id | keins | keins | keins | Nur bei uns, optional, für freigegebene Entwicklerkonten (Zugang auf Antrag): deine eigene Nutzer-ID, sichtbar in der Nutzung. |
project_id | keins | keins | keins | Nur bei uns, optional: Projekte und Anbieter-Routing. |
shot_id | keins | keins | keins | Nur bei uns, optional: Projekte und Anbieter-Routing. |
routing_preference | keins | keins | keins | Nur bei uns, optional: Projekte und Anbieter-Routing. |
Idempotency-KeyHeader | keins | keins | keins | Neu und erforderlich: Derselbe Schlüssel innerhalb von 24 Stunden liefert denselben Auftrag. |
Qwen-Image-Felder der anderen ohne Gegenstück bei uns. Unverändert gesendet, werden sie als unbekannte Felder abgelehnt (400 invalid_request).
- fal
negative_promptnum_inference_stepsguidance_scalenum_imagesoutput_formataccelerationenable_safety_checkersync_modeloras- Replicate
negative_promptstrengthwidthheightguidancenum_inference_stepsgo_fastoutput_formatoutput_qualitydisable_safety_checkerlora_weightslora_scale- WaveSpeed
widthheightoutput_formatenable_base64_outputenable_sync_mode
Asynchrone Aufträge und Webhooks
Alle vier führen Aufträge im Hintergrund aus. So nennt jede Plattform die Schritte:
| Schritt | Pershot | fal | Replicate | WaveSpeed |
|---|---|---|---|---|
| Erstellen | POST /v1/videos/generationsPOST /v1/images/generations202 → { id: "job_…" } | POST https://queue.fal.run/<endpoint id>→ request_id, status_url, response_url | POST /v1/models/{owner}/{name}/predictions{ "input": { … } } | POST /api/v3/<model id>→ data.id |
| Abfragen | GET /v1/jobs/{id} | GET status_urlGET response_url | GET /v1/predictions/{id} | GET /api/v3/predictions/{id}/result |
| Status | queuedprocessingsucceededfailedcancelledunknown | IN_QUEUEIN_PROGRESSCOMPLETED | startingprocessingsucceededfailedcanceled | createdcompletedfailedcancelledtimeoutdeleted |
| Webhook | webhook_url (body) | ?fal_webhook=… | webhook (body)webhook_events_filter | ?standard_webhook=…?webhook=… (legacy) |
| Signatur | X-Signature: t=…,v1=…HMAC-SHA256, whsec_…X-Event-Id | X-Fal-Webhook-SignatureED25519, JWKS | webhook-idwebhook-timestampwebhook-signature | webhook-idwebhook-timestampwebhook-signature |
| Wiederholungen | Nach 1 min, 5 min, 30 min, 2 h und 6 h. Ein 2xx innerhalb von 10 Sekunden gilt als zugestellt. | Bis zu 31 Wiederholungen, bis das gespeicherte Ergebnis abläuft. | Wiederholt eventuell: Rechne mit Duplikaten. | Bis zu 3 Wiederholungen. |
| Ausgabedateien | Signierte Links, 24 Stunden gültig; ruf den Auftrag erneut ab, um einen frischen zu bekommen. Dateien werden 12 Monate aufbewahrt. | Richten sich nach deinen Einstellungen zum Medienablauf. | Bei Predictions über die API nach einer Stunde entfernt. | Bis zu 7 Tage aufbewahrt. |
| In einem Aufruf warten | Gibt es nicht: Jeder Auftrag läuft asynchron. Über MCP wartet wait_for_job bis zu 60 Sekunden. | POST https://fal.run/<endpoint id> | Prefer: wait=n | enable_sync_mode |
Unser Webhook-Body ist der Auftrag selbst, und die Signatur ist unsere eigene: Code, der deren Webhooks prüft, lehnt unsere ab. So prüfst du unsere
Idempotenz
Jede Generierungsanfrage braucht einen Idempotency-Key-Header mit 1 bis 255 sichtbaren ASCII-Zeichen. Derselbe Schlüssel innerhalb von 24 Stunden liefert denselben Auftrag mit HTTP 200, also erzeugt oder berechnet eine Wiederholung nach einem Timeout nie einen zweiten Auftrag.
Keine der drei dokumentiert einen Idempotenzschlüssel für das Erstellen eines Auftrags (Stand 2026-10-22): fal empfiehlt, Webhooks anhand von request_id zu deduplizieren, und WaveSpeed bittet darum, einmal einzureichen und vor einem erneuten Einreichen nach dem Task zu suchen. Gib jedem Auftrag einen Schlüssel und verwende ihn bei jeder Wiederholung erneut.
Was nicht kompatibel ist
Unverändert gesendet, schlagen diese hier fehl oder werden abgelehnt:
- Die Client-Bibliotheken der drei (fal_client, replicate, wavespeed) rufen /v1 nicht auf. Nutze einfaches HTTP, das OpenAPI-Dokument oder den MCP-Server.
- Die Antwortformate der drei: Ein Auftrag ist hier ein Job mit
outputs[].url, kein fal-Ergebnis, keine Replicate-Prediction und kein WaveSpeed-Wrapperdata. - Endbilder: fal
end_image_url, Replicatelast_frame_image, WaveSpeedlast_image. - Referenzvideos und Referenzaudio: fal
video_urlsundaudio_urls, Replicate und WaveSpeedreference_videosundreference_audios. - Eine automatische Länge oder ein automatisches Seitenverhältnis, die Seitenverhältnisse 4:3, 3:4 und 21:9 sowie Generierungen in 1080p oder 4K. Höhere Auflösungen sind hier ein separater Schritt,
enhance, gekennzeichnet als AI Enhanced. - Ein Startbild zusammen mit Referenzbildern. Auch Replicate lehnt das ab.
- In einem Aufruf auf das Ergebnis warten (fal.run,
Prefer: waitbei Replicate,enable_sync_modebei WaveSpeed): Jeder Auftrag läuft hier asynchron. - Mehrere Bilder pro Auftrag, Ausgabe als PNG oder WebP, freie Breite und Höhe, mehrere Ausgangsbilder für eine Bearbeitung, LoRAs und Sampler-Einstellungen.
- Die Webhook-Prüfung der drei: Unsere Zustellungen tragen
X-Signature, einen HMAC-SHA256 mit deinem whsec_-Secret, nicht die ED25519-Signatur von fal oder denwebhook-signature-Header. - Bezahlen nach Nutzung: Credits sind im Voraus bezahlt, jeder Auftrag hat eine Obergrenze, und ein Auftrag über
max_creditswird abgelehnt, nicht berechnet. - Langlebige Ausgabe-Links: Unsere gelten 24 Stunden. Ruf den Auftrag erneut ab, um einen frischen zu bekommen.
Vorher und nachher
Dieselbe Anfrage an Seedance 2.0 Fast mit Startbild, wie jede Plattform sie dokumentiert, dann über /v1. Die Preisobergrenze stammt aus unserer Preis-Engine.
curl -X POST https://queue.fal.run/bytedance/seedance-2.0/fast/image-to-video \
-H "Authorization: Key $FAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Slow dolly-in on a ceramic mug on a wooden table, morning window light",
"image_url": "https://example.com/first-frame.jpg",
"duration": "5",
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true
}'curl https://api.pershot.app/v1/videos/generations \
-H "Authorization: Bearer $API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-fast",
"prompt": "Slow dolly-in on a ceramic mug on a wooden table, morning window light",
"image_url": "https://example.com/first-frame.jpg",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true,
"max_credits": 34
}'Es sind unsere Preise
Jeder Auftrag bekommt hier vor dem Start ein Preisangebot in Credits (1 US$ = 100 Credits) und kostet nie mehr als sein Preisangebot oder max_credits.
Was fal, Replicate und WaveSpeed berechnen, steht auf deren eigenen Seiten. Unsere Vergleichsseiten listen ihre veröffentlichten Preise für Seedance 2.0 auf, jeweils mit dem Datum, an dem sie abgelesen wurden.
| Modell | 480p, pro Sekunde | 720p, pro Sekunde |
|---|---|---|
Seedance 2.0 Fastseedance-2.0-fast | 0,031 $ | 0,067 $ |
Seedance 2.0 Miniseedance-2.0-mini | 0,020 $ | 0,042 $ |
| Modell | 1K, pro Bild | 2K, pro Bild |
|---|---|---|
Qwen-Image-2512 · Lightning 4-stepqwen-image-2512-lightning | 1 cr | 3 cr |
Qwen-Image-2512qwen-image-2512 | 2 cr | 6 cr |
Qwen-Image-Edit-2511 · Lightningqwen-image-edit-2511-lightning | 2 cr | 4 cr |
Qwen-Image-Edit-2511qwen-image-edit-2511 | 3 cr | 10 cr |
Quellen
Feldnamen und Verhalten der drei, wie ihre öffentlichen Seiten sie am 2026-10-22 zeigten. Prüfe ihre Dokumentation, bevor du umsteigst:
- fal
- fal.ai/models/bytedance/seedance-2.0/fast/text-to-video/llms.txtfal.ai/models/bytedance/seedance-2.0/fast/image-to-video/llms.txtfal.ai/models/bytedance/seedance-2.0/fast/reference-to-video/llms.txtfal.ai/models/fal-ai/qwen-image-2512/llms.txtfal.ai/models/fal-ai/qwen-image-edit-2511/llms.txtfal.ai/docs/model-apis/model-endpoints/queuefal.ai/docs/model-apis/model-endpoints/webhooks
- Replicate
- replicate.com/bytedance/seedance-2.0-fast/llms.txtreplicate.com/qwen/qwen-image-2512/llms.txtreplicate.com/qwen/qwen-image-edit-2511/llms.txtreplicate.com/docs/reference/httpreplicate.com/docs/topics/webhooks/verify-webhook
- WaveSpeed
- wavespeed.ai/models/bytedance/seedance-2.0-fast/text-to-videowavespeed.ai/models/bytedance/seedance-2.0-fast/image-to-videowavespeed.ai/models/wavespeed-ai/qwen-image/text-to-image-2512wavespeed.ai/models/wavespeed-ai/qwen-image/edit-2511wavespeed.ai/docs/submit-taskwavespeed.ai/docs/how-to-use-webhookswavespeed.ai/docs/verify-webhookswavespeed.ai/docs/data-retention-policy