Seedance 2.5 is live — 30-second cinematic video with native audio & real-person references
Arrêt de l'API Sora 2 : guide de migration et coûts réels
2026/08/25

Arrêt de l'API Sora 2 : guide de migration et coûts réels

L'API Sora 2 ferme le 24 septembre 2026 sans remplacement. Export de bibliothèque, réécriture d'appels et comparaison des coûts de migration par tier tarifaire.

L'API Sora 2 ferme le 24 septembre 2026, et le tableau des dépréciations d'OpenAI laisse la colonne « Remplacement recommandé » vide pour tous les six modèles[1]. C'est inhabituel. Quand OpenAI a retiré gpt-image-1, le même tableau pointait clairement vers gpt-image-2[1]. La génération vidéo n'a pas droit à cette transition.

Ce n'est pas un échange de modèle. C'est une suppression d'endpoint qui casse deux choses à la fois : le code qui appelle POST /videos et les ressources stockées qu'on ne peut atteindre que via GET /videos/{video_id}/content. Ce guide explique ce qui disparaît vraiment, comment récupérer votre bibliothèque avant la fermeture, les différences de paramètres exactes lors de la réécriture, et le coût réel du remplacement selon chaque tier où vous êtes peut-être.

TL;DR

  • La fermeture est le 24 septembre 2026, annoncée le 24 mars 2026, concernant l'API Videos, sora-2, sora-2-pro, sora-2-2025-10-06, sora-2-2025-12-08 et sora-2-pro-2025-10-06[1].
  • Aucun remplacement officiel n'existe. La colonne de remplacement est vide pour les six lignes, contrairement à chaque autre dépréciée du même tableau[1].
  • Vos vidéos générées se cachent derrière l'API qui ferme. GET /videos les énumère et GET /videos/{video_id}/content les télécharge[2]. Exportez avant la fermeture.
  • Si vous êtes en sora-2 à $0.10/s, les économies sont modestes mais réelles. Les tarifs comparables 720p avec audio tournent entre $0.076–$0.11/s[3][4][9].
  • Si vous êtes en sora-2-pro 1080p, vous payez $0.70/s et le même clip revient à $0.111/s sur veo3.1-fast-official[3][4].
  • Attention au plafond de durée. Sora 2 fait du 16 et 20 secondes[2] ; Veo 3.1 maxe à 8 secondes par génération[4].

Ce que la fermeture de l'API Sora 2 supprime vraiment

OpenAI a annoncé la dépréciation le 24 mars 2026, notifiant les développeurs utilisant l'API Videos et les alias Sora 2 de leur « suppression de l'API le 24 septembre 2026 »[1]. Le guide de génération vidéo porte le même avis en haut de page[2].

Six identifiants disparaissent :

Date de fermetureModèle / systèmeRemplacement recommandé
2026-09-24API Videos(aucun)
2026-09-24sora-2(aucun)
2026-09-24sora-2-pro(aucun)
2026-09-24sora-2-2025-10-06(aucun)
2026-09-24sora-2-2025-12-08(aucun)
2026-09-24sora-2-pro-2025-10-06(aucun)

Source : page des dépréciations d'OpenAI[1].

La première ligne est celle que les gens sous-estiment. Fixer un snapshot daté n'achète pas de temps, car la couche transport disparaît avec les modèles. N'importe quoi touchant POST /videos, GET /videos/{video_id}, GET /videos/{video_id}/content, GET /videos ou DELETE /videos/{video_id} doit être réécrit, pas seulement réorienté[2].

Exportez votre bibliothèque avant l'arrêt des endpoints

Vos rendus terminés ne sont pas sur votre disque. Ils siègent dans le stockage OpenAI et la façon documentée de récupérer un fichier est GET /videos/{video_id}/content[2]. Quand cette route est supprimée, le chemin d'accès documenté à ces fichiers disparaît aussi. Commencez l'export en premier, avant toute réécriture de code, car c'est la seule partie de cette migration avec une deadline ferme.

