AI video

Generate footage from a prompt, animate an image, or make a photo speak, then place the clip in a template or generate it at render time.

Published

Orshot generates short video clips with AI and treats them like any other video layer: they live in your Brand Library, render inside your templates, and can be regenerated per render from the API, from workflows and from AI agents.

What you give decides what you get. There is no mode to pick.

You sendYou get
promptFootage from text
prompt + imageRefThe image animated
imageRef + lastImageRefA transition between the two frames
imageRef + script (or audio)The person in the photo speaking

Every media value can be an https URL, a base64 data URI, a brand asset reference like brand:image:123, or a gen:// reference to a clip Orshot generated earlier.

Credits#

AI video is billed in AI credits, the same credits used for AI images and the design agent. Clips are billed per second, on delivery only. Failed generations and cached clips cost nothing.

OutputAI credits
HD footage or speech (up to 768p)3 per second
Full HD (1080p)6 per second
2K12 per second
AI image2
Voiceover or ambient audio, per started 10 s1 (premium voices 2)

A 5 second HD clip is 15 credits. Ask before you spend with POST /v1/ai/video/estimate, which takes the same body and returns the credits without generating.

Generate a clip#

Shell
curl -X POST https://api.orshot.com/v1/ai/video \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "a ceramic coffee cup on a wooden table by a window, morning light",
    "duration": 5,
    "preset": "product-hero",
    "look": "clean-studio",
    "aspect": "9:16"
  }'

The response is a job. Poll it until finished is true:

Shell
curl https://api.orshot.com/v1/studio/render-jobs/<JOB_ID> \
  -H "Authorization: Bearer <YOUR_API_KEY>"
JSON
{
  "id": 89,
  "status": "succeeded",
  "finished": true,
  "result": {
    "data": {
      "url": "https://storage.orshot.com/generated/video/0472d0….mp4",
      "thumbnailUrl": "https://storage.orshot.com/generated/video/0472d0….jpg",
      "ref": "gen://0472d0…",
      "seconds": 5.2,
      "width": 768,
      "height": 1344,
      "creditsUsed": 15,
      "cached": false,
      "videoId": 151
    }
  }
}

Pass "sync": true to wait for the result in the same request (up to 120 seconds; a clip still generating after that comes back as 202 with the job to poll, never as a lost generation), or webhook_url to be called when the job settles. Every generated clip is added to your Brand Library and listed in AI Usage Logs.

Request fields#

FieldTypeNotes
promptstringWhat to generate. Optional when you only animate an image or make it speak.
imageRefmediaReference image: the first frame to animate, or the portrait for speech. image is accepted as an alias.
lastImageRefmediaReference image for the last frame of a transition.
imagesarrayLong form: [{ "url": "...", "role": "first" | "last" | "product" | "style" | "reference" }].
referencesarrayExtra style or product images.
scriptstringText the person should say. Runs through text to speech first, 1 AI credit per 10 seconds.
voicestringVoice id from GET /v1/audio/voices.
audiomediaYour own audio instead of a script.
consentbooleanRequired for speech. You confirm you may use this person's likeness.
durationnumberAny whole number of seconds, 3 to 15, capped by your plan (5 on Free, 10 on Launch and Grow, 15 on Scale). Default 5. Speech follows the audio length.
presetstringRole preset id, see below. Default cinematic-scene.
lookstringLook preset id, see below.
fullHdboolean1080p output at 2x credits.
aspectstring1:1, 16:9, 9:16, 4:3, 3:4.
freshbooleanSkip the cache and generate a new take.
syncbooleanWait for the result instead of returning a job.
webhook_urlstringCalled with the job when it finishes.

Generate at render time#

Any video element with a parameter id accepts the same inputs as dotted keys on a render. The clip is generated, cached, and rendered into the template in one call. Renders that generate video run as async jobs.

JSON
{
  "templateId": 18917,
  "modifications": {
    "hero_clip.prompt": "the heart-shaped cloud erupts upward with a bright flash",
    "hero_clip.imageRef": "https://…/love-bomb.jpeg",
    "hero_clip.preset": "cinematic-scene",
    "hero_clip.look": "archival-bw",
    "hero_clip.duration": 5,
    "page2@bg.prompt": "soft gradient waves in brand colours",
    "page2@bg.preset": "background-loop"
  },
  "response": { "format": "mp4", "mode": "async" }
}

