01
Create an API key
Open Dashboard > API Keys and prepare a server-side key. Browser clients should call your backend, not expose the key directly.
Preview documentation
This developer guide shows the planned request flow for Veo 4 API: create a video task, poll task status, receive webhooks, and budget credits before the public launch.
Integration flow
Use this flow when preparing backend integration. Keep the key server-side, submit jobs asynchronously, then store result URLs after completion.
01
Open Dashboard > API Keys and prepare a server-side key. Browser clients should call your backend, not expose the key directly.
02
Send a text-to-video or image-to-video request with a prompt, optional image_urls, aspect ratio, seed, watermark, and visibility settings.
03
Poll the task endpoint with task_id until the job reaches succeeded or failed. Webhooks can reduce polling for production systems.
04
When the task succeeds, copy video_url and thumbnail_url into your CMS, editor, automation pipeline, or user project record.
Preview contract
The examples below are intentionally concrete so teams can design clients now. Treat them as a draft contract until launch is announced.
Use HTTPS from your server. Final launch may introduce a versioned domain or additional regional endpoints.
https://veo4api.net/api/video/veo4Every request uses a Bearer token. Keep API keys in server secrets, never in public frontend bundles.
Authorization: Bearer YOUR_API_KEYhttps://veo4api.net/api/video/veo4/generateSubject to changeCreate a new asynchronous Veo 4 video task. The response returns task_id immediately while rendering continues in the background.
| Field | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Natural language instruction for the generated clip. Include subject, camera motion, style, and constraints. |
image_urls | string[] | No | Publicly reachable source images for image-to-video jobs. The current proxy accepts image_urls and compatible image URL aliases. |
aspect_ratio | string | No | Planned values include 16:9, 9:16, and 1:1. |
extend_task_id | string | No | Optional task_id of an existing completed video when requesting an extension workflow. |
seeds | number | No | Optional numeric seed for more repeatable outputs. Current accepted range is 10000 to 99999. |
watermark | string | No | Optional watermark label passed through to the video generation backend. |
enableTranslation | boolean | No | Optional boolean that controls prompt translation before generation. Defaults to true. |
public | boolean | No | Optional boolean that marks whether the result may appear in public showcase surfaces. |
curl -X POST "https://veo4api.net/api/video/veo4/generate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A cinematic dolly shot of a glass greenhouse during sunrise",
"aspect_ratio": "16:9",
"watermark": "veo4api",
"enableTranslation": true
}'const response = await fetch("https://veo4api.net/api/video/veo4/generate", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
prompt: "Animate this product photo into a smooth studio orbit shot",
image_urls: ["https://cdn.example.com/input/product.png"],
aspect_ratio: "1:1",
seeds: 12345,
public: false
})
});
const data = await response.json();
console.log(data.task_id);{
"task_id": "veo4_task_01j9example",
"status": "queued",
"model": "veo-4",
"credits_estimated": 180,
"created_at": "2026-05-17T08:00:00Z"
}{
"task_id": "veo4_task_01j9example",
"status": "succeeded",
"progress": 100,
"video_url": "https://cdn.veo4api.net/results/veo4_task_01j9example.mp4",
"thumbnail_url": "https://cdn.veo4api.net/results/veo4_task_01j9example.jpg",
"completed_at": "2026-05-17T08:03:42Z"
}
// Poll the task with:
// GET https://veo4api.net/api/video/veo4/status?task_id={task_id}Async delivery
Webhook delivery is planned for the public API contract. Until it is enabled, poll the status endpoint and keep your backend ready for a future webhook_url field.
Webhook signing details are not final. Plan to verify a future signature header, store task_id, and ignore duplicate events safely.
{
"event": "video.succeeded",
"task_id": "veo4_task_01j9example",
"status": "succeeded",
"model": "veo-4",
"video_url": "https://cdn.veo4api.net/results/veo4_task_01j9example.mp4",
"credits_charged": 180,
"created_at": "2026-05-17T08:00:00Z",
"completed_at": "2026-05-17T08:03:42Z"
}Reliability
Build clients around explicit task states and retryable failures. Generation is asynchronous, so a 200 response only means the task was accepted.
| State | Meaning |
|---|---|
queued | The request was accepted and is waiting for capacity. |
processing | The model is rendering or post-processing the video. |
succeeded | The video is ready and result URLs are available. |
failed | Generation failed. Show the error message and allow the user to revise the prompt or retry. |
canceled | The task was canceled before completion. |
| Code | Recommended handling |
|---|---|
400 | Validate prompt length, image_urls, aspect_ratio, seeds, and public visibility before retrying. |
401 | The API key is missing, expired, or invalid. Ask the user to create a new key. |
402 | Insufficient credits. Send the user to billing or downgrade quality before retrying. |
409 | Conflicting task request. Fetch the existing task when the platform returns a conflict instead of creating another one. |
429 | Rate limited. Apply exponential backoff and avoid aggressive polling. |
500 | Temporary platform or model error. Retry later and keep the original task record. |
Credit planning
Current pricing labels use these planning numbers for Veo 4 capacity. They are not final billing commitments until launch.
Standard video job
180
Estimated credits per standard Veo 4 video generation.
HD video job
240
Estimated credits per HD Veo 4 video generation.
Use these figures for capacity planning only. Actual public API limits, quality tiers, and billing behavior may be adjusted.