Video Generation

Sume supports video generation from text prompts (and optional reference images) via a dedicated asynchronous API. You can find the supported models, their capabilities, and pricing from GET /v1/videos/models.

This surface follows the OpenRouter Video Generation API field-for-field, so a client written against their docs works here after changing the base URL and the API key. The handful of places Sume differs are collected in Sume differences.

Model Discovery

You can find video generation models in several ways:

Via the Video Models API

Use the dedicated video models endpoint to list all available video generation models along with their supported parameters:

The response returns a data array where each model includes:

FieldDescription
idModel slug to use in generation requests
canonical_slugPermanent model identifier
supported_resolutionsList of supported output resolutions (e.g., 720p, 1080p)
supported_aspect_ratiosList of supported aspect ratios (e.g., 16:9, 9:16)
supported_sizesList of supported pixel dimensions (e.g., 1280x720), or null
supported_durationsSupported video lengths in whole seconds
supported_frame_imagesWhich frame_type values the model accepts
supported_input_referencesWhich input_references types the model accepts
generate_audioWhether the model can generate an audio track
seedWhether the model accepts a seed
pricing_skusPricing information per SKU
allowed_passthrough_parametersProvider-specific parameters that can be passed through via the provider option

Use this endpoint to check which resolutions, aspect ratios, and durations are supported by each model before submitting a generation request. Limits are not uniform: seedance-2.5 accepts 4–30 seconds at 480p/720p/1080p, wan-3.0 accepts 2–30 seconds, and minimax-h3 accepts 5–15 seconds at native 480p/768p (768p is first-class, not 720p; 2K/4K upscales are priced if requested). Every other catalog model tops out at 15 seconds. seedance-2 also offers 1080p. MiniMax H3 Max (minimax-h3-max) is gated until GA and is not listed.

Via the Models API

You can also use the public model catalog to discover video generation models:

On the Models Page

Visit the Models page and look for models that list video as an output modality.

How It Works

Unlike text or image generation, video generation is asynchronous because generating video takes significantly longer. The workflow is:

  1. Submit a generation request to POST /v1/videos
  2. Receive a job ID and polling URL immediately
  3. Poll the polling URL (GET /v1/videos/{jobId}) until the status is completed
  4. Download the video from the content URL (GET /v1/videos/{jobId}/content)

API Usage

Submitting a Video Generation Request

Request Parameters

ParameterTypeRequiredDescription
modelstringYesThe model to use for video generation (e.g., seedance-2.5), or sume/auto to let Sume pick
promptstringYesText description of the video to generate
durationintegerNoDuration of the generated video in seconds
resolutionstringNoResolution of the output video (e.g., 720p, 1080p)
aspect_ratiostringNoAspect ratio of the output video (e.g., 16:9, 9:16, 3:2)
sizestringNoExact pixel dimensions in WIDTHxHEIGHT format (e.g., 1280x720). Interchangeable with resolution + aspect_ratio
frame_imagesarrayNoImages for first/last frames (image-to-video)
input_referencesarrayNoReference images for style guidance (reference-to-video)
generate_audiobooleanNoWhether to generate audio alongside the video. Defaults to the model's audio capability
seedintegerNoSeed for deterministic generation (not guaranteed by all providers)
callback_urlstringNoURL to receive a webhook notification when the job completes. Must be HTTPS
providerobjectNoProvider-specific passthrough configuration

Supported Resolutions

  • 480p
  • 720p
  • 768p
  • 1080p
  • 1K
  • 2K
  • 4K

Each model advertises the subset it accepts in supported_resolutions.

Supported Aspect Ratios

  • 16:9 — Widescreen landscape
  • 9:16 — Vertical/portrait
  • 1:1 — Square
  • 4:3 — Standard landscape
  • 3:4 — Standard portrait
  • 3:2 — Photography landscape
  • 2:3 — Photography portrait
  • 21:9 — Ultra-wide
  • 9:21 — Ultra-tall

Each model advertises the subset it accepts in supported_aspect_ratios.

Using Images

There are two ways to provide images, each triggering a different generation mode:

  • frame_images — Specifies first or last frame images for image-to-video generation. Each entry must include a frame_type of first_frame or last_frame.
  • input_references — Provides style or content reference images for reference-to-video generation. The model uses these as visual guidance rather than exact frames.

If both fields are provided, frame_images takes precedence and the request is treated as image-to-video.

Image-to-Video (frame_images)

Reference-to-Video (input_references)

Only models whose supported_input_references lists a type accept that type. Audio and video references are honored by Seedance 2.0 only.

Provider-Specific Options

You can pass provider-specific options using the provider parameter. Options are keyed by provider slug, and only the options for the matched provider are forwarded:

