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.

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.mp4Which 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
- One image to Gemini Omni on Sume: reference or first frame?
A single reference image on Sume's Omni row is reference-to-video, not a pinned first frame. Use image_url for a first frame, or frame_images on /v1/videos.
- Omni video_url or reference_video_urls: edit a clip or borrow from it?
On Sume, video_url edits your clip and keeps its framing. reference_video_urls only conditions a new clip. How the two differ in limits, fields and billing.
- Generated client for Sume schedule runs: handle the undeclared 503
The Sume run-a-schedule route declares 200, 202, 400, 401, 403, 404, 409, 413, 429 and 500 in OpenAPI, but can also return 503. Handle it in generated clients.
- Genkit createMcpHost: connect the hosted Sume MCP server
Genkit's createMcpHost takes a url and requestInit headers for remote servers. Wire https://mcp.sume.com/mcp into ai.generate and close the host after.
Written by Sume