Supported keys on a video element: .prompt, .imageRef, .lastImageRef, .images, .references, .audio, .script, .voice, .consent, .preset, .look, .duration, .fullHd.

To reuse a clip you already generated, pass its reference or URL as the element value instead. No credits are spent:

JSON
{ "modifications": { "hero_clip": "gen://0472d0…" } }

Identical inputs return the cached clip for free, so a template rendered a hundred times with the same footage prompt generates once.

Presets#

Presets keep prompts short and results consistent. A role says what the clip does inside a page and locks duration, motion and where text can go. A look is a visual style. Both are optional and both are listed, with preview clips, at GET /v1/ai/presets.

Roles: background-loop, product-hero, b-roll, hook, transition, ambient-texture, portrait-speak, ugc-selfie-talk, ugc-product-demo, unboxing, cinematic-scene.

Looks include archival-bw, cinematic, clean-studio, macro, aerial, anime, claymation, paper-cutout, neon, minimal-3d, watercolour, retro-vhs, documentary-archival, storybook, 3d-animated, cartoon, comic-manga, pixel-art, sketch, pop-art, cyberpunk, noir, vintage-70s, horror, epic, ugc-selfie, product-commercial, food-macro, real-estate, travel-drone, sports-action, tech-gradient, news-broadcast, music-visualiser, fashion-editorial, toy-bricks, hyper-bright.

UGC and speech#

To make a photo talk, send a clear portrait, a script or audio, and consent: true:

JSON
{
  "imageRef": "brand:image:34523",
  "script": "Three reasons this launch matters, and why you should care today.",
  "voice": "XrExE9yKIg1WjnnlVkGX",
  "consent": true,
  "preset": "ugc-selfie-talk"
}

Speech clips take one to two minutes. The script runs through text to speech first, which costs 1 AI credit per 10 seconds on top of the clip. Speech is available on paid plans.

Limits and errors#

CodeMeaning
ai-media-no-inputNothing usable was sent. Give a prompt, an image, or a photo plus a script.
ai-credits-insufficientNot enough AI credits. Top up or upgrade.
ai-daily-capThe workspace's daily AI generation cap is reached (429). Resets at midnight UTC; do not retry until then.
ai-video-not-on-planAI video is not included in the plan.
ai-speech-consent-requiredSpeech needs consent: true.
ai-speech-not-on-planSpeech needs a paid plan.
ai-speech-too-longThe script or audio runs past the plan's speech cap (plan.ai_credits.video.max_speech_seconds). Nothing was charged.
ai-unknown-preset, ai-unknown-look, ai-invalid-aspectAn id that is not in GET /v1/ai/presets, or an aspect outside 1:1, 16:9, 9:16, 4:3, 3:4.
ai-prompt-too-long, ai-script-too-longOver 2,000 characters.
invalid-media-ref, invalid-data-uri, input-too-large, asset-not-foundA media value that is not an https URL, an image/audio/video data URI under 25 MB, a brand asset in this workspace, or a gen:// reference.
ai-media-rejectedThe provider refused the inputs, for example a photo with no face. Nothing was charged.
ai-media-provider-downAll providers failed. Nothing was charged. Retry later.
ai-video-unavailableNo generation provider is configured on this server.
ai-media-busyThe same clip is already being generated; wait for it instead of resending.
too-many-active-jobsThe workspace has too many queued or running jobs; wait for some to finish.
generation-timeoutThe job ran past 30 minutes and was closed. Retry; contact support with the job id if it repeats.

Clip length is capped per plan (10 seconds on Launch, 15 on Scale), and speech at 30 to 90 seconds. Twenty generation requests per minute per key.

Was this page helpful?

Ready to automate?

Start rendering images, PDFs and videos from your templates in under 2 minutes. Free plan, no credit card.

Get your API key
  • Image, PDF and video generation via API
  • Visual editor with AI and smart layouts
  • Zapier, Make, MCP and 50+ integrations
  • White-label embed for your own app
  • 30 free credits — no credit card required