Create a Veo video task
curl --request POST \
--url https://gengen.farm/v1/contents/generations/tasks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "veo-3.1-lite-generate-001",
"prompt": "A cinematic ocean sunrise with gentle surf sounds."
}
'import requests
url = "https://gengen.farm/v1/contents/generations/tasks"
payload = {
"model": "veo-3.1-lite-generate-001",
"prompt": "A cinematic ocean sunrise with gentle surf sounds."
}
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: 'veo-3.1-lite-generate-001',
prompt: 'A cinematic ocean sunrise with gentle surf sounds.'
})
};
fetch('https://gengen.farm/v1/contents/generations/tasks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "veo31:12345678-1234-4234-8234-123456789abc",
"model": "veo-3.1-lite-generate-001",
"status": "queued",
"outputs": {
"videos": [],
"images": []
},
"createdAt": "2026-10-09T09:58:00.000Z",
"updatedAt": "2026-10-09T09:58:00.000Z"
}Video API
Generate videos with Veo
Generate and extend videos with Google Veo 3.1, Fast and Lite.
POST
/
contents
/
generations
/
tasks
Create a Veo video task
curl --request POST \
--url https://gengen.farm/v1/contents/generations/tasks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "veo-3.1-lite-generate-001",
"prompt": "A cinematic ocean sunrise with gentle surf sounds."
}
'import requests
url = "https://gengen.farm/v1/contents/generations/tasks"
payload = {
"model": "veo-3.1-lite-generate-001",
"prompt": "A cinematic ocean sunrise with gentle surf sounds."
}
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: 'veo-3.1-lite-generate-001',
prompt: 'A cinematic ocean sunrise with gentle surf sounds.'
})
};
fetch('https://gengen.farm/v1/contents/generations/tasks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "veo31:12345678-1234-4234-8234-123456789abc",
"model": "veo-3.1-lite-generate-001",
"status": "queued",
"outputs": {
"videos": [],
"images": []
},
"createdAt": "2026-10-09T09:58:00.000Z",
"updatedAt": "2026-10-09T09:58:00.000Z"
}Use
Omitting
Extension adds exactly seven seconds.
A nonempty prompt is required (up to 10,000 characters). Use English prompts. Unsupported controls are rejected instead of silently ignored.
Advanced settings go under
Statuses are
veo-3.1-generate-001, veo-3.1-fast-generate-001, or veo-3.1-lite-generate-001 (Preview). All return asynchronous tasks.
Create a task
curl https://gengen.farm/v1/contents/generations/tasks \
-H 'Authorization: Bearer gengen_live_xxxxxxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"model": "veo-3.1-lite-generate-001",
"mode": "text_to_video",
"prompt": "A cinematic ocean sunrise with gentle surf sounds.",
"controls": {"duration": 4, "resolution": "720p", "ratio": "16:9", "generateAudio": true, "outputCount": 1}
}'
Query the result
Veo uses the shared video task query endpoint,GET /v1/contents/generations/tasks/{id}. See Retrieve a Veo task for authentication, statuses, and response fields.
Pass the complete id returned by creation, including its veo31: prefix, and use the same API key. No model parameter or request body is needed. Poll until status is succeeded or failed; read successful video links from outputs.videos. Querying does not create another task or charge again.
curl 'https://gengen.farm/v1/contents/generations/tasks/veo31:YOUR_TASK_UUID' \
-H 'Authorization: Bearer gengen_live_xxxxxxxxxxxxxxxx'
GET /v1/contents/generations/tasks lists owned tasks. Cancellation, deletion, callbacks and streaming are not supported for Veo.
Modes and inputs
| Mode | assets | Models |
|---|---|---|
text_to_video | Omit | All three |
image_first_frame | firstFrameImage | All three |
image_first_last_frame | firstFrameImage and lastFrameImage | All three |
multimodal_reference | referenceImages: 1–3 subject images | Standard and Fast |
video_extend | sourceVideo | All three; API only |
mode infers it from the assets. These input forms cannot be combined. Reference images describe subjects, not a separate style-reference operation. Audio inputs and video editing are not supported.
HTTPS and GCS inputs
You can provide an HTTPS URL or ags://bucket/object URI directly in any media field. Public and signed HTTPS URLs are accepted; local files, data URLs and Base64 input are not accepted by this endpoint.
Direct GCS inputs must meet both requirements:
- The object or directory is authorized for your GENGEN account. Contact support to register the exact object or prefix; another user’s private GENGEN objects are never accepted.
- The object is readable by GENGEN. Contact support to configure read access for an external private bucket, or provide a signed HTTPS URL instead. A
gs://URI alone does not grant access.
{
"model": "veo-3.1-generate-001",
"mode": "image_first_last_frame",
"prompt": "A smooth camera movement between the two frames.",
"assets": {
"firstFrameImage": "gs://your-authorized-bucket/frames/start.png",
"lastFrameImage": "https://example.com/end.png"
},
"controls": {"duration": 8, "resolution": "1080p", "generateAudio": true}
}
Video extension
{
"model": "veo-3.1-generate-001",
"mode": "video_extend",
"prompt": "Continue the camera movement along the coastline.",
"assets": {"sourceVideo": "gs://your-authorized-bucket/veo/source.mp4"},
"controls": {"duration": 7, "resolution": "720p", "ratio": "16:9", "generateAudio": true}
}
controls.duration represents the added duration, not the input video’s duration. The Playground does not expose video extension.
Controls
| Field | Values / default |
|---|---|
duration | 4, 6 or 8 seconds; default 8. Extension: 7 only. Reference images and 1080p/4K generation require 8 seconds. |
resolution | 720p (default), 1080p; Standard also accepts 4k. |
ratio | 16:9 (default), 9:16 |
generateAudio | Boolean; default true |
outputCount | Integer 1–4; default 1 |
seed | Optional integer 0–4294967295 |
providerOptions.google: negativePrompt (string, up to 10,000 characters), enhancePrompt (boolean), personGeneration (allow_adult or disallow), and resizeMode (pad or crop). resizeMode applies to image inputs. These fields are optional.
Outputs, retention and billing
{
"id": "veo31:12345678-1234-4234-8234-123456789abc",
"model": "veo-3.1-generate-001",
"status": "succeeded",
"outputs": {
"videos": ["https://storage.googleapis.com/your-output-bucket/video.mp4?SIGNED_QUERY"],
"images": [],
"expiresAt": "2026-10-16T10:00:00.000Z",
"urlsExpireAt": "2026-10-09T11:00:00.000Z"
},
"createdAt": "2026-10-09T09:58:00.000Z",
"updatedAt": "2026-10-09T10:00:00.000Z"
}
queued, running, succeeded, and failed. Failed tasks may include failureReason. Outputs are HTTPS URLs in outputs.videos, not raw GCS paths or Base64.
Videos remain available for seven days after generation completion. Signed links last at most one hour; retrieving or listing the task renews links while the video is retained. Copy the video to your own storage before outputs.expiresAt. After expiry the task remains successful but outputs.videos is empty.
GENGEN reserves the estimated balance before queueing. Successful tasks charge for the generated seconds and the number of videos actually returned; extension charges for seven added seconds per returned video. Filtered outputs are not included. Failed tasks release the reservation. Polling does not charge again. See customer pricing.
Try the Veo API Explorer.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Available options:
veo-3.1-generate-001, veo-3.1-fast-generate-001, veo-3.1-lite-generate-001 Required string length:
1 - 10000Inferred from assets when omitted. Lite does not support multimodal_reference. Extension is API-only.
Available options:
text_to_video, image_first_frame, image_first_last_frame, multimodal_reference, video_extend Choose first frame, first+last frames, subject references, or extension video; input forms cannot be combined.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Response
Owned asynchronous video task
Example:
"veo31:12345678-1234-4234-8234-123456789abc"
Available options:
veo-3.1-generate-001, veo-3.1-fast-generate-001, veo-3.1-lite-generate-001 Available options:
queued, running, succeeded, failed Show child attributes
Show child attributes