Gemini Omni 1.1 Flash
curl --request POST \
--url https://whollyapi.com/api/v1/jobs/createTask \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"input": {
"prompt": "<string>",
"image_urls": [
"<string>"
],
"first_frame_url": "<string>",
"last_frame_url": "<string>",
"video_list": [
{
"url": "<string>",
"start": 123,
"ends": 123
}
],
"duration": 123,
"aspect_ratio": "<string>",
"resolution": "<string>",
"seed": 123
}
}
'import requests
url = "https://whollyapi.com/api/v1/jobs/createTask"
payload = {
"model": "<string>",
"input": {
"prompt": "<string>",
"image_urls": ["<string>"],
"first_frame_url": "<string>",
"last_frame_url": "<string>",
"video_list": [
{
"url": "<string>",
"start": 123,
"ends": 123
}
],
"duration": 123,
"aspect_ratio": "<string>",
"resolution": "<string>",
"seed": 123
}
}
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: '<string>',
input: {
prompt: '<string>',
image_urls: ['<string>'],
first_frame_url: '<string>',
last_frame_url: '<string>',
video_list: [{url: '<string>', start: 123, ends: 123}],
duration: 123,
aspect_ratio: '<string>',
resolution: '<string>',
seed: 123
}
})
};
fetch('https://whollyapi.com/api/v1/jobs/createTask', 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://whollyapi.com/api/v1/jobs/createTask",
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' => '<string>',
'input' => [
'prompt' => '<string>',
'image_urls' => [
'<string>'
],
'first_frame_url' => '<string>',
'last_frame_url' => '<string>',
'video_list' => [
[
'url' => '<string>',
'start' => 123,
'ends' => 123
]
],
'duration' => 123,
'aspect_ratio' => '<string>',
'resolution' => '<string>',
'seed' => 123
]
]),
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://whollyapi.com/api/v1/jobs/createTask"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"first_frame_url\": \"<string>\",\n \"last_frame_url\": \"<string>\",\n \"video_list\": [\n {\n \"url\": \"<string>\",\n \"start\": 123,\n \"ends\": 123\n }\n ],\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"seed\": 123\n }\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://whollyapi.com/api/v1/jobs/createTask")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"first_frame_url\": \"<string>\",\n \"last_frame_url\": \"<string>\",\n \"video_list\": [\n {\n \"url\": \"<string>\",\n \"start\": 123,\n \"ends\": 123\n }\n ],\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"seed\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://whollyapi.com/api/v1/jobs/createTask")
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\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"first_frame_url\": \"<string>\",\n \"last_frame_url\": \"<string>\",\n \"video_list\": [\n {\n \"url\": \"<string>\",\n \"start\": 123,\n \"ends\": 123\n }\n ],\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"seed\": 123\n }\n}"
response = http.request(request)
puts response.read_body{
"code": 123,
"msg": "<string>",
"data": {
"taskId": "<string>"
}
}Gemini
Gemini Omni 1.1 Flash
Create multimodal video generation tasks with Gemini Omni 1.1 Flash.
POST
/
api
/
v1
/
jobs
/
createTask
Gemini Omni 1.1 Flash
curl --request POST \
--url https://whollyapi.com/api/v1/jobs/createTask \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"input": {
"prompt": "<string>",
"image_urls": [
"<string>"
],
"first_frame_url": "<string>",
"last_frame_url": "<string>",
"video_list": [
{
"url": "<string>",
"start": 123,
"ends": 123
}
],
"duration": 123,
"aspect_ratio": "<string>",
"resolution": "<string>",
"seed": 123
}
}
'import requests
url = "https://whollyapi.com/api/v1/jobs/createTask"
payload = {
"model": "<string>",
"input": {
"prompt": "<string>",
"image_urls": ["<string>"],
"first_frame_url": "<string>",
"last_frame_url": "<string>",
"video_list": [
{
"url": "<string>",
"start": 123,
"ends": 123
}
],
"duration": 123,
"aspect_ratio": "<string>",
"resolution": "<string>",
"seed": 123
}
}
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: '<string>',
input: {
prompt: '<string>',
image_urls: ['<string>'],
first_frame_url: '<string>',
last_frame_url: '<string>',
video_list: [{url: '<string>', start: 123, ends: 123}],
duration: 123,
aspect_ratio: '<string>',
resolution: '<string>',
seed: 123
}
})
};
fetch('https://whollyapi.com/api/v1/jobs/createTask', 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://whollyapi.com/api/v1/jobs/createTask",
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' => '<string>',
'input' => [
'prompt' => '<string>',
'image_urls' => [
'<string>'
],
'first_frame_url' => '<string>',
'last_frame_url' => '<string>',
'video_list' => [
[
'url' => '<string>',
'start' => 123,
'ends' => 123
]
],
'duration' => 123,
'aspect_ratio' => '<string>',
'resolution' => '<string>',
'seed' => 123
]
]),
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://whollyapi.com/api/v1/jobs/createTask"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"first_frame_url\": \"<string>\",\n \"last_frame_url\": \"<string>\",\n \"video_list\": [\n {\n \"url\": \"<string>\",\n \"start\": 123,\n \"ends\": 123\n }\n ],\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"seed\": 123\n }\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://whollyapi.com/api/v1/jobs/createTask")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"first_frame_url\": \"<string>\",\n \"last_frame_url\": \"<string>\",\n \"video_list\": [\n {\n \"url\": \"<string>\",\n \"start\": 123,\n \"ends\": 123\n }\n ],\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"seed\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://whollyapi.com/api/v1/jobs/createTask")
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\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"first_frame_url\": \"<string>\",\n \"last_frame_url\": \"<string>\",\n \"video_list\": [\n {\n \"url\": \"<string>\",\n \"start\": 123,\n \"ends\": 123\n }\n ],\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"seed\": 123\n }\n}"
response = http.request(request)
puts response.read_body{
"code": 123,
"msg": "<string>",
"data": {
"taskId": "<string>"
}
}Create Task
Create a new multimodal video generation task.POST /api/v1/jobs/createTask
Authentication
Authorization: Bearer YOUR_API_KEY
Request Parameters
Top-Level Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | Yes | Must be google/gemini-omni-flash-1-1. |
input | object | Yes | Input parameters for the multimodal video generation task. |
Parameters
string
required
Must be
google/gemini-omni-flash-1-1.input Parameters
object
required
The
input object contains the parameters used to generate the video.string
required
Use
prompt to describe the video content, style, camera and character action you want to generate in video.Maximum length: 20,000 characters.string[]
Use the provided image URLs for characters, scenes, styles, or storyboard guidance.
The
The
image_urls must contain the URL of an uploaded image. The value must be an uploaded file URL, not the file content itself.Note: Mutually exclusive with first_frame_url.Supported image constraints:- Each file maximum size: 20 MB
- Maximum file: 7
string
Provide the URL of the image to be used as the first frame for video generation. The value must be an uploaded file URL, not the file content itself.Note: Mutually exclusive with
image_urls, and video_listMaximum file size: 20 MBstring
Provide the URL of the image to be used as the last frame for video generation. The value must be an uploaded file URL, not the file content itself.Note: Must be provided together with
first_frame_url.Maximum file size: 20 MBobject[]
Use the provided each video url defines a source video and the trim range to use during generation. .
The
The
video_list must contain the URL of an uploaded video. The value must be an uploaded file URL, not the file content itself.- Each file maximum size: 100 MB.
- Total duration of all videos not exceeding
30seconds. endsshould be greater thanstart- Trim range must not exceed 10 seconds.
- Maximum 1 video.
string
required
Video URL for the generation.
number
required
Start time in seconds.
- Must be
>=0.
number
required
End time in seconds.Note: It should be greater than start.The difference between the end time and the start time must not exceed 10s
- Must be
>=0.
number
required
When video input is provided, the model determines the output duration automatically and
duration does not take effect.Allowed values: 4, 6, 8, 10.Note: The duration parameter only takes effect when there is no video input. If video_list is provided, the output duration is determined by the model and duration is ignored.string
default:"16:9"
The aspect ratio of the generated video.Supported values:
16:9 and 9:16. Default: 16:9string
Specify the resolution of the generated video.Supported values:
360p720p1080p4k
720pnumber
The seed can be used to reproduce results.
- Minimum:
0 - Maximum:
2147483647
Successful Response
number
Response status code.
string
Response message. Contains the error description when the request fails.Example:
successobject
required
The task data object containing task id.
string
required
The unique identifier for this task.Example:
task_123456taskId with the unified Get Task Details endpoint to check progress and retrieve results.
Get Task Details
Check task status, monitor generation progress, and retrieve results.