GET /videos énumère votre bibliothèque avec pagination et tri[2] :

curl "https://api.openai.com/v1/videos?limit=20&after=video_123&order=asc" \
  -H "Authorization: Bearer $OPENAI_API_KEY" | jq .

Parcourez-la, conservez chaque id, puis tirez chaque fichier :

import os, requests

KEY = os.environ["OPENAI_API_KEY"]
H = {"Authorization": f"Bearer {KEY}"}

def all_video_ids():
    after, ids = None, []
    while True:
        params = {"limit": 100, "order": "asc"}
        if after:
            params["after"] = after
        page = requests.get("https://api.openai.com/v1/videos",
                            headers=H, params=params, timeout=60).json()
        batch = page.get("data", [])
        if not batch:
            return ids
        ids += [v["id"] for v in batch]
        after = batch[-1]["id"]

for vid in all_video_ids():
    dest = f"export/{vid}.mp4"
    if os.path.exists(dest):
        continue
    r = requests.get(f"https://api.openai.com/v1/videos/{vid}/content",
                     headers=H, timeout=600)
    r.raise_for_status()
    os.makedirs("export", exist_ok=True)
    with open(dest, "wb") as f:
        f.write(r.content)

Sauvegardez aussi le JSON du listing, pas seulement les MP4. Il porte le model, seconds, size et created_at de chaque tâche[2], ce sont les métadonnées que vous voudrez quand vous allez rebâtir des prompts contre un modèle différent et que vous aurez besoin de savoir à quelle résolution l'original était rendu.

Réécrire l'appel : où les deux formes divergent

Les deux API sont soumettre-puis-interroger asynchrones, donc le flux de contrôle tient. Les noms de champs non.

ÉtapeAPI Videos OpenAI[2]reAPI[5]
SoumettrePOST /v1/videosPOST /api/v1/videos/generations
Champ modèlemodel: "sora-2"model: "<model id>"
Champ promptpromptprompt
Résolutionsize: "1280x720" (pair de pixels)resolution: "720p" + size: "16:9"
Duréeseconds: "8" (chaîne)duration: 5 (nombre)
Poignée de tâcheid dans la réponsetask_id dans la réponse
InterrogerGET /v1/videos/{video_id}GET /api/v1/tasks/{id}
Récupérer le fichierGET /v1/videos/{video_id}/contentdéjà dans output.video_urls

Trois d'entre elles posent problème en pratique. size veut dire des choses différentes de chaque côté : une paire de pixels d'un côté, un rapport d'aspect de l'autre, la résolution scindée en son propre champ. seconds est une chaîne et duration est un nombre, donc une copie naïve de la valeur déclenche une erreur de type plutôt qu'un message de validation clair. Et l'étape de téléchargement disparaît entièrement, puisque la réponse d'interrogation porte déjà output.video_urls[5] au lieu de vous faire appeler un troisième endpoint pour les bytes.

Un envoi qui ressemblait à ça :

video = openai.videos.create(model="sora-2", prompt=PROMPT,
                             size="1280x720", seconds="8")

devient :

r = requests.post("https://reapi.ai/api/v1/videos/generations",
                  headers={"Authorization": f"Bearer {REAPI_KEY}"},
                  json={"model": MODEL, "prompt": PROMPT,
                        "resolution": "720p", "size": "16:9", "duration": 8})
task_id = r.json()["task_id"]

Ce que la migration coûte vraiment, par tier actuel

La plupart des analyses de cette fermeture citent une seule économie phare. Ça ne tient que si vous ignorez quel tier Sora le lecteur occupe vraiment, et la réponse honnête se scinde en deux.

Les tarifs Sora publiés par OpenAI, par seconde[3] :

ModèleTailleStandardBatch
sora-2720p$0.10$0.05
sora-2-pro720p$0.30$0.15
sora-2-pro1024p$0.50$0.25
sora-2-pro1080p$0.70$0.35

