curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "grok-imagine-image-to-video-beta",
"prompt": "The person starts dancing",
"image_urls": [
"https://example.com/image.jpg"
],
"duration": 6,
"mode": "normal",
"quality": "480p"
}
'import requests
url = "https://api.evolink.ai/v1/videos/generations"
payload = {
"model": "grok-imagine-image-to-video-beta",
"prompt": "The person starts dancing",
"image_urls": ["https://example.com/image.jpg"],
"duration": 6,
"mode": "normal",
"quality": "480p"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'grok-imagine-image-to-video-beta',
prompt: 'The person starts dancing',
image_urls: ['https://example.com/image.jpg'],
duration: 6,
mode: 'normal',
quality: '480p'
})
};
fetch('https://api.evolink.ai/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.evolink.ai/v1/videos/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'grok-imagine-image-to-video-beta',
'prompt' => 'The person starts dancing',
'image_urls' => [
'https://example.com/image.jpg'
],
'duration' => 6,
'mode' => 'normal',
'quality' => '480p'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.evolink.ai/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"grok-imagine-image-to-video-beta\",\n \"prompt\": \"The person starts dancing\",\n \"image_urls\": [\n \"https://example.com/image.jpg\"\n ],\n \"duration\": 6,\n \"mode\": \"normal\",\n \"quality\": \"480p\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.evolink.ai/v1/videos/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"grok-imagine-image-to-video-beta\",\n \"prompt\": \"The person starts dancing\",\n \"image_urls\": [\n \"https://example.com/image.jpg\"\n ],\n \"duration\": 6,\n \"mode\": \"normal\",\n \"quality\": \"480p\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/videos/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"grok-imagine-image-to-video-beta\",\n \"prompt\": \"The person starts dancing\",\n \"image_urls\": [\n \"https://example.com/image.jpg\"\n ],\n \"duration\": 6,\n \"mode\": \"normal\",\n \"quality\": \"480p\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1757169743,
"id": "task-unified-1757169743-7cvnl5zw",
"model": "grok-imagine-image-to-video-beta",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 120
},
"type": "video",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 4.8,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: grok-imagine-image-to-video-beta",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Grok Imagine imagen a video Beta
- El modelo Grok Imagine (grok-imagine-image-to-video-beta) soporta el modo de imagen a video
- Modo de procesamiento asíncrono, usa el ID de tarea devuelto para consultar
- Los enlaces de video generados son válidos por 24 horas, guárdalos oportunamente
curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "grok-imagine-image-to-video-beta",
"prompt": "The person starts dancing",
"image_urls": [
"https://example.com/image.jpg"
],
"duration": 6,
"mode": "normal",
"quality": "480p"
}
'import requests
url = "https://api.evolink.ai/v1/videos/generations"
payload = {
"model": "grok-imagine-image-to-video-beta",
"prompt": "The person starts dancing",
"image_urls": ["https://example.com/image.jpg"],
"duration": 6,
"mode": "normal",
"quality": "480p"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'grok-imagine-image-to-video-beta',
prompt: 'The person starts dancing',
image_urls: ['https://example.com/image.jpg'],
duration: 6,
mode: 'normal',
quality: '480p'
})
};
fetch('https://api.evolink.ai/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.evolink.ai/v1/videos/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'grok-imagine-image-to-video-beta',
'prompt' => 'The person starts dancing',
'image_urls' => [
'https://example.com/image.jpg'
],
'duration' => 6,
'mode' => 'normal',
'quality' => '480p'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.evolink.ai/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"grok-imagine-image-to-video-beta\",\n \"prompt\": \"The person starts dancing\",\n \"image_urls\": [\n \"https://example.com/image.jpg\"\n ],\n \"duration\": 6,\n \"mode\": \"normal\",\n \"quality\": \"480p\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.evolink.ai/v1/videos/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"grok-imagine-image-to-video-beta\",\n \"prompt\": \"The person starts dancing\",\n \"image_urls\": [\n \"https://example.com/image.jpg\"\n ],\n \"duration\": 6,\n \"mode\": \"normal\",\n \"quality\": \"480p\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/videos/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"grok-imagine-image-to-video-beta\",\n \"prompt\": \"The person starts dancing\",\n \"image_urls\": [\n \"https://example.com/image.jpg\"\n ],\n \"duration\": 6,\n \"mode\": \"normal\",\n \"quality\": \"480p\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1757169743,
"id": "task-unified-1757169743-7cvnl5zw",
"model": "grok-imagine-image-to-video-beta",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 120
},
"type": "video",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 4.8,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: grok-imagine-image-to-video-beta",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Autorizaciones
##Todas las APIs requieren autenticación Bearer Token##
Obtener API Key:
Visita la Página de gestión de API Key para obtener tu API Key
Agregar al encabezado de la solicitud:
Authorization: Bearer YOUR_API_KEY
Cuerpo
Nombre del modelo
Compatible con versiones anteriores: El nombre de modelo previamente integrado grok-imagine-image-to-video sigue siendo compatible y se mapea automáticamente a grok-imagine-image-to-video-beta
grok-imagine-image-to-video-beta "grok-imagine-image-to-video-beta"
Prompt de descripción del video
"The person starts dancing"
Lista de URLs de imágenes de referencia
Requisitos:
- Soporta
1~7imágenes por solicitud - Tamaño de imagen: máx
10MB - Formatos soportados: JPEG, PNG, WebP
1 - 7 elements["https://example.com/image.jpg"]
Duración del video (segundos), cualquier entero entre 6 y 30 segundos
6 <= x <= 306
Estilo de generación
Opciones:
fun: Estilo divertidonormal: Estilo normal (predeterminado)spicy: Estilo picante
fun, normal, spicy "normal"
Relación de aspecto (solo efectiva en modo multi-imagen; en modo de imagen única el tamaño del video sigue a la imagen de entrada)
Opciones:
16:9: Horizontal (predeterminado)9:16: Vertical1:1: Cuadrado3:2: Horizontal 3:22:3: Vertical 2:3
16:9, 9:16, 1:1, 3:2, 2:3 "16:9"
Resolución del video, por defecto 480p
Descripción:
480p: Resolución estándar, este es el valor predeterminado720p: Alta resolución
480p, 720p "480p"
URL de callback HTTPS tras completar la tarea
Momento del Callback:
- Se activa cuando la tarea se completa, falla o se cancela
- Se envía después de la confirmación de facturación
Restricciones de Seguridad:
- Solo se soporta protocolo HTTPS
- Callback a IPs internas prohibido (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)
- La longitud de la URL no debe exceder
2048caracteres
Mecanismo de Callback:
- Tiempo de espera:
10segundos - Máximo
3reintentos en caso de fallo (después de1/2/4segundos) - El formato de respuesta coincide con la API de consulta de tareas
- Código de estado 2xx = éxito, otros activan reintento
"https://your-domain.com/webhooks/video-task-completed"
Respuesta
Tarea de video creada exitosamente
Marca de tiempo de creación de la tarea
1757169743
ID de tarea
"task-unified-1757169743-7cvnl5zw"
Nombre del modelo real utilizado
"grok-imagine-image-to-video-beta"
Tipo de tarea específico
video.generation.task Porcentaje de progreso de la tarea (0-100)
0 <= x <= 1000
Estado de la tarea
pending, processing, completed, failed "pending"
Información detallada de la tarea de video
Show child attributes
Show child attributes
Tipo de salida de la tarea
text, image, audio, video "video"
Información de uso y facturación
Show child attributes
Show child attributes