Gemini Omni 1.1 Flash
Generate a 3–10 second video with sound at 720p, 1080p or 4K from text, a first frame, first and last frames, or up to 10 reference images and 3 reference videos.
- Asynchronous: the create call returns a task ID; the video arrives when the task succeeds.
- Four inputs under one model ID: text only, one first frame, a first and a last frame in
images, or up to 10reference_imageswith up to 3 optionalreference_videos. Frames and references cannot be combined. - Clips of 3 to 10 seconds in
16:9or9:16;durationis a whole number of seconds. - Every video comes with a soundtrack. There is no switch to turn it off, and reference audio is not accepted.
- Billed by the resolution and the number of seconds you request. A failed task costs nothing.
Opens this model in the API Explorer. Enter your BeatAPI API key to create a task: the call is real and is billed to your own balance.
Endpoint and authentication
POST https://api.beatapi.io/v1/videos/tasks
Authorization
string
Required
Your BeatAPI API key, sent as Bearer <BEATAPI_API_KEY>. Create keys in the Dashboard. Keep keys on your server; never ship them in a browser or mobile app.
Send the body as JSON with Content-Type: application/json. Idempotency-Key is optional: send a unique value (at most 255 characters) per logical request and reuse it only to retry that exact body. Within 24 hours a retry with the same key and body returns the first response again with Idempotent-Replayed: true; the same key with a different body returns 409 idempotency_conflict. Responses other than 2xx are not stored, so a retry after a 400 or 402 runs again.
How a request works
Create the task
POST the parameters below to the endpoint. A 201 means the task was accepted and its price reserved from your balance; the work runs in the background. Save data.id.
Wait for it to finish
Call GET /v1/tasks/{task_id} and wait data.poll_after_seconds between calls (5 s for images, 8 s for videos) until status is succeeded or failed. Or register a webhook for task.succeeded and task.failed; keep polling as the fallback, because a task stopped by the processing timeout sends no event.
Save the result
On succeeded, download every data.output.media[].url and store the files you need; BeatAPI does not promise how long result URLs stay available. On failed, read data.error_code and data.error_message: the reserved amount was returned to your balance, and data.retryable says whether sending the same request again can succeed.
Input modes
Request parameters
model
string
Required
The model to run.
Value: gemini-omni-1.1-flash
If the value is wrong
- Missing:
"model" is required - An image model sent to this endpoint:
"model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint
prompt
string
Required
What happens in the video: the action, the camera, the setting, and any speech or sound you want.
Length: 1–5000 characters
- Length is counted in characters (a CJK character counts as one).
- With references, say in the prompt what to take from each one, for example “the woman in the first reference image” or “the camera move of the reference video”.
If the value is wrong
- Missing:
"prompt" is required - Empty or longer than the limit:
"prompt" has an unsupported length - Not a string:
"prompt" must be a string
images
string[]
Optional
Frames: one link is the first frame, two links are the first and the last frame, in that order. Optional: leave it out for text to video or when you send references.
Items: 1–2
Each item is a public https:// URL. For a local file, upload it first with POST /v1/files and pass the returned data.url.
- Each link must be a public
https://URL. - For pictures the video should draw on rather than start or end with, use
reference_images.
If the value is wrong
- More than 2 links:
"images" accepts at most 2 items - Empty array:
"images" requires at least 1 item - Not an array:
"images" must be an array - Not an https:// link:
"images[0]" must be a public HTTPS URL - Sent together with
reference_imagesorreference_videos:Cannot combine "images" with reference inputs in one task
reference_images
string[]
Optional
One to ten pictures of people, products, styles or settings that the video should use.
Items: 1–10
Each item is a public https:// URL. For a local file, upload it first with POST /v1/files and pass the returned data.url.
- Each link must be a public
https://URL. - Required whenever you send
reference_videos.
If the value is wrong
- More than 10 links:
"reference_images" accepts at most 10 items - Empty array:
"reference_images" requires at least 1 item - Not an array:
"reference_images" must be an array - Sent together with
images:Cannot combine "images" with reference inputs in one task
reference_videos
string[]
Optional
One to three video clips whose motion, camera work or subject the new video should follow.
Items: 1–3
Each item is a public https:// URL. For a local file, upload it first with POST /v1/files and pass the returned data.url.
- Each link must be a public
https://URL to an MP4, MOV or WebM file. - Only together with at least one link in
reference_images. - The reference videos do not change the price: you pay for the seconds of the new video.
If the value is wrong
- Sent without
reference_images:Gemini Omni 1.1 Flash "reference_videos" need at least one image in "reference_images" - More than 3 links:
"reference_videos" accepts at most 3 items - Sent together with
images:Cannot combine "images" with reference inputs in one task
duration
integer
OptionalDefault: 5
Length of the video in seconds, a whole number.
Default: 5
Range: 3–10
- If you leave it out,
5is used and billed. - Seconds are billed (see Billing), so this is the main lever on the price.
If the value is wrong
- Outside 3–10, not a whole number, or sent as a string:
"duration" is outside its supported range
aspect_ratio
string
OptionalDefault: 16:9
Shape of the video: landscape 16:9 or portrait 9:16.
Allowed values: 16:9, 9:16
Default: 16:9
- If you leave it out,
16:9is used. - It applies to frames too: choose the shape of your first frame.
If the value is wrong
- A value not in the list:
"aspect_ratio" must be one of: [16:9 9:16]
resolution
string
OptionalDefault: 720p
Output resolution. Each step up costs more per second.
Allowed values: 720p, 1080p, 4k
Default: 720p
- If you leave it out,
720pis used. 4kand4Kare the same tier.
If the value is wrong
- A value not in the list (for example
480por720P):"resolution" must be one of: [720p 1080p 4k 4K]
The gateway also checks these combinations before creating the task:
- images cannot be combined with reference inputs
- images are frames: one is the first frame, two the first and last frame in that order
- reference_videos need at least one image in reference_images
- there is no audio switch; reference audio is not supported
Input media limits
The gateway reads every input before the task is created and refuses one outside these limits with a 400 bad_request that names the input. Nothing is charged.
- The gateway checks the size of each linked file before it creates the task. A file over the limit is refused with a 400 that names it, for example
images[0] is 25.0 MB; this model takes images up to 20 MB., and nothing is charged. - A link whose host answers with a 4xx error, or that points to an empty file, is refused the same way:
<field>[<n>] could not be downloaded: <reason>. - A link the model cannot use after the task was created fails the task, usually with
bad_request, and the task is refunded in full. - Have a local file? Upload it with
POST /v1/filesand pass the returneddata.url.
Fields this model does not accept
Sending one of these is refused before anything is charged, instead of being ignored:
reference_audios,generate_audio,seed,quality,sound,task_type,output_format,watermarkand the other fields of other video models →field "generate_audio" is not supported by model gemini-omni-1.1-flash(with the field you sent). The soundtrack is always generated; there is nothing to switch.- Any field the video endpoint does not know at all →
unknown field: <name>.
Request examples
Text to video
A 5-second 720p landscape clip from text alone.
First frame
A 5-second 720p clip that starts from one image.
First and last frames
An 8-second 1080p clip that moves from the first picture to the second.
Reference images and a reference video
Two reference images and one reference video, as an 8-second 720p portrait clip.
Responses
Create a task (201)
The task object. output is null until the task succeeds. Fields marked “while running” disappear once the task finishes.
Finished task
GET /v1/tasks/{task_id} returns HTTP 200 with status: "succeeded" and the result in data.output.
Output fields
Failed task
A failed task is still HTTP 200 on GET /v1/tasks/{task_id}: the failure is in the body. The reservation is returned in full, so nothing is charged.
Complete example
Create a task, wait for it with the server’s polling hint, and print the result URLs. Set BEATAPI_API_KEY in your environment and install requests.
Billing
- The price follows the resolution and the number of seconds you request (
duration, 5 if you leave it out). 1080p costs more per second than 720p, and 4K more than 1080p. The input route,aspect_ratioand the number of frames or references do not change it. - The table below shows 8-second clips; other lengths are priced per second at the same rate for their resolution.
- The price is reserved when the task is created;
data.usage.billable_duration_secondsshows the seconds it is based on. - A failed task, including one refused by moderation after submission, is refunded in full.
Current list prices, the same as on Pricing. An account with a negotiated discount pays less; data.usage on the task always shows the amount actually charged.
Common errors
HTTP errors at a glance
Errors before a task exists arrive as a non-2xx response, and nothing is charged. Branch on error.code or error.retryable; message names the problem. The full list and retry policy are on Errors.
Authentication
Send your API key as Authorization: Bearer <BEATAPI_API_KEY>.
Headers
Send the body as JSON with Content-Type: application/json. Idempotency-Key is optional: send a unique value (at most 255 characters) per logical request and reuse it only to retry that exact body. Within 24 hours a retry with the same key and body returns the first response again with Idempotent-Replayed: true; the same key with a different body returns 409 idempotency_conflict. Responses other than 2xx are not stored, so a retry after a 400 or 402 runs again.
Request
The model to run.
Value: gemini-omni-1.1-flash
If the value is wrong
- Missing:
"model" is required - An image model sent to this endpoint:
"model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint
What happens in the video: the action, the camera, the setting, and any speech or sound you want.
Length: 1–5000 characters
- Length is counted in characters (a CJK character counts as one).
- With references, say in the prompt what to take from each one, for example “the woman in the first reference image” or “the camera move of the reference video”.
If the value is wrong
- Missing:
"prompt" is required - Empty or longer than the limit:
"prompt" has an unsupported length - Not a string:
"prompt" must be a string
Shape of the video: landscape 16:9 or portrait 9:16.
Allowed values: 16:9, 9:16
Default: 16:9
- If you leave it out,
16:9is used. - It applies to frames too: choose the shape of your first frame.
If the value is wrong
- A value not in the list:
"aspect_ratio" must be one of: [16:9 9:16]
Length of the video in seconds, a whole number.
Default: 5
Range: 3–10
- If you leave it out,
5is used and billed. - Seconds are billed (see Billing), so this is the main lever on the price.
If the value is wrong
- Outside 3–10, not a whole number, or sent as a string:
"duration" is outside its supported range
Frames: one link is the first frame, two links are the first and the last frame, in that order. Optional: leave it out for text to video or when you send references.
Items: 1–2
Each item is a public https:// URL. For a local file, upload it first with POST /v1/files and pass the returned data.url.
- Each link must be a public
https://URL. - For pictures the video should draw on rather than start or end with, use
reference_images.
If the value is wrong
- More than 2 links:
"images" accepts at most 2 items - Empty array:
"images" requires at least 1 item - Not an array:
"images" must be an array - Not an https:// link:
"images[0]" must be a public HTTPS URL - Sent together with
reference_imagesorreference_videos:Cannot combine "images" with reference inputs in one task
One to ten pictures of people, products, styles or settings that the video should use.
Items: 1–10
Each item is a public https:// URL. For a local file, upload it first with POST /v1/files and pass the returned data.url.
- Each link must be a public
https://URL. - Required whenever you send
reference_videos.
If the value is wrong
- More than 10 links:
"reference_images" accepts at most 10 items - Empty array:
"reference_images" requires at least 1 item - Not an array:
"reference_images" must be an array - Sent together with
images:Cannot combine "images" with reference inputs in one task
One to three video clips whose motion, camera work or subject the new video should follow.
Items: 1–3
Each item is a public https:// URL. For a local file, upload it first with POST /v1/files and pass the returned data.url.
- Each link must be a public
https://URL to an MP4, MOV or WebM file. - Only together with at least one link in
reference_images. - The reference videos do not change the price: you pay for the seconds of the new video.
If the value is wrong
- Sent without
reference_images:Gemini Omni 1.1 Flash "reference_videos" need at least one image in "reference_images" - More than 3 links:
"reference_videos" accepts at most 3 items - Sent together with
images:Cannot combine "images" with reference inputs in one task
Output resolution. Each step up costs more per second.
Allowed values: 720p, 1080p, 4k
Default: 720p
- If you leave it out,
720pis used. 4kand4Kare the same tier.
If the value is wrong
- A value not in the list (for example
480por720P):"resolution" must be one of: [720p 1080p 4k 4K]
Response
The task object. output is null until the task succeeds. Fields marked “while running” disappear once the task finishes.

