curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "grok-imagine-text-to-video-beta",
"prompt": "A cat playing piano in a jazz club",
"duration": 6,
"mode": "fun",
"aspect_ratio": "16:9",
"quality": "480p"
}
'import requests
url = "https://api.evolink.ai/v1/videos/generations"
payload = {
"model": "grok-imagine-text-to-video-beta",
"prompt": "A cat playing piano in a jazz club",
"duration": 6,
"mode": "fun",
"aspect_ratio": "16:9",
"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-text-to-video-beta',
prompt: 'A cat playing piano in a jazz club',
duration: 6,
mode: 'fun',
aspect_ratio: '16:9',
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-text-to-video-beta',
'prompt' => 'A cat playing piano in a jazz club',
'duration' => 6,
'mode' => 'fun',
'aspect_ratio' => '16:9',
'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-text-to-video-beta\",\n \"prompt\": \"A cat playing piano in a jazz club\",\n \"duration\": 6,\n \"mode\": \"fun\",\n \"aspect_ratio\": \"16:9\",\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-text-to-video-beta\",\n \"prompt\": \"A cat playing piano in a jazz club\",\n \"duration\": 6,\n \"mode\": \"fun\",\n \"aspect_ratio\": \"16:9\",\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-text-to-video-beta\",\n \"prompt\": \"A cat playing piano in a jazz club\",\n \"duration\": 6,\n \"mode\": \"fun\",\n \"aspect_ratio\": \"16:9\",\n \"quality\": \"480p\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1757169743,
"id": "task-unified-1757169743-7cvnl5zw",
"model": "grok-imagine-text-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-text-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 texto a video Beta
- El modelo Grok Imagine (grok-imagine-text-to-video-beta) soporta el modo de texto 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-text-to-video-beta",
"prompt": "A cat playing piano in a jazz club",
"duration": 6,
"mode": "fun",
"aspect_ratio": "16:9",
"quality": "480p"
}
'import requests
url = "https://api.evolink.ai/v1/videos/generations"
payload = {
"model": "grok-imagine-text-to-video-beta",
"prompt": "A cat playing piano in a jazz club",
"duration": 6,
"mode": "fun",
"aspect_ratio": "16:9",
"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-text-to-video-beta',
prompt: 'A cat playing piano in a jazz club',
duration: 6,
mode: 'fun',
aspect_ratio: '16:9',
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-text-to-video-beta',
'prompt' => 'A cat playing piano in a jazz club',
'duration' => 6,
'mode' => 'fun',
'aspect_ratio' => '16:9',
'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-text-to-video-beta\",\n \"prompt\": \"A cat playing piano in a jazz club\",\n \"duration\": 6,\n \"mode\": \"fun\",\n \"aspect_ratio\": \"16:9\",\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-text-to-video-beta\",\n \"prompt\": \"A cat playing piano in a jazz club\",\n \"duration\": 6,\n \"mode\": \"fun\",\n \"aspect_ratio\": \"16:9\",\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-text-to-video-beta\",\n \"prompt\": \"A cat playing piano in a jazz club\",\n \"duration\": 6,\n \"mode\": \"fun\",\n \"aspect_ratio\": \"16:9\",\n \"quality\": \"480p\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1757169743,
"id": "task-unified-1757169743-7cvnl5zw",
"model": "grok-imagine-text-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-text-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-text-to-video sigue siendo compatible y se mapea automáticamente a grok-imagine-text-to-video-beta
grok-imagine-text-to-video-beta "grok-imagine-text-to-video-beta"
Prompt de descripción del video
"A cat playing piano in a jazz club"
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
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-text-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