wan2.7-t2v
Solo model y prompt son obligatorios. Sin size ni duration, la pasarela envía 1280*720 con cinco segundos.
No hay coincidencias. Prueba con un protocolo, una capacidad o una ruta de endpoint.
Los modelos de vídeo responden como tareas, no con una única respuesta. POST /v1/videos devuelve un id de tarea con "status": "queued", y GET /v1/videos/{task_id} informa del progreso hasta que la tarea llega a completed o failed. Al completarse, el archivo resultante es la URL firmada de metadata.url; incluye un parámetro Expires, así que descargue el archivo en lugar de guardar el enlace. Una tarea fallida trae el código y el mensaje del proveedor en error.code y error.message, lo que suele bastar para ver qué campo faltaba en la solicitud. POST /v1/video/generations llega al mismo handler, para los clientes ya escritos con esa ruta.
curl https://api.chinaapi.ai/v1/videos \
-H "Authorization: Bearer $CHINAAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan2.7-i2v",
"prompt": "the cat turns and walks toward the camera",
"input_reference": "https://example.com/first-frame.jpg",
"size": "1280*720",
"duration": 5
}'
# {"id":"task_9f2c...","task_id":"task_9f2c...","object":"video",
# "model":"wan2.7-i2v","status":"queued","progress":0}
curl https://api.chinaapi.ai/v1/videos/task_9f2c... \
-H "Authorization: Bearer $CHINAAPI_KEY"
# {"id":"task_9f2c...","object":"video","model":"wan2.7-i2v",
# "status":"completed","progress":100,
# "metadata":{"url":"https://.../output.mp4?Expires=..."}}
Solo model y prompt son obligatorios. Sin size ni duration, la pasarela envía 1280*720 con cinco segundos.
Anime una imagen fija. input_reference recibe la URL de una imagen accesible públicamente y se convierte en el primer fotograma; envíe size y duration con ella.
Construye un vídeo a partir de material de referencia. input_reference acepta una imagen de referencia; para enviar varias usa images, y video_url añade un vídeo de referencia — las referencias se cuentan juntas, hasta cinco. No envíes input_reference e images a la vez, porque la pasarela conserva solo input_reference.
Edite un clip existente a partir de un prompt. video_url recibe el vídeo de origen, que debe tener entre 2 y 10 segundos en MP4 o MOV, y size define la salida.
Las imágenes de referencia van en images, y input_reference admite una sola; si envías ambas, se conservan las dos. La duración va en seconds o duration, y los parámetros del proveedor van en metadata, donde resolution es 480p o 720p.
Misma forma de petición que doubao-seedance-2-5-260628, incluidas las reglas de role para metadata.content. doubao-seedance-2-0-fast-260128 y doubao-seedance-2-0-mini-260615 cambian calidad por velocidad y coste, y la línea 2.0 exige al menos una referencia de imagen o vídeo, mientras que la 2.5 también acepta solo audio.
El primer fotograma va en image; esta familia nunca lee input_reference. mode vale std por defecto y duration, 5 segundos. El resto lo lleva metadata: image_tail para un fotograma final, sound con on u off (off por defecto), además de negative_prompt, cfg_scale y camera_control.
Envía prompt para texto a vídeo, o añade image y la pasarela construye el array contents que espera el proveedor. El tamaño vive bajo metadata.settings: resolution es 720p o 1080p, duration va de 3 a 15 segundos, y aspect_ratio es 16:9, 9:16 o 1:1. El audio siempre viene incluido y no tiene interruptor.
Generación guiada por varias imágenes de referencia a la vez. Todos los parámetros viven en metadata, y no existe un campo resolution: el nivel de calidad es mode. Mira el ejemplo completo más abajo.
Toma los campos propios de la pasarela y arma la carga del proveedor por ti: image o input_reference pasa a ser el primer fotograma, images pasan a ser imágenes de referencia, y video_url pasa a ser un vídeo de referencia. size elige 768P o 2K y duration es un entero de 4 a 15. Las peticiones solo de texto necesitan un metadata.ratio explícito distinto de adaptive.
Junto con MiniMax-Hailuo-2.3-Fast y MiniMax-Hailuo-02. Estos solo leen prompt, duration y size del nivel superior; toda imagen pasa por metadata, como first_frame_image, last_frame_image o subject_reference.
Junto con happyhorse-1.1-i2v y happyhorse-1.1-r2v. Los campos coinciden con los de la familia wan2.7 — prompt, input_reference, size, duration — y aquí el 480P sí tiene precio, así que 832*480 se acepta donde wan2.7 lo rechaza. Varias referencias van en metadata.input.media, porque el ensamblado automático que dispara el campo images es exclusivo de wan2.7-r2v.
size como el ancho y el alto unidos por un asterisco, como en 1280*720. La letra x no se acepta: 832x480 devuelve invalid size: 832x480, example: 1920*1080. duration es un número entero de segundos. Para wan2.7-i2v, wan2.7-r2v y wan2.7-videoedit, la pasarela pliega size en un nivel de resolución y el proveedor solo tiene dos, así que envía 1280*720 para 720P o 1920*1080 para 1080P. Un tamaño 480P como 832*480 no tiene precio en estos tres y o bien se rechaza de entrada, o bien se acepta y luego falla en el proveedor con InvalidParameter; una tarea fallida se reembolsa, pero el viaje de ida y vuelta se pierde igualmente. wan2.7-t2v toma el valor tal cual.
size mediante una tabla fija que escribe los tamaños con la letra x — 1280x720, 1920x1080, 720x1280, 1080x1920, 1024x1024, 512x512 — y todo lo que no reconoce se convierte en 1:1 sin dar error. Enviar la forma con asterisco 1280*720 a kling-v3 devuelve por tanto un vídeo cuadrado en lugar de una queja; fija metadata.aspect_ratio directamente cuando el encuadre importa.
MiniMax-Hailuo-2.3, MiniMax-Hailuo-2.3-Fast y MiniMax-Hailuo-02 descartan los campos de nivel superior image, input_reference, images y video_url sin avisar: la petición tiene éxito, pero se ejecuta como texto a vídeo y se cobra como tal. Pon la imagen en metadata.first_frame_image, añade metadata.last_frame_image para un fotograma final, y usa metadata.subject_reference para referencias de personaje. MiniMax-H3 es la excepción de esta familia y sí lee los campos de nivel superior.
curl https://api.chinaapi.ai/v1/video/generations \
-H "Authorization: Bearer $CHINAAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-v3-omni",
"prompt": "the character from the references walks through a neon-lit street",
"metadata": {
"image_list": [
{"image_url": "https://example.com/character.jpg"},
{"image_url": "https://example.com/outfit.jpg"},
{"image_url": "https://example.com/scene.jpg"}
],
"mode": "std",
"duration": "5",
"aspect_ratio": "16:9",
"sound": "off"
}
}'
curl https://api.chinaapi.ai/v1/video/generations/task_9f2c... \
-H "Authorization: Bearer $CHINAAPI_KEY"
# {"code":"success",
# "data":{"task_id":"task_9f2c...","status":"SUCCESS",
# "progress":"100%","fail_reason":"",
# "result_url":"https://.../output.mp4"}}
type; el campo existe solo para marcar first_frame o end_frame, y aspect_ratio es obligatorio siempre que no haya primer fotograma. mode es el nivel de calidad — std, pro o 4k — y el valor por defecto del proveedor es pro, que se cobra a 1,33x el precio de lista, mientras que 4k se cobra a 5x; envía mode de forma explícita para que el cargo sea el que esperas. duration es una cadena de "3" a "15" y sound vale off por defecto. Un vídeo de referencia va en video_list y debe fijar "refer_type": "feature": el modo de edición base se cobra según la duración del vídeo que aportas, no se puede tarifar antes del envío, y por eso se rechaza. Las imágenes de referencia también tienen un tamaño mínimo en el proveedor: un archivo del tamaño de un icono pasa el envío y luego hace fallar la tarea con Image pixel is invalid; la tarea fallida se reembolsa, pero el viaje de ida y vuelta se pierde.
GET /v1/videos/{task_id} responde en el formato de vídeo de OpenAI, donde el archivo es metadata.url y el progreso es un número. GET /v1/video/generations/{task_id} responde {"code": "success", "data": {…}}, donde el archivo es data.result_url, data.status es una palabra en mayúsculas como SUCCESS o FAILURE, data.progress es una cadena como "100%", y el fallo se explica en data.fail_reason. Consulta la misma ruta por la que enviaste.
curl https://api.chinaapi.ai/v1/videos \
-H "Authorization: Bearer $CHINAAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2-5-260628",
"prompt": "the subject slowly turns toward the camera",
"images": ["https://example.com/first-frame.jpg"],
"seconds": "5",
"metadata": {"resolution": "480p"}
}'
curl https://api.chinaapi.ai/v1/videos \
-H "Authorization: Bearer $CHINAAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2-5-260628",
"prompt": "keep the subject from the reference image",
"seconds": "5",
"metadata": {
"resolution": "480p",
"ratio": "16:9",
"content": [
{
"type": "image_url",
"image_url": {"url": "https://example.com/reference.jpg"},
"role": "reference_image"
}
]
}
}'
role se lee como primer fotograma y no como referencia: la salida sigue la relación de aspecto de esa imagen, enviar ratio junto a ella se rechaza con InvalidParameter.TaskTypeConstraint, y un seconds de 2 también se rechaza en ese modo, mientras 5 funciona. generate_audio vale true por defecto en el proveedor, así que el archivo vuelve con pista de audio salvo que lo pongas en false en metadata. Etiqueta cada parte de metadata.content con un role para llegar al modo de referencia completo — hasta 30 imágenes, 10 vídeos y 10 clips de audio, entrada solo de audio, y 30 segundos de una sola vez — donde ratio sí se acepta.