curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "gemini-omni-flash-text-to-video",
"prompt": "Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando",
"aspect_ratio": "16:9",
"duration": 10
}
'import requests
url = "https://api.evolink.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-flash-text-to-video",
"prompt": "Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando",
"aspect_ratio": "16:9",
"duration": 10
}
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: 'gemini-omni-flash-text-to-video',
prompt: 'Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando',
aspect_ratio: '16:9',
duration: 10
})
};
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' => 'gemini-omni-flash-text-to-video',
'prompt' => 'Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando',
'aspect_ratio' => '16:9',
'duration' => 10
]),
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\": \"gemini-omni-flash-text-to-video\",\n \"prompt\": \"Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando\",\n \"aspect_ratio\": \"16:9\",\n \"duration\": 10\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\": \"gemini-omni-flash-text-to-video\",\n \"prompt\": \"Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando\",\n \"aspect_ratio\": \"16:9\",\n \"duration\": 10\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\": \"gemini-omni-flash-text-to-video\",\n \"prompt\": \"Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando\",\n \"aspect_ratio\": \"16:9\",\n \"duration\": 10\n}"
response = http.request(request)
puts response.read_body{
"created": 1757169743,
"id": "task-unified-1757169743-7cvnl5zw",
"model": "gemini-omni-flash-text-to-video",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": false,
"estimated_time": 60
},
"type": "video",
"usage": {
"billing_rule": "per_token",
"credits_reserved": 102.34,
"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: gemini-omni-flash-text-to-video",
"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"
}
}Gemini Omni Flash 1.0 Texto a Video
- El modelo Gemini Omni Flash (gemini-omni-flash-text-to-video) admite el modo texto a video, generando un video con audio nativo a partir de un prompt de texto
- Control de duracion: usa
durationpara indicar una duracion entera de3~10segundos, o pasaautopara dejar que el modelo lo decida - Relacion de aspecto: usa
aspect_ratiopara elegir16:9,9:16oauto - Audio nativo: el modelo genera automaticamente audio sincronizado para la imagen, sin parametros adicionales
- Descripcion negativa: escribela directamente en
prompt(por ejemploNo dialogue); este modelo no ofrece un parametro independiente de prompt negativo - Procesamiento asincrono, usa el ID de tarea devuelto para consultar estado
- Los enlaces de video generados son validos durante 24 horas, guardalos cuanto antes
curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "gemini-omni-flash-text-to-video",
"prompt": "Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando",
"aspect_ratio": "16:9",
"duration": 10
}
'import requests
url = "https://api.evolink.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-flash-text-to-video",
"prompt": "Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando",
"aspect_ratio": "16:9",
"duration": 10
}
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: 'gemini-omni-flash-text-to-video',
prompt: 'Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando',
aspect_ratio: '16:9',
duration: 10
})
};
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' => 'gemini-omni-flash-text-to-video',
'prompt' => 'Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando',
'aspect_ratio' => '16:9',
'duration' => 10
]),
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\": \"gemini-omni-flash-text-to-video\",\n \"prompt\": \"Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando\",\n \"aspect_ratio\": \"16:9\",\n \"duration\": 10\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\": \"gemini-omni-flash-text-to-video\",\n \"prompt\": \"Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando\",\n \"aspect_ratio\": \"16:9\",\n \"duration\": 10\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\": \"gemini-omni-flash-text-to-video\",\n \"prompt\": \"Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando\",\n \"aspect_ratio\": \"16:9\",\n \"duration\": 10\n}"
response = http.request(request)
puts response.read_body{
"created": 1757169743,
"id": "task-unified-1757169743-7cvnl5zw",
"model": "gemini-omni-flash-text-to-video",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": false,
"estimated_time": 60
},
"type": "video",
"usage": {
"billing_rule": "per_token",
"credits_reserved": 102.34,
"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: gemini-omni-flash-text-to-video",
"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 autenticacion Bearer Token##
Obtener API Key:
Visita la Pagina de gestion de API Key para obtener tu API Key
Agregar al encabezado de la solicitud:
Authorization: Bearer YOUR_API_KEY
Cuerpo
Nombre del modelo, fijo en gemini-omni-flash-text-to-video
gemini-omni-flash-text-to-video "gemini-omni-flash-text-to-video"
Prompt de texto para la generacion de video, admite chino e ingles
Recomendaciones de uso:
- Describe el sujeto principal, la accion, la escena, el movimiento de camara, etc.; cuanto mas concreto, mas estable el resultado
- Escribe los requisitos negativos directamente en el prompt (por ejemplo
No dialogue,sin texto); este modelo no ofrece un parametro independiente de prompt negativo
"Una canica de vidrio rueda rapidamente por un riel de madera y finalmente cae al agua salpicando"
Duracion del video (segundos), por defecto 10
Valores admitidos:
- Entero: rango
3 ~ 10segundos auto: el modelo decide la duracion de salida
Nota de facturacion: el cobro real se basa en el consumo del video generado
3 <= x <= 106
Relacion de aspecto del video, por defecto 16:9
Valores admitidos:
16:9: imagen horizontal9:16: imagen verticalauto: el modelo decide la relacion de aspecto
16:9, 9:16, auto "16:9"
Direccion de callback HTTPS despues de completar la tarea
Momento del callback:
- Se activa cuando la tarea se completa (completed), falla (failed) o se cancela (cancelled)
- Se envia despues de completar la confirmacion de facturacion
Restricciones de seguridad:
- Solo se admite el protocolo HTTPS
- El callback a direcciones IP internas esta 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 - Maximo
3reintentos en caso de fallo (reintentos despues de1segundo/2segundos/4segundos) - El formato del cuerpo de respuesta del callback es consistente con el formato de respuesta de la API de consulta de tareas
- La direccion de callback que devuelve un codigo de estado 2xx se considera exitosa, otros codigos de estado activaran reintentos
"https://your-domain.com/webhooks/video-task-completed"
Respuesta
Tarea de video creada exitosamente
Marca de tiempo de creacion de la tarea
1757169743
ID de tarea
"task-unified-1757169743-7cvnl5zw"
Nombre del modelo real utilizado
"gemini-omni-flash-text-to-video"
Tipo de tarea especifico
video.generation.task Porcentaje de progreso de la tarea (0-100)
0 <= x <= 1000
Estado de la tarea
pending, processing, completed, failed "pending"
Informacion detallada de la tarea de video
Show child attributes
Show child attributes
Tipo de salida de la tarea
text, image, audio, video "video"
Informacion de uso y facturacion
Show child attributes
Show child attributes