VidLabDocsDashboard
ReferenceMarkdown

Model list

Every model, its options and its prices, as JSON. GET /v1/models needs no key. The price you see is the price you pay: VidLab picks the route, you never pay more than the listed price.

curl -s "https://vidlab.ai/v1/models?kind=video"
QueryValuesWhat it does
kindvideo, image, audio, lipsync, upscaleOnly models of that kind.
makerA maker's name, any caseOnly that maker's models, for example maker=Google.
searchWordsOnly models whose id, name, maker or description has every word. q works the same.

The answer is { "object": "list", "data": [ ...models ] }. GET /v1/models/{id} returns one model as { "data": model }, or 404 model_not_found. The list is public data: answers may be cached for up to 60 seconds.

The model object

json
{
  "id": "seedance-2.5",
  "name": "Seedance 2.5",
  "maker": "ByteDance",
  "kind": "video",
  "unit": "per_second",
  "description": "Generates video from text, an image, references",
  "prices": {
    "480p": 0.088,
    "720p": 0.21,
    "1080p": 0.52
  },
  "params": {
    "resolution": { "values": ["480p", "720p", "1080p"] },
    "prompt": { "required": true },
    "images": { "max": 16 },
    "negative_prompt": {},
    "seed": {},
    "duration": { "min": 4, "max": 30 },
    "aspect_ratio": { "values": ["16:9", "9:16", "1:1"] }
  },
  "featured": true,
  "save_pct": 34,
  "routes": 2,
  "status": "operational"
}
FieldTypeWhat it is
idstringThe id you send as model.
name, makerstringDisplay name and the company that made the model.
kindstringvideo, image, audio, lipsync or upscale.
unitstringWhat one unit of the price is (see Units).
descriptionstringOptional. A one-line summary.
pricesobjectUSD per unit for each priced option (see Variants).
paramsobjectThe input fields this model takes (see The params object).
mediaobjectOptional. Example still and video paths.
featuredbooleanShown first on the models page.
save_pctnumberOptional. How much cheaper we are, in percent, at the setting the price starts from (our cheapest one), rounded down.
offerobjectOptional. The price a model card leads with: variant (our cheapest plain option), price_usd, market_usd (the usual price for the same unit, shown struck through) and pct (the saving, rounded down). Only models we are cheaper on have one.
duration_must_coverarrayOptional. For models whose length comes from an input file: which files (video, audio) duration must cover.
routesnumberHow many routes can run this model right now.
statusstringoperational, degraded or down.

Units

UnitOne unit isCounted from
per_secondone second of outputduration
per_imageone imagen (default 1)
per_jobone callalways 1
per_1k_charseach started 1,000 characterstext (or prompt)
per_minuteeach started minuteduration in seconds

The price of a call is the variant's price times the units. A 5 second clip at 720p on a model priced 0.21 per second costs 1.05. The wallet moves whole cents, so a price is rounded up to the next cent: the quote, the reservation and the charge are all that same number.

Variants

A model's prices are keyed by variant. A variant is the resolution or quality, then flags joined with +:

  • +audio when the call asks for sound (generate_audio: true),
  • +video_input when the call sends a reference video,
  • * when the model has one price for everything.

VidLab picks the variant from your input: the exact key first, then the key with fewer flags, then the bare resolution or quality, then *. Options you leave out get the model's first allowed value, so the quote and the run always agree. If no priced variant matches, the call answers 400 variant_unavailable with the priced options in the message.

The params object

params lists every input field the model accepts. A field that is not listed is refused, never ignored. Each entry has up to three keys:

KeyMeaning
requiredThe field must be sent.
valuesThe only allowed values. Matching ignores letter case.
min, maxNumber limits. For images, the most images; for n, how many images per call; for duration, seconds.
  • {} means the field is accepted with no limit beyond Input fields.
  • A list of lengths ("duration": { "values": [4, 6, 8] }) means only those lengths run.
  • params only lists what the model can really do: an option that no route can carry is not listed. A reference video or generate_audio is listed only while its price (+video_input, +audio) is.

Model status

GET /v1/status lists every model with its status and routes count. No key needed.

json
{ "object": "list", "data": [{ "model": "seedance-2.5", "status": "operational", "routes": 2 }] }

A model that is down can still be called: the generation is accepted and fails with model_busy if no route can take it, at no charge.

UGC Real 1

ugc-real-1 is VidLab's own image model, made for realistic phone-shot UGC people: the kind of picture a creator would take on a phone. It costs one flat price per image, shown on its model page next to real examples of what it makes.

It takes words only. Send prompt (up to 2,000 characters) and, if you want another shape, aspect_ratio (9:16 by default). Short prompts are fine: the model writes your words out into a detailed photo description before it draws. A call makes one image. It takes no pictures, no n, no resolution and no seed: a field it does not list is refused with 400 invalid_input before anything is held.

curl -s -X POST https://vidlab.ai/v1/generations \
  -H "Authorization: Bearer $VIDLAB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"model":"ugc-real-1","input":{"prompt":"a woman in her kitchen, talking to the camera"}}'

Poll the generation as for any other model. A finished call has one picture in outputs, and a failed or blocked one is not charged.