Skip to main content
Every run names one model doing one operation. Use the models endpoints to find the models your organization can run and the exact request each one accepts. To compare model families and what each is good at, see Models.

Model IDs

A model ID has three segments, {vendor}/{model}/{operation}, such as openai/gpt-image-2/generate or kling/o3-pro/reference-to-video:
  • Vendor is the company that makes the model, not the provider that ZeroGen routes it through, so a change of provider doesn’t change the ID.
  • Model names the model.
  • Operation names what the model does. A model that does several things has one ID for each.
The operation is one of the following: generate, edit, inpaint, remix, outpaint, text-to-vector, text-to-video, image-to-video, first-last-frame-to-video, keyframes-to-video, reference-to-video, audio-to-video, video-to-video, reference-video-to-video, extend-video, motion-control, lip-sync, clean-plate, render-to-real, hdr, or text-to-speech. An ID stays the same across a vendor’s builds while its request schema stays the same. Each run reports the build that ran as modelVersion, or null when the provider doesn’t name one. A price change keeps the ID. An ID changes only when the request schema changes or the vendor ships a materially different model, and ZeroGen never reuses an ID for another model.

List models

GET /v1/models lists the models your organization can run. It needs the models:read scope.
The list takes the following optional filters, plus limit and cursor as described in Pagination:

Read the request schema

GET /v1/models/{vendor}/{model}/{operation} returns one model with requestSchema: the JSON Schema (draft 2020-12) that a POST /v1/runs body for this model must match. It needs the models:read scope. The schema covers the whole request body, including projectId, folderId and naming, which work the same for every model.
The schema reflects your organization: it leaves out optional controls that your organization’s billing doesn’t price. It adds the following extensions to JSON Schema:

The run request

Every model shares one request shape. The model’s request schema states which fields and values it accepts, and ZeroGen rejects unknown fields. A speech model takes prompt and voice, and no inputs or output. Input roles are source, reference, face-reference, start-frame, end-frame, keyframe, and mask. Send face-reference for an image or video that shows a real person, on models whose schema lists that role. A keyframe pins its image to timeSeconds: seconds from the start of the video, on a whole frame at the role’s frameRate, and at most output.durationSeconds. Each keyframe needs timeSeconds, and no other role takes it. The role’s limit in x-roles counts start frames, end frames, and keyframes together.

Quote a run

POST /v1/runs/quote takes the same body as a create and runs the same validation and pricing at your organization’s rates. It starts nothing and holds nothing. It needs the runs:create scope.
quotedMicroUsd is the amount that a create with the same body would hold. A quote imports its URL inputs into your Library, as a create does.

Warnings and drafts

Each output in a run can carry two more fields:
  • warnings lists what the provider ignored, such as an unused reference. Each warning has a code and a message. Outputs without warnings leave it out.
  • draft appears on a succeeded 480p draft output. Models that make drafts, such as Seedance 2.5, list a parameter titled 480p Draft in their request schema. draft.upscalable says whether the draft can be upscaled now, and draft.expiresAt is when upscaling closes. draft.upscale and draft.finalAssetId report an upscale started in ZeroGen.
You can upscale a draft only in ZeroGen, not through the API. For details, see Draft, then upscale.

Deprecated models

ZeroGen marks a model deprecated before retiring it. A deprecated model keeps working until its sunsetAt time. After that, requests that name it fail with 400 model_unavailable. A model that anyone used in the 90 days before its retirement is deprecated at least 90 days ahead. Responses that name a deprecated model carry two headers: ZeroGen sends them on the model’s detail, and on creating, reading, quoting, or cancelling a run with that model:
To migrate, list models with the same operation, read the replacement’s request schema, and update your requests before the sunset.