Contre les tarifs 720p avec audio sur reAPI[4][6] :

Votre tier actuelTarif SoraTarif comparableChangement
sora-2 720p$0.10/sveo3.1-fast-official 720P + audio, $0.092/s−8%
sora-2 720p$0.10/sWan 3.0 720P, $0.076/s−24%
sora-2 720p$0.10/sKling 3.0 std 720p + audio, $0.11/s+10%
sora-2-pro 720p$0.30/sveo3.1-fast-official 720P + audio, $0.092/s−69%
sora-2-pro 1080p$0.70/sveo3.1-fast-official 1080P + audio, $0.111/s−84%
sora-2-pro 1080p$0.70/sKling 3.0 pro 1080p + audio, $0.149/s−79%
sora-2-pro 1080p$0.70/sWan 3.0 1080P, $0.151/s−78%
sora-2-pro 1080p$0.70/sSeedance 2.5 1080P, $0.462/s−34%

Si vous êtes sur sora-2 ordinaire à 720p, le tier de base $0.10/s était tarifé compétitivement et la plupart des changements arrivent à quelques cents près. Wan 3.0 à 720P est l'exception à $0.076/s avec une piste audio par défaut[9], environ 24% sous. C'est une vraie économie, pas la réduction d'ordre de grandeur que certains articles promettent. Si vous faisiez tourner sora-2 par l'API Batch à $0.05/s[3], vous étiez au tarif le moins cher audio capable dans cette comparaison et vous devriez vous attendre à ce que votre coût par seconde monte.

Le tableau sora-2-pro est l'opposé. À 1080p vous avez payé $0.70/s, et le même second de footage 1080p avec audio revient à $0.111/s sur veo3.1-fast-official[4]. Sur un clip de 20 secondes c'est $14.00 contre $2.22.

Un détail de facturation à transférer prudemment : les tiers par-génération de Veo 3.1 facturent par rendu, pas par seconde[4], tandis que les variantes -official ci-dessus facturent par seconde. Ce sont des unités différentes. Si votre modèle de coût suppose par-seconde partout, les tiers par-génération ne se réconcilieront pas contre lui.

Le problème des 20 secondes

Sora 2 supporte les générations de 16 et 20 secondes sur les deux variantes[2]. Pas chaque remplacement l'atteint en un seul passage, et c'est la contrainte la plus susceptible de forcer une vraie réécriture plutôt qu'un changement de configuration.

ModèlePlus longue génération simple
sora-2 / sora-2-pro20 s[2]
Seedance 2.530 s[6]
Wan 3.030 s[9]
Kling 3.015 s[7]
MiniMax H315 s[8]
Veo 3.18 s[4]

Un plan Sora de 20 secondes devient trois rendus Veo 3.1 plus une couture. Si votre pipeline émet des longs plans simples, deux modèles ici dépassent le plafond de Sora à eux seuls : Seedance 2.5 à 4 à 30 secondes avec audio synchronisé[6], et Wan 3.0 à 2 à 30 secondes avec une piste audio par défaut[9]. Vérifiez ça avant de faire un benchmark qualité. Un modèle qui ne peut pas produire votre durée de plan n'est pas un candidat peu importe son score.

FAQ

Quand exactement l'API Sora 2 s'arrête-t-elle de fonctionner ?

Le 24 septembre 2026. OpenAI a notifié les développeurs concernés le 24 mars 2026[1].

OpenAI recommande-t-il un modèle de remplacement ?

Non. La colonne « Remplacement recommandé » est vide pour l'API Videos et les cinq identifiants Sora 2[1].

Puis-je continuer à utiliser un snapshot épinglé comme sora-2-2025-10-06 ?

Non. Les snapshots datés sont listés à la même date du 24 septembre que les alias, et l'API Videos qui les sert est également dépréciée[1].

Que deviennent les vidéos que j'ai déjà générées ?

