
Sora 2 API: migración, exportación y costos reales
Sora 2 API se cierra el 24 de septiembre de 2026 sin reemplazo oficial. Exporta tu librería, remap endpoints y compara el costo real de cada alternativa.
El cierre de Sora 2 API cae el 24 de septiembre de 2026, y la tabla de deprecaciones oficial de OpenAI deja el celda "Reemplazo recomendado" vacío para todas las filas: la API de Videos misma, sora-2, sora-2-pro, y los tres snapshots fechados, todos sin recomendación[1]. Es inusual. Cuando OpenAI deprecó gpt-image-1, señaló a los desarrolladores hacia gpt-image-2 en la misma tabla[1]. Generación de video no obtiene un traspaso así.
Entonces esto no es un cambio de modelo. Es una eliminación de endpoint, y rompe dos cosas a la vez: el código que llama a POST /videos, y los activos almacenados a los que solo puedes acceder a través de GET /videos/{video_id}/content. Esta guía cubre qué desaparece realmente, cómo sacar tu librería antes de que lo haga, las diferencias exactas de parámetros que enfrentarás reescribiendo las llamadas, y lo que el reemplazo cuesta en cada nivel en el que podrías estar hoy.
TL;DR
- La fecha de cierre es el 24 de septiembre de 2026, anunciada el 24 de marzo de 2026, cubriendo la API de Videos,
sora-2,sora-2-pro,sora-2-2025-10-06,sora-2-2025-12-08, ysora-2-pro-2025-10-06[1]. - No existe reemplazo oficial. La columna de reemplazo está vacía para los seis registros, a diferencia de cualquier otra deprecación en la misma tabla[1].
- Tus videos renderizados viven detrás de la API que se va.
GET /videoslos enumera yGET /videos/{video_id}/contentlos descarga[2]. Exporta antes de que los endpoints dejen de responder. - Si estás en
sora-2a $0.10/s, los ahorros son modestos pero reales. Las tarifas comparables a 720p con audio rondan $0.076–$0.11/s[3][4][9]. - Si estás en
sora-2-proa 1080p, has pagado $0.70/s, y el mismo clip corre $0.111/s en veo3.1-fast-official[3][4]. - Vigila el techo de duración de clip. Sora 2 hace 16 y 20 segundos[2]; Veo 3.1 topa con 8 segundos por generación[4].
Lo que el cierre de Sora 2 API realmente elimina
OpenAI anunció la deprecación el 24 de marzo de 2026, notificando a desarrolladores que usan la API de Videos y los alias y snapshots de Sora 2 de "su deprecación y eliminación de la API el 24 de septiembre de 2026"[1]. La guía de generación de video lleva el mismo aviso en la parte superior de la página[2].
Seis identificadores se apagan:
| Fecha de cierre | Modelo / sistema | Reemplazo recomendado |
|---|---|---|
| 2026-09-24 | API de Videos | (ninguno) |
| 2026-09-24 | sora-2 | (ninguno) |
| 2026-09-24 | sora-2-pro | (ninguno) |
| 2026-09-24 | sora-2-2025-10-06 | (ninguno) |
| 2026-09-24 | sora-2-2025-12-08 | (ninguno) |
| 2026-09-24 | sora-2-pro-2025-10-06 | (ninguno) |
Fuente: página de deprecaciones de OpenAI[1].
La primera fila es la que la gente subestima. Anclar un snapshot fechado no compra tiempo, porque el transporte desaparece con los modelos. Cualquier cosa que toque POST /videos, GET /videos/{video_id}, GET /videos/{video_id}/content, GET /videos, o DELETE /videos/{video_id} necesita reescritura, no reenrutamiento[2].
Exporta tu librería antes de que los endpoints dejen de responder
Tus renderizados terminados no están en tu disco. Viven en el almacenamiento de OpenAI y la forma documentada de recuperar uno es GET /videos/{video_id}/content[2]. Cuando esa ruta se elimine, la ruta API documentada para esos archivos se elimina con ella. Haz la exportación primero, antes de cualquier reescritura de código, porque es la única parte de esta migración con un plazo fijo.
GET /videos enumera tu librería con paginación y ordenamiento[2]:
curl "https://api.openai.com/v1/videos?limit=20&after=video_123&order=asc" \
-H "Authorization: Bearer $OPENAI_API_KEY" | jq .Avanza por la página, guarda cada id, luego extrae cada archivo:
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)Guarda también el JSON de la llamada de listado, no solo los MP4s. Lleva el model, seconds, size, y created_at para cada trabajo[2], que es la metadigua que querrás cuando reescribas prompts contra un modelo diferente y necesites saber en qué se renderizó el original.
Reescribir la llamada: donde los dos formatos discrepan
Ambas API son envío asincrónico seguido de sondeo, así que el flujo de control sobrevive. Los nombres de campos no.
| Paso | API de Videos de OpenAI[2] | reAPI[5] |
|---|---|---|
| Envío | POST /v1/videos | POST /api/v1/videos/generations |
| Campo modelo | model: "sora-2" | model: "<model id>" |
| Campo prompt | prompt | prompt |
| Resolución | size: "1280x720" (par de píxeles) | resolution: "720p" + size: "16:9" |
| Duración | seconds: "8" (cadena) | duration: 5 (número) |
| Identificador de trabajo | id en la respuesta | task_id en la respuesta |
| Sondeo | GET /v1/videos/{video_id} | GET /api/v1/tasks/{id} |
| Obtener el archivo | GET /v1/videos/{video_id}/content | ya en output.video_urls |
Tres de estos muerden en la práctica. size significa cosas diferentes en ambos lados: un par de píxeles en uno, una relación de aspecto en el otro, con la resolución dividida en su propio campo. seconds es una cadena y duration es un número, así que una copia ingenua del valor genera un error de tipo en lugar de un mensaje de validación claro. Y el paso de descarga desaparece completamente, ya que la respuesta de sondeo ya lleva output.video_urls[5] en lugar de hacerte llamar a un tercer endpoint para los bytes.
Un envío que se veía así:
video = openai.videos.create(model="sora-2", prompt=PROMPT,
size="1280x720", seconds="8")se convierte en:
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"]Lo que la migración realmente cuesta, por el nivel en el que estés ahora
La mayoría de artículos sobre este cierre citan un solo ahorro titular. Eso solo funciona si ignoras en qué nivel de Sora realmente está el lector, y la respuesta honesta se divide en dos.
Las tarifas publicadas de Sora de OpenAI, por segundo[3]:
| Modelo | Tamaño | Estándar | Lote |
|---|---|---|---|
| sora-2 | 720p | $0.10 | $0.05 |
| sora-2-pro | 720p | $0.30 | $0.15 |
| sora-2-pro | 1024p | $0.50 | $0.25 |
| sora-2-pro | 1080p | $0.70 | $0.35 |
Contra tarifas de 720p con audio en reAPI[4][6]:
| Tu nivel actual | Tarifa Sora | Tarifa comparable | Cambio |
|---|---|---|---|
| sora-2 720p | $0.10/s | veo3.1-fast-official 720P + audio, $0.092/s | −8% |
| sora-2 720p | $0.10/s | Wan 3.0 720P, $0.076/s | −24% |
| sora-2 720p | $0.10/s | Kling 3.0 std 720p + audio, $0.11/s | +10% |
| sora-2-pro 720p | $0.30/s | veo3.1-fast-official 720P + audio, $0.092/s | −69% |
| sora-2-pro 1080p | $0.70/s | veo3.1-fast-official 1080P + audio, $0.111/s | −84% |
| sora-2-pro 1080p | $0.70/s | Kling 3.0 pro 1080p + audio, $0.149/s | −79% |
| sora-2-pro 1080p | $0.70/s | Wan 3.0 1080P, $0.151/s | −78% |
| sora-2-pro 1080p | $0.70/s | Seedance 2.5 1080P, $0.462/s | −34% |
Si estás en sora-2 normal a 720p, el tier base de $0.10/s se preció competitivamente y la mayoría de cambios caen dentro de unos pocos centavos. Wan 3.0 a 720P es la excepción a $0.076/s con una pista de audio por defecto[9], aproximadamente 24% menos. Eso es un ahorro real, no el corte de orden de magnitud que algunos artículos prometen. Si ejecutabas sora-2 a través de la API por Lotes a $0.05/s[3], estabas en la tarifa más barata con capacidad de audio en esta comparación y debes esperar que tu costo por segundo suba.
El panorama de sora-2-pro es el opuesto. A 1080p has pagado $0.70/s, y el mismo segundo de metraje 1080p con audio corre $0.111/s en veo3.1-fast-official[4]. En un clip de 20 segundos eso es $14.00 contra $2.22.
Un detalle de facturación a llevar cuidadosamente: los tiers por generación de Veo 3.1 facturan por render, no por segundo[4], mientras que los variantes -official anteriores facturan por segundo. Esas son unidades diferentes. Si tu modelo de costo asume por segundo en todas partes, los tiers por generación no se reconciliarán contra él.
El problema de los 20 segundos
Sora 2 admite generaciones de 16 y 20 segundos en ambos variantes[2]. No todo reemplazo alcanza eso en un solo paso, y esta es la restricción más probable que force una reescritura real en lugar de un cambio de configuración.
| Modelo | Generación única más larga |
|---|---|
| sora-2 / sora-2-pro | 20 s[2] |
| Seedance 2.5 | 30 s[6] |
| Wan 3.0 | 30 s[9] |
| Kling 3.0 | 15 s[7] |
| MiniMax H3 | 15 s[8] |
| Veo 3.1 | 8 s[4] |
Un plano de Sora de 20 segundos se convierte en tres renderizados de Veo 3.1 más una costura. Si tu pipeline emite tomas largas únicas, dos modelos aquí superan el techo de Sora: Seedance 2.5 a 4 a 30 segundos con audio sincronizado[6], y Wan 3.0 a 2 a 30 segundos con una pista de audio por defecto[9]. Verifica esto antes de hacer un benchmark de calidad. Un modelo que no puede producir la duración de tu toma no es candidato sin importar cómo puntúe.
FAQ
¿Cuándo exactamente deja de funcionar Sora 2 API?
24 de septiembre de 2026. OpenAI notificó a los desarrolladores afectados el 24 de marzo de 2026[1].
¿Recomienda OpenAI un modelo de reemplazo?
No. La columna "Reemplazo recomendado" está vacía para la API de Videos y los cinco identificadores de Sora 2[1].
¿Puedo seguir usando un snapshot fijo como sora-2-2025-10-06?
No. Los snapshots fechados se enumeran en la misma fecha del 24 de septiembre que los alias, y la API de Videos que los sirve también está deprecada[1].
¿Qué pasa con videos que ya generé?
Se recuperan a través de GET /videos/{video_id}/content, parte de la API de Videos deprecada[2]. Una vez que ese endpoint se elimine no hay ruta API documentada a esos archivos, así que exporta antes de la fecha.
¿Bajará la migración mi factura?
Depende de tu nivel. De sora-2-pro a 1080p ($0.70/s), sí, sustancialmente. De sora-2 normal a $0.10/s, aproximadamente punto de equilibrio. De sora-2 en Lote a $0.05/s, espera un aumento[3].
¿Generan audio las alternativas como lo hizo Sora 2?
Algunas lo hacen y a menudo es un tier de precio separado. Kling 3.0 y Veo 3.1 ambos enumeran tarifas distintas con audio y sin audio[4][7], mientras que Seedance 2.5 genera voz, efectos de sonido y música con audio por defecto encendido[6] y Wan 3.0 envía una pista de audio por defecto[9].
¿Cuánto de mi código tiene que cambiar?
La estructura asincrónica envío-luego-sondeo se mantiene. Lo que cambia es la nomenclatura de campos, la división de size en resolution más relación de aspecto, seconds como cadena versus duration como número, y la eliminación de la llamada separada de descarga de contenido[2][5].
¿Son iguales las restricciones de contenido de Sora 2 en otro lado?
No necesariamente. Sora 2 rechaza personas reales incluidas figuras públicas, personajes y música con derechos de autor, e imágenes de entrada que contienen caras humanas[2]. Otros modelos trazan esas líneas de manera diferente, así que prompts que fallaron en Sora pueden pasar en otro lado y viceversa.
Secuenciando el trabajo antes de la fecha
Exporta primero. Es el único paso con un plazo que no puede moverse, y no necesita nada más que una clave API y espacio en disco. Luego elige un modelo contra tus restricciones duras en este orden: duración de clip, luego audio, luego resolución, luego tarifa. La duración elimina candidatos más rápidamente, y la tarifa es la cosa más fácil de cambiar después.
Reescribir las llamadas es un trabajo más pequeño de lo que parece, porque la forma envío-sondeo sobrevive y el paso de descarga de archivo desaparece. La parte que vale la pena ralentizar es el modelo de costo. Si vienes de sora-2-pro los ahorros son reales y grandes; si vienes de sora-2 a $0.10/s, o Lote a $0.05/s, planea para costo por segundo plano-a-más alto y elige sobre capacidad en su lugar. De cualquier forma, el cierre de Sora 2 API te da una fecha fija desde la cual trabajar hacia atrás, y la exportación es la parte que deja de ser posible después de ello.
References
- OpenAI. Deprecations: Sora 2 video generation models and Videos API. Retrieved August 2026 from developers.openai.com/api/docs/deprecations
- OpenAI. Video generation with Sora: Videos API guide. Retrieved August 2026 from developers.openai.com/api/docs/guides/video-generation
- OpenAI. Pricing: video generation models, standard and batch per-second rates. Retrieved August 2026 from developers.openai.com/api/docs/pricing
- reAPI. Veo 3.1: model page and per-tier pricing. Retrieved August 2026 from reapi.ai/models/veo3-1
- reAPI. Seedance 2.5 API: request shape, task polling and output fields. Retrieved August 2026 from reapi.ai/docs/seedance-2-5
- reAPI. Seedance 2.5: model page, duration range and per-resolution pricing. Retrieved August 2026 from reapi.ai/models/seedance-2-5
- reAPI. Kling 3.0: model page, audio tiers and per-second pricing. Retrieved August 2026 from reapi.ai/models/kling-3-0
- reAPI. MiniMax H3: model page, duration range and per-second pricing. Retrieved August 2026 from reapi.ai/models/minimax-h3
- reAPI. Wan 3.0: model page, duration range and per-resolution pricing. Retrieved August 2026 from reapi.ai/models/wan-3-0
Autor

Categorías
Más publicaciones

API generación de video IA 2026: cinco modelos comparados
Compara Seedance 2.5, MiniMax H3, Kling 3.0, Veo 3.1 y Vidu Q3 por duración, referencias, audio, resolución, unidad de facturación y mejor ajuste.


MiniMax H3 Max vs H3: velocidad, controles y rutas de API
Compara MiniMax H3 Max vs H3: velocidad, resolución, referencias de entrada, ruta de API, pesos públicos y caso de uso óptimo de cada modelo.


Videos largos IA: Encadenamiento más allá del límite
Máximo 30 segundos por generación IA. Encadenar segmentos sin costura, reglas de parámetros, dónde se ven roturas, y costo de tres minutos de vídeo.
