Skip to content

Create video

videos.create(VideoCreateParams**kwargs) -> Video
POST/videos

Create a video

ParametersExpand Collapse
prompt: str

Text prompt that describes the video to generate.

maxLength32000
minLength1
input_reference: Optional[FileTypes]

Optional image reference that guides generation.

model: Optional[VideoModelParam]

The video generation model to use (allowed values: sora-2, sora-2-pro). Defaults to sora-2.

Accepts one of the following:
str
Literal["sora-2", "sora-2-pro", "sora-2-2025-10-06", 2 more]
Accepts one of the following:
"sora-2"
"sora-2-pro"
"sora-2-2025-10-06"
"sora-2-pro-2025-10-06"
"sora-2-2025-12-08"
seconds: Optional[VideoSeconds]

Clip duration in seconds (allowed values: 4, 8, 12). Defaults to 4 seconds.

Accepts one of the following:
"4"
"8"
"12"
size: Optional[VideoSize]

Output resolution formatted as width x height (allowed values: 720x1280, 1280x720, 1024x1792, 1792x1024). Defaults to 720x1280.

Accepts one of the following:
"720x1280"
"1280x720"
"1024x1792"
"1792x1024"
ReturnsExpand Collapse
class Video: …

Structured information describing a generated video job.

id: str

Unique identifier for the video job.

completed_at: Optional[int]

Unix timestamp (seconds) for when the job completed, if finished.

created_at: int

Unix timestamp (seconds) for when the job was created.

error: Optional[VideoCreateError]

Error payload that explains why generation failed, if applicable.

code: str

A machine-readable error code that was returned.

message: str

A human-readable description of the error that was returned.

expires_at: Optional[int]

Unix timestamp (seconds) for when the downloadable assets expire, if set.

model: VideoModel

The video generation model that produced the job.

Accepts one of the following:
str
Literal["sora-2", "sora-2-pro", "sora-2-2025-10-06", 2 more]
Accepts one of the following:
"sora-2"
"sora-2-pro"
"sora-2-2025-10-06"
"sora-2-pro-2025-10-06"
"sora-2-2025-12-08"
object: Literal["video"]

The object type, which is always video.

progress: int

Approximate completion percentage for the generation task.

prompt: Optional[str]

The prompt that was used to generate the video.

remixed_from_video_id: Optional[str]

Identifier of the source video if this video is a remix.

seconds: VideoSeconds

Duration of the generated clip in seconds.

Accepts one of the following:
"4"
"8"
"12"
size: VideoSize

The resolution of the generated video.

Accepts one of the following:
"720x1280"
"1280x720"
"1024x1792"
"1792x1024"
status: Literal["queued", "in_progress", "completed", "failed"]

Current lifecycle status of the video job.

Accepts one of the following:
"queued"
"in_progress"
"completed"
"failed"

Create video

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("OPENAI_API_KEY"),  # This is the default and can be omitted
)
video = client.videos.create(
    prompt="x",
)
print(video.id)
{
  "id": "id",
  "completed_at": 0,
  "created_at": 0,
  "error": {
    "code": "code",
    "message": "message"
  },
  "expires_at": 0,
  "model": "string",
  "object": "video",
  "progress": 0,
  "prompt": "prompt",
  "remixed_from_video_id": "remixed_from_video_id",
  "seconds": "4",
  "size": "720x1280",
  "status": "queued"
}
Returns Examples
{
  "id": "id",
  "completed_at": 0,
  "created_at": 0,
  "error": {
    "code": "code",
    "message": "message"
  },
  "expires_at": 0,
  "model": "string",
  "object": "video",
  "progress": 0,
  "prompt": "prompt",
  "remixed_from_video_id": "remixed_from_video_id",
  "seconds": "4",
  "size": "720x1280",
  "status": "queued"
}