Skip to main content
Use one of the public Veo model IDs with POST https://api.creatok.ai/v1/videos/generation. Every variant currently generates an 8-second video. Veo does not accept reference videos, reference audio, or adaptive editing. All variants support generated audio; use generateAudio to disable it.

Choose a variant

Veo 3.1

Veo 3.1 Exp

All variants accept 9:16 and 16:9, defaulting to 9:16. They default to 720p. The server rejects unsupported resolutions, durations, and orientations for the selected model.

Before you start

Create an organization API key and fund your API wallet. For reference images or frames, complete the signed upload flow first. Replace each example file_... value with the returned file_id. You can also use the returned upload_fields.key.
These examples use the CreatOK request format. Put generation parameters inside input. Do not send public URLs or base64 image data. The veo-3.1-fast variant accepts JPEG or PNG input images.

Text to video

Reference images

Only veo-3.1, veo-3.1-fast, and veo-3.1-fast-exp accept reference images. Upload up to three images. Do not combine reference images with first/end frames. veo-3.1-lite-exp and veo-3.1-exp do not accept referenceImageKeys.

First and last frames

All variants accept a first frame and an optional end frame. Upload both images first. An end frame requires a first frame. Do not combine frame inputs with referenceImageKeys.

Common parameters

Unknown fields return 400 invalid_parameter. See Errors for error handling.

Pricing

Veo pricing depends on the selected variant, output resolution, and—on veo-3.1 and veo-3.1-fast—whether you generate audio. Exp variants currently use the same rate with either audio setting. Check current rates on the pricing page. Set max_cost_usd in your request to reject a quote above your spending limit.

Read the result

HTTP 202 returns a job directly. Read its id and status; a submission can already have status: "failed". While the job is queued or running, wait for Retry-After seconds before polling GET /jobs/{jobId}. On success, download the result from output.files. Signed output URLs expire after about one hour; outputs are removed 48 hours after completion. Reuse the same Idempotency-Key and exact request body after a timeout. See Idempotency for retry behavior.