curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "pixverse-v6",
"prompt": "A cinematic shot of a corgi running through a sunflower field at golden hour",
"size": "16:9",
"resolution": "540p",
"duration": 5
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "pixverse-v6",
"prompt": "A cinematic shot of a corgi running through a sunflower field at golden hour",
"size": "16:9",
"resolution": "540p",
"duration": 5
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/videos/generations";
const payload = {
model: "pixverse-v6",
prompt: "A cinematic shot of a corgi running through a sunflower field at golden hour",
size: "16:9",
resolution: "540p",
duration: 5
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JWXXXXXXXXXXXX"
}
]
}
{
"error": {
"type": "invalid_request_error",
"message": "invalid duration 20, allowed range: 1-15 seconds"
}
}
{
"error": {
"code": 401,
"message": "Falló la autenticación, verifique su API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 403,
"message": "insufficient quota: balance=0, required=0.25",
"type": "quota_not_enough"
}
}
{
"error": {
"code": 429,
"message": "Demasiadas solicitudes, intente nuevamente más tarde",
"type": "rate_limit_error"
}
}
Pixverse v6
Pixverse v6 Generación de Video
- Modelo unificado de generación de video Pixverse v6
- Soporta texto a video, imagen a video, transición de primer/último frame, fusión multi-referencia y extensión de video
- Resoluciones 360p/540p/720p/1080p, duración de 1–15 segundos
- API de tareas asíncronas: tras el envío, consulte el resultado por ID de tarea
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "pixverse-v6",
"prompt": "A cinematic shot of a corgi running through a sunflower field at golden hour",
"size": "16:9",
"resolution": "540p",
"duration": 5
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "pixverse-v6",
"prompt": "A cinematic shot of a corgi running through a sunflower field at golden hour",
"size": "16:9",
"resolution": "540p",
"duration": 5
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/videos/generations";
const payload = {
model: "pixverse-v6",
prompt: "A cinematic shot of a corgi running through a sunflower field at golden hour",
size: "16:9",
resolution: "540p",
duration: 5
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JWXXXXXXXXXXXX"
}
]
}
{
"error": {
"type": "invalid_request_error",
"message": "invalid duration 20, allowed range: 1-15 seconds"
}
}
{
"error": {
"code": 401,
"message": "Falló la autenticación, verifique su API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 403,
"message": "insufficient quota: balance=0, required=0.25",
"type": "quota_not_enough"
}
}
{
"error": {
"code": 429,
"message": "Demasiadas solicitudes, intente nuevamente más tarde",
"type": "rate_limit_error"
}
}
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "pixverse-v6",
"prompt": "A cinematic shot of a corgi running through a sunflower field at golden hour",
"size": "16:9",
"resolution": "540p",
"duration": 5
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "pixverse-v6",
"prompt": "A cinematic shot of a corgi running through a sunflower field at golden hour",
"size": "16:9",
"resolution": "540p",
"duration": 5
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/videos/generations";
const payload = {
model: "pixverse-v6",
prompt: "A cinematic shot of a corgi running through a sunflower field at golden hour",
size: "16:9",
resolution: "540p",
duration: 5
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JWXXXXXXXXXXXX"
}
]
}
{
"error": {
"type": "invalid_request_error",
"message": "invalid duration 20, allowed range: 1-15 seconds"
}
}
{
"error": {
"code": 401,
"message": "Falló la autenticación, verifique su API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 403,
"message": "insufficient quota: balance=0, required=0.25",
"type": "quota_not_enough"
}
}
{
"error": {
"code": 429,
"message": "Demasiadas solicitudes, intente nuevamente más tarde",
"type": "rate_limit_error"
}
}
Autenticación
string
requerido
Todos los endpoints requieren autenticación mediante Bearer Token.Obtener una API Key:Visite la página de gestión de API Key para obtener su API Key.Añada la siguiente cabecera a la solicitud:
Authorization: Bearer YOUR_API_KEY
Parámetros de la solicitud
string
requerido
Nombre del modelo de generación de video. Fijo en
pixverse-v6.boolean
predeterminado:"false"
Indica si se debe moderar el contenido antes de enviar la tarea de vídeo.
true: revisar los prompts y las imágenes de entrada conomni-moderation-latestfalseu omitido: no enviar una solicitud de moderación, sin coste ni latencia de moderación adicionales (predeterminado)
string
requerido
Descripción del contenido del video, hasta 5000 caracteres. Obligatorio en todos los modos.
string
predeterminado:"540p"
Nivel de resolución del video. Afecta directamente la facturación.
360p: SD540p: Estándar (predeterminado)720p: HD1080p: Full HD
Otros valores de resolución devolverán un error de parámetro.
integer
predeterminado:"5"
Duración del video en segundos, rango
1–15.El modo de transición de primer/último frame solo admite
5 u 8 segundos.string
predeterminado:"16:9"
Relación de aspecto del video. Solo efectivo en los modos texto a video y fusión multi-referencia.
16:9: Horizontal panorámico (predeterminado)4:3: Horizontal 4:31:1: Cuadrado3:4: Vertical 3:49:16: Vertical2:3: Vertical 2:33:2: Horizontal 3:221:9: Cinematográfico panorámico
integer
predeterminado:"0"
Semilla aleatoria, rango
0–2147483647. El mismo prompt y semilla pueden reproducir resultados similares.string
Prompt negativo para excluir contenido no deseado. Hasta 2048 caracteres.
boolean
predeterminado:"false"
Si se genera una pista de audio.
true: Generar audio (aumenta el precio)false: Sin audio (predeterminado)
boolean
predeterminado:"false"
Si se añade marca de agua en la esquina inferior derecha del video.
true: Añadir marca de aguafalse: Sin marca de agua (predeterminado)
string
Modo de movimiento.
normal: Modo estándar (pixverse-v6solo admite este valor)
fast solo se aplica a modelos antiguos y será rechazado por el upstream para pixverse-v6.boolean
predeterminado:"false"
Si se genera un video continuo de múltiples clips. Solo soportado en los modos texto a video e imagen a video.
true: Generar video continuo de múltiples clipsfalse: Clip único (predeterminado)
array<url>
Array de URL de imágenes de entrada para imagen a video. Solo se utiliza la primera imagen.Las imágenes deben ser URL HTTP/HTTPS accesibles públicamente.
url
URL del primer frame en el modo de transición. Debe enviarse junto con
last_frame_image.url
URL del último frame en el modo de transición. Debe enviarse junto con
first_frame_image.array<url>
Array de URL de imágenes de referencia para el modo de fusión multi-referencia. Soporta 1–7 imágenes.Pasar este campo activa el modo de fusión multi-referencia.
string
ID de la tarea de origen para la extensión de video. Pasar este campo activa el modo de extensión.La tarea de origen debe pertenecer al usuario actual, usar el modelo
pixverse-v6 y tener estado completed.Modos de generación
El adaptador despacha automáticamente al modo de generación correspondiente según los campos de la solicitud. La coincidencia se realiza por orden de prioridad; gana el primero que coincide.| Modo | Condición de activación | Descripción |
|---|---|---|
| Texto a video | Sin campos de imagen ni de extensión | Genera video a partir del prompt |
| Imagen a video | image_urls con una imagen | Usa la primera imagen como entrada |
| Transición primer/último frame | first_frame_image y last_frame_image juntos | Genera una transición fluida entre dos frames |
| Fusión multi-referencia | Array img_references proporcionado | Fusiona 1–7 imágenes de referencia en un video |
| Extensión de video | extend_from_task_id proporcionado | Continúa desde una tarea de Pixverse completada |
Todas las entradas de imagen solo aceptan URL HTTP/HTTPS accesibles públicamente. base64 y Data URI no son compatibles. Si solo dispone de imágenes locales, súbalas primero a un object storage y pase la URL.
Reglas de parámetros
| Restricción | Descripción |
|---|---|
| Duración | 1 ≤ duration ≤ 15 segundos; modo de transición solo 5 u 8 segundos |
| Resolución | Solo se admiten 360p, 540p, 720p, 1080p |
| Relación de aspecto | size solo es efectivo en los modos texto a video y fusión multi-referencia |
| Longitud del prompt | prompt hasta 5000 caracteres, negative_prompt hasta 2048 caracteres |
| Imagen a video | image_urls solo usa la primera imagen |
| Transición | first_frame_image y last_frame_image deben enviarse en pareja |
| Modo de movimiento | pixverse-v6 solo admite normal |
| Fusión multi-referencia | img_references admite 1–7 imágenes |
| Extensión de video | extend_from_task_id debe apuntar a una tarea pixverse-v6 con estado completed del usuario actual |
Respuesta
integer
Código de estado de la respuesta.
200 en caso de éxito.array
Consulta del resultado de la tarea
La generación de video es una tarea asíncrona. Tras el envío se devuelve untask_id. Use el endpoint Obtener estado de la tarea para consultar progreso y resultado.
cURL
curl --request GET \
--url https://api.apimart.ai/v1/tasks/task_01JWXXXXXXXXXXXX \
--header 'Authorization: Bearer <token>'
completed o failed.
Ejemplo de éxito
{
"code": 200,
"data": {
"id": "task_01KSPX48B8V1M6C2ZN0D0T4BKB",
"status": "completed",
"progress": 100,
"cost": 0.2,
"credits_cost": 2,
"created": 1779958948,
"completed": 1779958999,
"estimated_time": 100,
"actual_time": 51,
"result": {
"videos": [
{
"url": ["https://upload.apimart.ai/f/video/xxxx.mp4"],
"expires_at": 1780045399
}
]
}
}
}
data.result.videos[0].url[0]. El campo url es a su vez un array. Los enlaces de video suelen caducar tras 24 horas; descárguelos o transfiéralos a tiempo.
Ejemplo de fallo
{
"code": 200,
"data": {
"id": "task_01KSPX48B8V1M6C2ZN0D0T4BKB",
"status": "failed",
"progress": 100,
"cost": 0,
"credits_cost": 0,
"created": 1779958948,
"completed": 1779958960,
"error": {
"code": "task_failed",
"message": "pixverse error 400063: moderation failed",
"type": "task_failed"
}
}
}
cost suele ser 0. La causa del error está en data.error.message.
Casos de uso
Caso 1: Texto a video
{
"model": "pixverse-v6",
"prompt": "A neon-lit alley in Tokyo at night, light rain, anamorphic lens flare",
"size": "21:9",
"resolution": "720p",
"duration": 8,
"seed": 42,
"audio": true
}
Caso 2: Imagen a video
{
"model": "pixverse-v6",
"prompt": "Camera slowly zooms in, gentle wind moves the leaves",
"image_urls": ["https://example.com/first-frame.jpg"],
"resolution": "540p",
"duration": 5
}
Caso 3: Transición primer/último frame
{
"model": "pixverse-v6",
"prompt": "transform smoothly from a puppy to a cat",
"first_frame_image": "https://example.com/puppy.jpg",
"last_frame_image": "https://example.com/cat.jpg",
"resolution": "540p",
"duration": 5,
"motion_mode": "normal"
}
Caso 4: Fusión multi-referencia
{
"model": "pixverse-v6",
"prompt": "A girl wearing the outfit from image 2, holding the cat from image 3",
"img_references": [
"https://example.com/character.jpg",
"https://example.com/outfit.jpg",
"https://example.com/cat.jpg"
],
"size": "9:16",
"resolution": "720p",
"duration": 5
}
Caso 5: Extensión de video
{
"model": "pixverse-v6",
"prompt": "the character now walks into a forest",
"extend_from_task_id": "task_01JWXXXXXXXXXXXX",
"resolution": "540p",
"duration": 5
}