Use the Video Models API to check which passthrough parameters each model supports via the allowed_passthrough_parameters field. In v1 that list is empty for every model, so provider.options entries are rejected rather than silently dropped — see Sume differences.

Response Format

Submit Response (202 Accepted)

When you submit a video generation request, you receive an immediate response with the job details:

Poll Response

When polling the job status, the response includes additional fields as the job progresses:

Job Statuses

StatusDescription
pendingThe job has been submitted and is queued
in_progressThe video is being generated
completedThe video is ready to download
failedThe generation failed (check the error field)
cancelledThe job was canceled before it finished

Downloading the Video

Once the job status is completed, the unsigned_urls array contains URLs to download the generated video content. You can also use the content endpoint directly:

The index query parameter defaults to 0 and can be used if the model generates multiple video outputs.

Webhooks

Instead of polling for job status, you can receive a webhook notification when a video generation job completes. Pass callback_url in the request body; Sume POSTs to it once the job reaches a terminal state.

Sume signs the raw JSON body and sends x-sume-webhook-timestamp and x-sume-webhook-signature headers. The payload is Sume's standard job webhook envelope, not OpenRouter's video.generation.* envelope — see Sume differences and the webhooks guide for the exact shape and verification steps.

Sume differences

Everything above matches the OpenRouter Video Generation API. These are the only deltas.

AreaOpenRouterSume
Base pathhttps://openrouter.ai/api/v1/videoshttps://api.sume.com/v1/videos (no /api segment)
AuthAuthorization: Bearer $OPENROUTER_API_KEYAuthorization: Bearer $SUME_API_KEY
Model idsorg/slug (e.g. google/veo-3.1)bare catalog ids (e.g. seedance-2). Sume's published contract never carries a provider-org prefix
Auto routingno generate-time automodel: "sume/auto" lets Sume pick the family. Responses echo sume/auto; the family that ran is never disclosed
sizeaccepted where the model advertises supported_sizesevery v1 model reports supported_sizes: null, so size returns 400 unsupported_parameter. Use resolution + aspect_ratio
provider.optionsforwarded to the matched upstream providerv1 runs a single backend per model, so a non-empty provider.options returns 400 unsupported_parameter
seedaccepted by many modelsno v1 model accepts seed; each reports seed: false and rejects the field
Webhook envelopevideo.generation.* events, X-OpenRouter-SignatureSume's standard job webhook envelope with x-sume-webhook-signature
Idempotencynone on this routesend Idempotency-Key to make retries safe; a replay returns the original job
Job lifecyclepolling URL onlythe same job is also visible at GET /v1/jobs/{id}/status and GET /v1/jobs/{id}/result
Zero Data Retentionvideo generation is ZDR-ineligibleSume has no ZDR toggle; see the privacy docs
Billingcreditsworkspace USD balance, reserved on submit at provider list × 1.10. usage.cost is the Sume billable amount

sume/auto

sume/auto is a Sume-only addition. Send it as model when you do not want to pin a family:

Resolution is a pure function of the normalized request and the catalog version, so an idempotent replay prices and routes identically. The poll response reports "model": "sume/auto" — Sume does not disclose which family served the request, and you should not build on any observable trait of the output to infer it.

/v1/video-router/*

POST /v1/video-router/generate and GET /v1/video-router/models still work unchanged and create the same jobs, with the same model ids. The difference is the wire: Video Router returns Sume's { "data": ... } job envelope and takes Sume's flat image_url / reference_image_urls fields, while /v1/videos returns the response shape documented above. Because the model vocabulary is shared, migrating is a path-and-body change with no id remapping. New integrations should use /v1/videos.

Best Practices

  • Detailed Prompts: Provide specific, descriptive prompts for better video quality. Include details about motion, camera angles, lighting, and scene composition
  • Appropriate Resolution: Higher resolutions take longer to generate and cost more. Choose the resolution that fits your use case
  • Polling Interval: Use a reasonable polling interval (e.g., 30 seconds) to avoid excessive API calls. Video generation typically takes 30 seconds to several minutes depending on the model and parameters
  • Error Handling: Always check the job status for failed state and handle the error field appropriately
  • Reference Images: When using reference images, ensure they are high quality and relevant to the desired video output

Troubleshooting

Job stays in pending for a long time?

  • Video generation can take several minutes depending on the model, resolution, and server load
  • Continue polling at regular intervals

Generation failed?

  • Check the error field in the poll response for details
  • Ensure your prompt is appropriate and within model guidelines
  • Check that any reference images are accessible over public HTTPS and in supported formats

Model not found?

  • Use the Video Models API to find available video generation models
  • Verify the model id is correct (e.g., seedance-2) — Sume uses bare catalog ids, not org/slug