API reference · ByteDance

bytedance/omnihuman/1.5

Integrate this model through SandBase's unified API, with production-ready schemas and examples.

VIDEOAsyncOpen model
Production endpoint

Send your first request

OpenAI-compatible endpoint with unified authentication and usage tracking.

POSThttps://api.sandbase.ai/v1/run
Model IDbytedance/omnihuman/1.5
01

Input Schema

6 parameters · 3 required · 3 optional

ParameterTypeRequiredDescription
audiostringRequiredThe URL of the audio file to generate the video. Audio must be under 30s long for 1080p generation and under 60s long for 720p generation.
imagestringRequiredThe URL of the image used to generate the video
promptstringRequiredThe text prompt used to guide the video generation.
maskstringOptionalThe URL of the mask image to apply to the image. Only the person in the white area of the mask will speak.
resolutionstringOptionalThe resolution of the generated video. Defaults to 1080p. 720p generation is faster and higher in quality. 1080p generation is limited to 30s audio and 720p generation is limited to 60s audio. · Options: 720p, 1080p · Default: "720p"
720p1080p
turbo_modebooleanOptionalGenerate a video at a faster rate with a slight quality trade-off. · Default: false
02

Output Schema

FieldTypeDescription
idstringUnique identifier for the generation task
statusstringTask status: pending, running, completed, failed, timeout
modelstringModel used for the generation
outputsarrayArray of output items
outputs[].urlstringURL of the generated artifact
outputs[].content_typestringMIME type (e.g. image/png, video/mp4)
errorobject | nullError details if failed, null on success
error.typestringMachine-readable error type code
error.messagestringHuman-readable error description

Async Workflow

This model uses asynchronous execution. Submit a request and poll for the result.

  1. Submit — POST to /v1/run, receive an id
  2. Poll — GET /v1/run/{id} until status is completed, failed, or timeout
  3. Retrieve — Read outputs from the completed response
03

Code Examples

Ready-to-run snippets

const apiKey = process.env.SANDBASE_API_KEY;
const response = await fetch("https://api.sandbase.ai/v1/run", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "model": "bytedance/omnihuman/1.5",
    "audio": "https://static.sandbase.ai/examples/bytedance/omnihuman/1.5/input_audio_0.mp3",
    "image": "https://static.sandbase.ai/examples/bytedance/omnihuman/1.5/input_image_1.png",
    "resolution": "720p",
    "turbo_mode": false
  }),
});

if (!response.ok) throw new Error(await response.text());
let result = await response.json();
for (let attempt = 0; attempt < 120 && !["completed", "failed", "timeout"].includes(result.status); attempt++) {
  await new Promise((resolve) => setTimeout(resolve, 2_000));
  const poll = await fetch(`https://api.sandbase.ai/v1/run/${result.id}`, {
    headers: { Authorization: `Bearer ${apiKey}` },
  });
  if (!poll.ok) throw new Error(await poll.text());
  result = await poll.json();
}
if (result.status !== "completed") throw new Error(`Generation ended: ${result.status}`);
console.log(result);