Create video
post /videos
Create a new video generation job from a prompt and optional reference assets.
Body Parameters
-
prompt: stringText prompt that describes the video to generate.
-
input_reference: optional ImageInputReferenceParamOptional reference object that guides generation. Provide exactly one of
image_urlorfile_id.-
file_id: optional string -
image_url: optional stringA fully qualified URL or base64-encoded data URL.
-
-
model: optional VideoModelThe video generation model to use (allowed values: sora-2, sora-2-pro). Defaults to
sora-2.-
string -
"sora-2" or "sora-2-pro" or "sora-2-2025-10-06" or 2 more-
"sora-2" -
"sora-2-pro" -
"sora-2-2025-10-06" -
"sora-2-pro-2025-10-06" -
"sora-2-2025-12-08"
-
-
-
seconds: optional VideoSecondsClip duration in seconds (allowed values: 4, 8, 12). Defaults to 4 seconds.
-
"4" -
"8" -
"12"
-
-
size: optional VideoSizeOutput resolution formatted as width x height (allowed values: 720x1280, 1280x720, 1024x1792, 1792x1024). Defaults to 720x1280.
-
"720x1280" -
"1280x720" -
"1024x1792" -
"1792x1024"
-
Returns
-
Video object { id, completed_at, created_at, 10 more }Structured information describing a generated video job.
-
id: stringUnique identifier for the video job.
-
completed_at: numberUnix timestamp (seconds) for when the job completed, if finished.
-
created_at: numberUnix timestamp (seconds) for when the job was created.
-
error: VideoCreateErrorError payload that explains why generation failed, if applicable.
-
code: stringA machine-readable error code that was returned.
-
message: stringA human-readable description of the error that was returned.
-
-
expires_at: numberUnix timestamp (seconds) for when the downloadable assets expire, if set.
-
model: VideoModelThe video generation model that produced the job.
-
string -
"sora-2" or "sora-2-pro" or "sora-2-2025-10-06" or 2 more-
"sora-2" -
"sora-2-pro" -
"sora-2-2025-10-06" -
"sora-2-pro-2025-10-06" -
"sora-2-2025-12-08"
-
-
-
object: "video"The object type, which is always
video."video"
-
progress: numberApproximate completion percentage for the generation task.
-
prompt: stringThe prompt that was used to generate the video.
-
remixed_from_video_id: stringIdentifier of the source video if this video is a remix.
-
seconds: stringDuration of the generated clip in seconds. For extensions, this is the stitched total duration.
-
size: VideoSizeThe resolution of the generated video.
-
"720x1280" -
"1280x720" -
"1024x1792" -
"1792x1024"
-
-
status: "queued" or "in_progress" or "completed" or "failed"Current lifecycle status of the video job.
-
"queued" -
"in_progress" -
"completed" -
"failed"
-
-
Example
curl https://api.openai.com/v1/videos \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"prompt": "x"
}'
Response
{
"id": "id",
"completed_at": 0,
"created_at": 0,
"error": {
"code": "code",
"message": "message"
},
"expires_at": 0,
"model": "sora-2",
"object": "video",
"progress": 0,
"prompt": "prompt",
"remixed_from_video_id": "remixed_from_video_id",
"seconds": "seconds",
"size": "720x1280",
"status": "queued"
}
Example
curl https://api.openai.com/v1/videos \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F "model=sora-2" \
-F "prompt=A calico cat playing a piano on stage"
Response
{
"id": "video_123",
"object": "video",
"model": "sora-2",
"status": "queued",
"progress": 0,
"created_at": 1712697600,
"size": "1024x1792",
"seconds": "8",
"quality": "standard"
}