Elles sont récupérées via GET /videos/{video_id}/content, qui fait partie de l'API Videos dépréciée[2]. Une fois cet endpoint supprimé il n'y a pas de route API documentée vers ces fichiers, donc exportez avant la date.

La migration va-t-elle réduire ma facture ?

Ça dépend de votre tier. De sora-2-pro 1080p ($0.70/s), oui, substantiellement. De sora-2 ordinaire $0.10/s, à peu près l'équilibre. De sora-2 sur Batch à $0.05/s, attendez une augmentation[3].

Les remplaçants génèrent-ils de l'audio comme Sora 2 le faisait ?

Certains le font et c'est souvent un tier de prix séparé. Kling 3.0 et Veo 3.1 listent tous deux des tarifs distincts avec et sans audio[4][7], tandis que Seedance 2.5 génère la parole, les effets sonores et la musique avec audio activé par défaut[6] et Wan 3.0 livre une piste audio par défaut[9].

Combien de mon code doit changer ?

La structure soumettre-puis-interroger asynchrone tient. Ce qui change ce sont les noms de champs, la scission de size en resolution plus rapport d'aspect, seconds comme chaîne versus duration comme nombre, et la suppression de l'appel de téléchargement de contenu séparé[2][5].

Les restrictions de contenu de Sora 2 sont-elles les mêmes ailleurs ?

Pas nécessairement. Sora 2 rejette les vraies personnes y compris les figures publiques, les personnages et musiques protégés par copyright, et les images d'entrée contenant des visages humains[2]. Les autres modèles tirent ces limites différemment, donc les prompts qui échouaient sur Sora peuvent réussir ailleurs et vice versa.

Séquencer le travail avant la date

Exportez d'abord. C'est la seule étape avec une deadline qui ne bouge pas, et elle ne demande rien d'autre qu'une clé API et de l'espace disque. Puis choisissez un modèle contre vos contraintes dures dans cet ordre : durée du clip, puis audio, puis résolution, puis tarif. La durée élimine les candidats plus vite, et le tarif est la chose la plus facile à changer plus tard.

Réécrire les appels est une tâche plus petite qu'elle ne le paraît, car la forme soumettre-interroger tient et l'étape de téléchargement de fichier disparaît. La partie qui mérite de ralentir c'est le modèle de coût. Si vous venez de sora-2-pro les économies sont réelles et importantes ; si vous venez de sora-2 $0.10/s ou Batch $0.05/s, planifiez pour un coût par seconde plat à supérieur et choisissez selon la capacité. De toute façon, la fermeture de l'API Sora 2 vous donne une date fixe pour travailler en arrière, et l'export est la partie qui cesse d'être possible après.

References

  1. OpenAI. Deprecations: Sora 2 video generation models and Videos API. Retrieved August 2026 from developers.openai.com/api/docs/deprecations
  2. OpenAI. Video generation with Sora: Videos API guide. Retrieved August 2026 from developers.openai.com/api/docs/guides/video-generation
  3. OpenAI. Pricing: video generation models, standard and batch per-second rates. Retrieved August 2026 from developers.openai.com/api/docs/pricing
  4. reAPI. Veo 3.1: model page and per-tier pricing. Retrieved August 2026 from reapi.ai/models/veo3-1
  5. reAPI. Seedance 2.5 API: request shape, task polling and output fields. Retrieved August 2026 from reapi.ai/docs/seedance-2-5
  6. reAPI. Seedance 2.5: model page, duration range and per-resolution pricing. Retrieved August 2026 from reapi.ai/models/seedance-2-5
  7. reAPI. Kling 3.0: model page, audio tiers and per-second pricing. Retrieved August 2026 from reapi.ai/models/kling-3-0
  8. reAPI. MiniMax H3: model page, duration range and per-second pricing. Retrieved August 2026 from reapi.ai/models/minimax-h3
  9. reAPI. Wan 3.0: model page, duration range and per-resolution pricing. Retrieved August 2026 from reapi.ai/models/wan-3-0