Vous venez de fal, Replicateou WaveSpeed
Passer vos appels Seedance 2.0 et Qwen-Image à /v1 : authentification, identifiants de modèle, chaque champ, tâches asynchrones et webhooks, et ce qui ne se transpose pas.
Pas un simple changement d’URL de base
Changer l’URL de base et la clé ne suffit sur aucune des trois. Chaque requête change aussi sur ces points :
- La clé :
Authorization: Beareravec une clé qui commence parsk_test_ousk_live_. - L’identifiant du modèle va dans le corps, sous
model, et un seul identifiant couvre le texte, une première image et des références. - Un en-tête
Idempotency-Keysur chaque requête de génération. - Un plafond de prix :
max_credits, ou unquote_idobtenu avecPOST /v1/quotes. - Le résultat est une tâche : interrogez
GET /v1/jobs/{id}ou recevez notre webhook signé.
- fal
- Le plus proche de notre API : la plupart des noms de champs Seedance sont ceux de fal. Renommez aussi
image_urlsenreference_image_urls, envoyezdurationsous forme de nombre, et déplacezfal_webhookdans le corps, souswebhook_url. - Replicate
- Sortez les champs de
input. Renommez aussiimageenimage_url,reference_imagesenreference_image_urlsetwebhookenwebhook_url. - WaveSpeed
- Renommez aussi
imageenimage_urletreference_imagesenreference_image_urls, et déplacezstandard_webhookdans le corps, souswebhook_url. Lisez les résultats avecGET /v1/jobs/{id}.
Authentification
Où vont les requêtes et comment elles sont signées.
| Plateforme | URL de base | En-tête d’authentification |
|---|---|---|
| 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 |
L’accès à l’API développeur se fait sur demande : demandez-le dans le studio, sous Clés API. La clé n’est affichée qu’une fois. Une clé développeur dépense le solde de l’API développeur, et la même clé fonctionne comme en-tête Bearer sur le serveur MCP.
Identifiants de modèle
Les leurs vont dans l’URL ; le nôtre va dans le corps, sous model. Un seul de nos identifiants couvre le texte, une première image et des références : ce sont les champs envoyés qui décident.
| Chez nous | fal | Replicate | WaveSpeed | Remarques |
|---|---|---|---|---|
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 | Un seul identifiant pour le texte, une première image et des images de référence. |
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 | Un seul identifiant pour le texte, une première image et des images de référence. |
qwen-image-2512 | fal-ai/qwen-image-2512 | qwen/qwen-image-2512 | wavespeed-ai/qwen-image/text-to-image-2512 | Les mêmes poids ouverts. |
qwen-image-2512-lightning | fal-ai/qwen-image-2512/lora | aucun | aucun | Notre niveau Lightning en 4 étapes. fal l’exécute comme un LoRA sur son point d’accès /lora ; nous n’avons trouvé aucun modèle Lightning prêt à l’emploi sur Replicate ni sur WaveSpeed. |
qwen-image-edit-2511 | fal-ai/qwen-image-edit-2511 | qwen/qwen-image-edit-2511 | wavespeed-ai/qwen-image/edit-2511 | Les mêmes poids ouverts. |
qwen-image-edit-2511-lightning | fal-ai/qwen-image-edit-2511/lora | aucun | aucun | Notre niveau Lightning en 4 étapes. fal l’exécute comme un LoRA sur son point d’accès /lora ; nous n’avons trouvé aucun modèle Lightning prêt à l’emploi sur Replicate ni sur WaveSpeed. |
- Pour les agents IA
- Texte brut pour les agents IA : entrées, valeurs admises, chaque prix et un exemple de requête
seedance-2.0-fastseedance-2.0-miniqwen-image-2512-lightningqwen-image-2512qwen-image-edit-2511-lightningqwen-image-edit-2511
Seedance 2.0, champ par champ
Nos noms suivent ceux de fal quand fal a le champ, et les remarques indiquent les différences. Les champs se trouvent au premier niveau du corps JSON ; Replicate les enveloppe dans input.
| Chez nous | fal | Replicate | WaveSpeed | Remarques |
|---|---|---|---|---|
model | dans l’URL | dans l’URL | dans l’URL | Un seul identifiant dans le corps pour le texte, une première image et des références. Le leur est dans l’URL. |
prompt | prompt | prompt | prompt | Le même texte se reprend tel quel. |
duration | duration | duration | duration | Un nombre entier, de 4 à 15, par défaut 5. fal envoie une chaîne et propose auto ; Replicate utilise -1 pour une durée automatique. Pas de durée automatique ici. |
resolution | resolution | resolution | resolution | 480p ou 720p, par défaut 720p. WaveSpeed propose aussi 1080p et 4k ; ici, les résolutions supérieures passent par l’étape distincte enhance. |
aspect_ratio | aspect_ratio | aspect_ratio | aspect_ratio | 16:9, 9:16 ou 1:1, par défaut 16:9. Pas de auto, adaptive, 4:3, 3:4 ni 21:9. |
generate_audio | generate_audio | generate_audio | generate_audio | Même signification, activé par défaut. Le prix est le même, activé ou non. |
image_url | image_url | image | image | La première image. Même nom que chez fal ; Replicate et WaveSpeed l’appellent image. Pas avec des images de référence. |
reference_image_urls | image_urls | reference_images | reference_images | Jusqu’à 9 images, désignées par @image1, @image2 dans le prompt. Diffère de fal, qui l’appelle image_urls. |
seed | aucun | seed | aucun | Accepté mais non utilisé : Seedance 2.0 ne prend pas de graine. fal et WaveSpeed n’en proposent pas. |
quote_id | aucun | aucun | aucun | Nouveau : envoyez exactement l’un des deux, quote_id ou max_credits. Une tâche ne coûte jamais plus. |
max_credits | aucun | aucun | aucun | Nouveau : envoyez exactement l’un des deux, quote_id ou max_credits. Une tâche ne coûte jamais plus. |
webhook_url | fal_webhookchaîne de requête | webhook | standard_webhookchaîne de requête | Dans le corps. Diffère de fal, qui prend fal_webhook dans la chaîne de requête. |
end_user_id | end_user_id | aucun | aucun | Le même nom que chez fal. Pour les comptes développeur approuvés (accès sur demande) : votre propre identifiant utilisateur, affiché dans l’utilisation. |
project_id | aucun | aucun | aucun | Uniquement chez nous, facultatif : projets et routage vers les fournisseurs. |
shot_id | aucun | aucun | aucun | Uniquement chez nous, facultatif : projets et routage vers les fournisseurs. |
routing_preference | aucun | aucun | aucun | Uniquement chez nous, facultatif : projets et routage vers les fournisseurs. |
enhance | aucun | aucun | aucun | Uniquement chez nous, facultatif : un agrandissement par IA après le rendu, étiqueté AI Enhanced. |
Idempotency-Keyen-tête | aucun | aucun | aucun | Nouveau et obligatoire : la même clé dans les 24 heures renvoie la même tâche. |
Leurs champs Seedance sans équivalent ici. Envoyés tels quels, ils sont refusés comme champs inconnus (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, champ par champ
Notre corps de requête d’image est plus réduit que le leur : une taille et un format d’image au lieu de pixels libres, une image par tâche, et aucun réglage d’échantillonneur.
| Chez nous | fal | Replicate | WaveSpeed | Remarques |
|---|---|---|---|---|
model | dans l’URL | dans l’URL | dans l’URL | Quatre identifiants dans le corps : Image Mini et Image Fast, chacun pour la génération et la retouche. |
prompt | prompt | prompt | prompt | Le même texte se reprend tel quel. |
size | image_size | aucun | size | 1K ou 2K, par défaut 1K. Avec le format d’image, elle donne une taille fixe, 2048 px par côté au maximum. Pas de largeur ni de hauteur libres. |
aspect_ratio | image_size | aspect_ratio | size | 16:9, 9:16 ou 1:1, par défaut 1:1. Il ne change pas le prix. |
image_url | image_urls | image | images | Modèles de retouche uniquement : exactement une image source, sous forme d’URL. Les leurs prennent une liste. |
seed | seed | seed | seed | Même signification. |
quote_id | aucun | aucun | aucun | Nouveau : envoyez exactement l’un des deux, quote_id ou max_credits. Une tâche ne coûte jamais plus. |
max_credits | aucun | aucun | aucun | Nouveau : envoyez exactement l’un des deux, quote_id ou max_credits. Une tâche ne coûte jamais plus. |
webhook_url | fal_webhookchaîne de requête | webhook | standard_webhookchaîne de requête | Dans le corps. Diffère de fal, qui prend fal_webhook dans la chaîne de requête. |
end_user_id | aucun | aucun | aucun | Uniquement chez nous, facultatif, pour les comptes développeur approuvés (accès sur demande) : votre propre identifiant utilisateur, affiché dans l’utilisation. |
project_id | aucun | aucun | aucun | Uniquement chez nous, facultatif : projets et routage vers les fournisseurs. |
shot_id | aucun | aucun | aucun | Uniquement chez nous, facultatif : projets et routage vers les fournisseurs. |
routing_preference | aucun | aucun | aucun | Uniquement chez nous, facultatif : projets et routage vers les fournisseurs. |
Idempotency-Keyen-tête | aucun | aucun | aucun | Nouveau et obligatoire : la même clé dans les 24 heures renvoie la même tâche. |
Leurs champs Qwen-Image sans équivalent ici. Envoyés tels quels, ils sont refusés comme champs inconnus (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
Tâches asynchrones et webhooks
Les quatre exécutent les tâches en arrière-plan. Comment chacun nomme les étapes :
| Étape | Pershot | fal | Replicate | WaveSpeed |
|---|---|---|---|---|
| Création | 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 |
| Interrogation | GET /v1/jobs/{id} | GET status_urlGET response_url | GET /v1/predictions/{id} | GET /api/v3/predictions/{id}/result |
| Statuts | queuedprocessingsucceededfailedcancelledunknown | IN_QUEUEIN_PROGRESSCOMPLETED | startingprocessingsucceededfailedcanceled | createdcompletedfailedcancelledtimeoutdeleted |
| Webhook | webhook_url (body) | ?fal_webhook=… | webhook (body)webhook_events_filter | ?standard_webhook=…?webhook=… (legacy) |
| Signature | X-Signature: t=…,v1=…HMAC-SHA256, whsec_…X-Event-Id | X-Fal-Webhook-SignatureED25519, JWKS | webhook-idwebhook-timestampwebhook-signature | webhook-idwebhook-timestampwebhook-signature |
| Nouvelles tentatives de livraison | Après 1 min, 5 min, 30 min, 2 h et 6 h. Un 2xx en moins de 10 secondes vaut livraison. | Jusqu’à 31 nouvelles tentatives, tant que le résultat stocké n’a pas expiré. | Peut retenter : gérez les doublons. | Jusqu’à 3 nouvelles tentatives. |
| Fichiers de sortie | Liens signés valables 24 heures ; relisez la tâche pour en obtenir un nouveau. Les fichiers sont conservés 12 mois. | Selon vos réglages d’expiration des médias. | Supprimés au bout d’une heure pour les prédictions créées via l’API. | Conservés jusqu’à 7 jours. |
| Attente en un seul appel | Aucune : chaque tâche est asynchrone. Via MCP, wait_for_job attend jusqu’à 60 secondes. | POST https://fal.run/<endpoint id> | Prefer: wait=n | enable_sync_mode |
Le corps de notre webhook est la tâche elle-même, et la signature est la nôtre : un code qui vérifie leurs webhooks refusera les nôtres. Comment vérifier les nôtres
Idempotence
Chaque requête de génération exige un en-tête Idempotency-Key de 1 à 255 caractères ASCII visibles. La même clé dans les 24 heures renvoie la même tâche avec HTTP 200 : une nouvelle tentative après un délai dépassé ne crée ni ne facture jamais une seconde tâche.
Aucune des trois ne documente de clé d’idempotence pour créer une tâche (2026-10-22) : fal suggère de dédoublonner les webhooks par request_id, et WaveSpeed demande de soumettre une seule fois et de rechercher la tâche avant de la soumettre à nouveau. Donnez à chaque tâche une clé et réutilisez-la à chaque nouvelle tentative.
Ce qui n’est pas compatible
Envoyés tels quels, ces éléments échouent ou sont refusés ici :
- Leurs bibliothèques clientes (fal_client, replicate, wavespeed) n’appellent pas /v1. Utilisez du HTTP simple, le document OpenAPI ou le serveur MCP.
- Leurs formats de réponse : ici, une tâche est un Job avec
outputs[].url, pas un résultat fal, une prédiction Replicate ni une enveloppedataWaveSpeed. - Les dernières images : fal
end_image_url, Replicatelast_frame_image, WaveSpeedlast_image. - Les vidéos et l’audio de référence : fal
video_urlsetaudio_urls, Replicate et WaveSpeedreference_videosetreference_audios. - Une durée ou un format automatique, les formats 4:3, 3:4 et 21:9, et les rendus 1080p ou 4K. Ici, les résolutions supérieures sont une étape distincte,
enhance, étiquetée AI Enhanced. - Une première image avec des images de référence. Replicate refuse aussi cette combinaison.
- Attendre le résultat en un seul appel (fal.run,
Prefer: waitchez Replicate,enable_sync_modechez WaveSpeed) : ici, chaque tâche est asynchrone. - Plusieurs images par tâche, une sortie PNG ou WebP, une largeur et une hauteur libres, plusieurs images sources pour une retouche, les LoRA et les réglages d’échantillonneur.
- Leur vérification des webhooks : nos livraisons portent
X-Signature, un HMAC-SHA256 avec votre secret whsec_, pas la signature ED25519 de fal ni l’en-têtewebhook-signature. - Le paiement après usage : les crédits sont prépayés, chaque tâche a un plafond, et une tâche au-delà de
max_creditsest refusée, pas facturée. - Les liens de sortie durables : les nôtres durent 24 heures. Relisez la tâche pour en obtenir un nouveau.
Avant et après
La même requête Seedance 2.0 Fast avec une première image, telle que chaque plateforme la documente, puis sur /v1. Le plafond de prix vient de notre moteur de prix.
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
}'Les prix sont les nôtres
Chaque tâche fait l’objet d’un devis en crédits avant d’être lancée (1 $ US = 100 crédits) et ne coûte jamais plus que son devis ou max_credits.
Ce que facturent fal, Replicate et WaveSpeed figure sur leurs propres pages. Nos pages de comparaison indiquent leurs prix publiés pour Seedance 2.0, chacun avec la date à laquelle il a été relevé.
| Modèle | 480p, par seconde | 720p, par seconde |
|---|---|---|
Seedance 2.0 Fastseedance-2.0-fast | 0,031 $ | 0,067 $ |
Seedance 2.0 Miniseedance-2.0-mini | 0,020 $ | 0,042 $ |
| Modèle | 1K, par image | 2K, par image |
|---|---|---|
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 |
Sources
Leurs noms de champs et leur comportement tels que leurs pages publiques les présentaient le 2026-10-22. Vérifiez leur documentation avant de migrer :
- 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