Referencia
POST /v1/videos
Genera un clip con sonido desde un prompt de texto, en el formato de OpenAI: los métodos videos del SDK funcionan cambiando solo la URL base. Encólalo, consúltalo y descárgalo una vez; después se borra.
Revisado el 6 de noviembre de 2026
Genera un clip
import os
import time
from openai import OpenAI
client = OpenAI(
base_url="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
)
clip = client.videos.create(
model="minimax-h3-max-turbo",
prompt="Waves breaking on a rocky coast at dusk",
seconds="5",
size="1280x720",
)
while clip.status in ("queued", "in_progress"):
time.sleep(5)
clip = client.videos.retrieve(clip.id)
if clip.status == "completed":
client.videos.download_content(clip.id).write_to_file("clip.mp4")Modelos
| Modelo | Ideal para | 480p por segundo | 768p por segundo | 1080p por segundo |
|---|---|---|---|---|
| minimax-h3-max-turbo | Rápido, con sonido. El que conviene probar primero. | $0.045 | $0.07 | $0.14 |
| minimax-h3-max | Más pasos que Turbo para más detalle fino, con sonido. | $0.09 | $0.14 | $0.28 |
Pagas por los segundos que pides. Ambos modelos hacen clips de 5 a 15 segundos con sonido.
Solicitud
| Campo | Recibe | Qué hace |
|---|---|---|
model | Obligatorio | Uno de los ids de modelo de arriba. |
prompt | Obligatorio, hasta 10,000 caracteres | Lo que se filma, enviado al modelo tal cual. Si supera el límite se rechaza, nunca se corta. |
seconds | De 5 a 15 | La duración del clip, como número o como texto. El valor por defecto es 5. El 4 de OpenAI se rechaza; 8 y 12 funcionan. |
size | WIDTHxHEIGHT | Elige la resolución y la forma más cercanas. 1280x720 pasa a 768p en 16:9, y eso es lo que pagas. |
resolution | 480p, 768p o 1080p | Define el precio y gana sobre size. El valor por defecto es 768p. |
aspect_ratio | 16:9, 21:9, 4:3, 1:1, 3:4, 9:16 | Gana sobre size. El valor por defecto es 16:9. |
Envía JSON o el formulario multipart que usan los SDK de OpenAI. Cualquier otro campo, como seed, se descarta y se nombra en x-nokeep-ignored. Un campo que lleva una imagen o un clip, como input_reference, se rechaza con 400 unsupported_input: estos modelos trabajan solo con texto. El SDK de Python de OpenAI muestra un aviso de obsolescencia en sus métodos videos, sobre el servicio de video de OpenAI. No afecta a las llamadas a nosotros, y un verificador de tipos puede marcar el id del modelo.
Las rutas del clip
| Ruta | Qué hace |
|---|---|
POST /v1/videos | Encola un clip y reserva su precio. |
GET /v1/videos/{id} | Indica en qué etapa está. Consúltalo cada pocos segundos. |
GET /v1/videos/{id}/content | El mp4. Funciona una vez; después el clip se borra del host del modelo. Si la descarga se corta, vuelve a pedirla. |
DELETE /v1/videos/{id} | Borra un clip terminado sin descargarlo. Un clip que aún se está renderizando responde 409 video_not_ready. |
GET /v1/videos | Los clips recientes de la cuenta. |
El objeto clip
{
"id": "video_8f3a…",
"object": "video",
"model": "minimax-h3-max-turbo",
"status": "completed",
"progress": 100,
"created_at": 1793960000,
"completed_at": 1793960030,
"expires_at": 1794042800,
"seconds": "5",
"size": "1366x768",
"resolution": "768p",
"aspect_ratio": "16:9",
"error": null,
"downloaded": false,
"expired": false,
"usage": {
"nokeep_credits": 350
}
}statusesqueued,in_progress,completedofailed.progresses 0 hasta que el clip termina, y luego 100. El modelo no informa nada en medio.sizese calcula a partir de la resolución y la forma, así que el archivo puede diferir en unos píxeles.
Lo que pagas
- El precio completo del clip se reserva al encolarlo, contra tus créditos comprados y el tope diario de la clave.
- Se cobra cuando el clip termina, lo descargues o no.
- Un clip que falla no cuesta nada, y su estado lo indica.
Dónde se queda el clip
Un clip terminado espera en el host del modelo, en su nivel privado, hasta 23 horas. Se borra allí después de su única descarga, o cuando lo borras. Nosotros nunca guardamos el archivo, y pasado ese tiempo responde 410 video_gone. Nuestra fila propia sobre un clip guarda su id, clave, modelo, duración, resolución, forma, créditos y horarios, y nunca el prompt. Se borra a las 48 horas.
Contenido, límites y errores
Se mantienen cuatro límites estrictos: contenido sexual con menores, contenido sexual de personas reales, daño masivo y apuntar contra una persona real. Un prompt que cruza uno recibe 422 hard_limit y no cuesta nada. El host de un modelo también puede rechazar una solicitud, lo que es 422 content_refused, también gratis. Ver Límites estrictos.
Una clave puede encolar 20 clips por minuto, dentro de sus 120 solicitudes en total, y tener 10 renderizándose a la vez. Pasado eso, 429 rate_limited. La página de errores lista cada código.
Para probar tu código sin gastar nada, envía sk-nokeep-test como clave. Ejecuta todas las comprobaciones, informa el clip como terminado de inmediato como video_test, y su archivo está vacío.