Gemini Omni Flash on /v1/videos: input_references and 9:16 in one call

Call gemini-omni-flash-1.1 through Sume's /v1/videos wire: input_references, 9:16, 720p, poll polling_url, download unsigned_urls. Fields and traps.

5 min readSume
All posts

Sume serves Gemini Omni Flash 1.1 on its OpenRouter-compatible POST /v1/videos route as model: "gemini-omni-flash-1.1". Send a prompt, input_references for style or content images, aspect_ratio: "9:16" and resolution: "720p", then poll the returned polling_url until completed and download unsigned_urls[0].

What does the request look like?

The Video generation page says this route follows the OpenRouter Video Generation API field for field, with a short list of Sume differences. Model ids are bare catalog ids, with no provider prefix. The catalog entry for Omni lists 3 to 10 second durations, 360p, 720p, 1080p and 4K, 16:9 and 9:16, and image and video input_references with no audio.

input_references give the model visual guidance rather than exact frames. Send images as image_url objects. If you also send frame_images, the docs say frame_images takes precedence and the request becomes image-to-video, so send one or the other.

curl -X POST https://api.sume.com/v1/videos \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: omni-videos-001" \
  -d '{
    "model": "gemini-omni-flash-1.1",
    "prompt": "A vertical product clip: the bottle turns slowly on a marble counter, soft window light",
    "duration": 6,
    "resolution": "720p",
    "aspect_ratio": "9:16",
    "input_references": [
      { "type": "image_url", "image_url": { "url": "https://example.com/bottle.png" } }
    ]
  }'

How do I poll and download?

The submit response is a 202 with id, polling_url, status and model. Statuses are pending, in_progress, completed, failed and cancelled. When it is completed, unsigned_urls holds the content URLs, and GET /v1/videos/{jobId}/content?index=0 with your key downloads the file.

The docs suggest polling every 30 seconds. The same job also shows at GET /v1/jobs/{id}/status and GET /v1/jobs/{id}/result, as described in Jobs and results.

curl -s "https://api.sume.com/v1/videos/$JOB_ID" \
  -H "Authorization: Bearer $SUME_API_KEY"

curl "https://api.sume.com/v1/videos/$JOB_ID/content?index=0" \
  -H "Authorization: Bearer $SUME_API_KEY" \
  --output omni.mp4

Which fields return a 400?

The Sume differences table lists three. size returns 400 unsupported_parameter because every v1 model reports supported_sizes: null; use resolution plus aspect_ratio. A non-empty provider.options returns 400 unsupported_parameter, since no model allows passthrough in v1. And seed is rejected because no v1 model accepts it.

Omni itself adds more rules in the Video Router doc: generate_audio: false is rejected because native audio is always on, and there is no bitrate_mode and no audio reference. Google's Omni page also lists temperature, top_p, stop sequences and negative prompts as unsupported, so none of them are worth sending.

Where does editing live?

This route sends text, image and video references. The docs say Omni's video edit mode is exposed through the Video Router video_url field, so a source-clip edit goes to POST /v1/video-router/generate, covered in the Video Router page. Both routes create the same jobs and share model ids, and billing is provider list times 1.25 per output second by resolution on either.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume