OpenAI Videos API

The Videos API from OpenAI — 8 operation(s) for videos.

Operations 10

POST /videos Create a new video generation job from a prompt and optional reference assets. #
GET /videos List recently generated videos for the current project. #
POST /videos/characters Create a character from an uploaded video. #
GET /videos/characters/{character_id} Fetch a character. #
POST /videos/edits Create a new video generation job by editing a source video or existing generated video. #
POST /videos/extensions Create an extension of a completed video. #
GET /videos/{video_id} Fetch the latest metadata for a generated video. #
DELETE /videos/{video_id} Permanently delete a completed or failed video and its stored assets. #
GET /videos/{video_id}/content Download the generated video bytes or a derived preview asset. Streams the rendered video content for the specified video job. #
POST /videos/{video_id}/remix Create a remix of a completed video using a refreshed prompt. #

Documentation

📖
Documentation
https://platform.openai.com/docs/assistants/overview
📖
Documentation
https://platform.openai.com/docs/api-reference/assistants
📖
Documentation
https://platform.openai.com/docs/guides/text-to-speech
📖
Documentation
https://platform.openai.com/docs/api-reference/audio
📖
Documentation
https://platform.openai.com/docs/guides/speech-to-text
📖
Documentation
https://developers.openai.com/api/docs/guides/audio/
📖
Documentation
https://developers.openai.com/api/docs/guides/voice-agents/
📖
Documentation
https://platform.openai.com/docs/api-reference/chat
📖
Documentation
https://platform.openai.com/docs/guides/embeddings
📖
Documentation
https://platform.openai.com/docs/api-reference/embeddings
📖
Documentation
https://platform.openai.com/docs/api-reference/files
📖
Documentation
https://platform.openai.com/docs/guides/fine-tuning
📖
Documentation
https://platform.openai.com/docs/api-reference/fine-tuning
📖
Documentation
https://platform.openai.com/docs/guides/images
📖
Documentation
https://platform.openai.com/docs/api-reference/images
📖
Documentation
https://platform.openai.com/docs/guides/image-generation
📖
Documentation
https://platform.openai.com/docs/guides/images-vision
📖
Documentation
https://platform.openai.com/docs/models
📖
Documentation
https://platform.openai.com/docs/api-reference/models
📖
Documentation
https://platform.openai.com/docs/assistants/how-it-works/managing-threads-and-messages
📖
Documentation
https://platform.openai.com/docs/api-reference/threads
📖
Documentation
https://platform.openai.com/docs/api-reference/completions

Specifications

Schemas & Data

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/openai-videos-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

openai-videos-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: OpenAI Videos API
  description: The OpenAI REST API. Please see https://platform.openai.com/docs/api-reference for more details.
  version: 2.3.0
  termsOfService: https://openai.com/policies/terms-of-use
  contact:
    name: OpenAI Support
    url: https://help.openai.com/
  license:
    name: MIT
    url: https://github.com/openai/openai-openapi/blob/master/LICENSE
servers:
- url: https://api.openai.com/v1
security:
- ApiKeyAuth: []
tags:
- name: Videos
paths:
  /videos:
    post:
      tags:
      - Videos
      summary: Create a new video generation job from a prompt and optional reference assets.
      operationId: createVideo
      parameters: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateVideoMultipartBody'
          application/json:
            schema:
              $ref: '#/components/schemas/CreateVideoJsonBody'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoResource'
      x-oaiMeta:
        name: Create video
        group: videos
        path: create
        examples:
          request:
            curl: "curl https://api.openai.com/v1/videos \\\n  -H \"Authorization: Bearer $OPENAI_API_KEY\" \\\n  -F \"model=sora-2\" \\\n  -F \"prompt=A calico cat playing a piano on stage\"\n"
            javascript: 'import OpenAI from ''openai'';


              const openai = new OpenAI();


              const video = await openai.videos.create({ prompt: ''A calico cat playing a piano on stage'' });


              console.log(video.id);

              '
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nvideo = client.videos.create(\n    prompt=\"x\",\n)\nprint(video.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tvideo, err := client.Videos.New(context.TODO(), openai.VideoNewParams{\n\t\tPrompt: \"x\",\n\t})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", video.ID)\n}\n"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              video = openai.videos.create(prompt: "x")


              puts(video)'
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.videos.Video;\nimport com.openai.models.videos.VideoCreateParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        VideoCreateParams params = VideoCreateParams.builder()\n            .prompt(\"x\")\n            .build();\n        Video video = client.videos().create(params);\n    }\n}"
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst video = await client.videos.create({ prompt: 'x' });\n\nconsole.log(video.id);"
          response: "{\n  \"id\": \"video_123\",\n  \"object\": \"video\",\n  \"model\": \"sora-2\",\n  \"status\": \"queued\",\n  \"progress\": 0,\n  \"created_at\": 1712697600,\n  \"size\": \"1024x1792\",\n  \"seconds\": \"8\",\n  \"quality\": \"standard\"\n}\n"
    get:
      tags:
      - Videos
      summary: List recently generated videos for the current project.
      operationId: ListVideos
      parameters:
      - name: limit
        in: query
        description: Number of items to retrieve
        required: false
        schema:
          type: integer
          minimum: 0
          maximum: 100
      - name: order
        in: query
        description: Sort order of results by timestamp. Use `asc` for ascending order or `desc` for descending order.
        required: false
        schema:
          $ref: '#/components/schemas/OrderEnum'
      - name: after
        in: query
        description: Identifier for the last item from the previous pagination request
        required: false
        schema:
          description: Identifier for the last item from the previous pagination request
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoListResource'
      x-oaiMeta:
        name: List videos
        group: videos
        path: list for the organization.
        examples:
          request:
            curl: "curl https://api.openai.com/v1/videos \\\n  -H \"Authorization: Bearer $OPENAI_API_KEY\"\n"
            javascript: "import OpenAI from 'openai';\n\nconst openai = new OpenAI();\n\n// Automatically fetches more pages as needed.\nfor await (const video of openai.videos.list()) {\n  console.log(video.id);\n}\n"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\npage = client.videos.list()\npage = page.data[0]\nprint(page.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tpage, err := client.Videos.List(context.TODO(), openai.VideoListParams{})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", page)\n}\n"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              page = openai.videos.list


              puts(page)'
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.videos.VideoListPage;\nimport com.openai.models.videos.VideoListParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        VideoListPage page = client.videos().list();\n    }\n}"
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\n// Automatically fetches more pages as needed.\nfor await (const video of client.videos.list()) {\n  console.log(video.id);\n}"
          response: "{\n  \"data\": [\n    {\n      \"id\": \"video_123\",\n      \"object\": \"video\",\n      \"model\": \"sora-2\",\n      \"status\": \"completed\"\n    }\n  ],\n  \"object\": \"list\"\n}\n"
  /videos/characters:
    post:
      tags:
      - Videos
      summary: Create a character from an uploaded video.
      operationId: CreateVideoCharacter
      parameters: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateVideoCharacterBody'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoCharacterResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import fs from 'fs';\nimport OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.videos.createCharacter({\n  name: 'x',\n  video: fs.createReadStream('path/to/file'),\n});\n\nconsole.log(response.id);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nresponse = client.videos.create_character(\n    name=\"x\",\n    video=b\"Example data\",\n)\nprint(response.id)"
            go: "package main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tresponse, err := client.Videos.NewCharacter(context.TODO(), openai.VideoNewCharacterParams{\n\t\tName:  \"x\",\n\t\tVideo: io.Reader(bytes.NewBuffer([]byte(\"Example data\"))),\n\t})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", response.ID)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.videos.VideoCreateCharacterParams;\nimport com.openai.models.videos.VideoCreateCharacterResponse;\nimport java.io.ByteArrayInputStream;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        VideoCreateCharacterParams params = VideoCreateCharacterParams.builder()\n            .name(\"x\")\n            .video(new ByteArrayInputStream(\"Example data\".getBytes()))\n            .build();\n        VideoCreateCharacterResponse response = client.videos().createCharacter(params);\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              response = openai.videos.create_character(name: "x", video: StringIO.new("Example data"))


              puts(response)'
  /videos/characters/{character_id}:
    get:
      tags:
      - Videos
      summary: Fetch a character.
      operationId: GetVideoCharacter
      parameters:
      - name: character_id
        in: path
        description: The identifier of the character to retrieve.
        required: true
        schema:
          example: char_123
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoCharacterResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.videos.getCharacter('char_123');\n\nconsole.log(response.id);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nresponse = client.videos.get_character(\n    \"char_123\",\n)\nprint(response.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tresponse, err := client.Videos.GetCharacter(context.TODO(), \"char_123\")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", response.ID)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.videos.VideoGetCharacterParams;\nimport com.openai.models.videos.VideoGetCharacterResponse;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        VideoGetCharacterResponse response = client.videos().getCharacter(\"char_123\");\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              response = openai.videos.get_character("char_123")


              puts(response)'
  /videos/edits:
    post:
      tags:
      - Videos
      summary: Create a new video generation job by editing a source video or existing generated video.
      operationId: CreateVideoEdit
      parameters: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateVideoEditMultipartBody'
          application/json:
            schema:
              $ref: '#/components/schemas/CreateVideoEditJsonBody'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst video = await client.videos.edit({ prompt: 'x', video: fs.createReadStream('path/to/file') });\n\nconsole.log(video.id);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nvideo = client.videos.edit(\n    prompt=\"x\",\n    video=b\"Example data\",\n)\nprint(video.id)"
            go: "package main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tvideo, err := client.Videos.Edit(context.TODO(), openai.VideoEditParams{\n\t\tPrompt: \"x\",\n\t\tVideo: openai.VideoEditParamsVideoUnion{\n\t\t\tOfFile: io.Reader(bytes.NewBuffer([]byte(\"Example data\"))),\n\t\t},\n\t})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", video.ID)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.videos.Video;\nimport com.openai.models.videos.VideoEditParams;\nimport java.io.ByteArrayInputStream;\nimport java.io.InputStream;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        VideoEditParams params = VideoEditParams.builder()\n            .prompt(\"x\")\n            .video(new ByteArrayInputStream(\"Example data\".getBytes()))\n            .build();\n        Video video = client.videos().edit(params);\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              video = openai.videos.edit(prompt: "x", video: StringIO.new("Example data"))


              puts(video)'
  /videos/extensions:
    post:
      tags:
      - Videos
      summary: Create an extension of a completed video.
      operationId: CreateVideoExtend
      parameters: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateVideoExtendMultipartBody'
          application/json:
            schema:
              $ref: '#/components/schemas/CreateVideoExtendJsonBody'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoResource'
      x-oaiMeta:
        examples:
          response: ''
          request:
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst video = await client.videos.extend({\n  prompt: 'x',\n  seconds: '4',\n  video: fs.createReadStream('path/to/file'),\n});\n\nconsole.log(video.id);"
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nvideo = client.videos.extend(\n    prompt=\"x\",\n    seconds=\"4\",\n    video=b\"Example data\",\n)\nprint(video.id)"
            go: "package main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tvideo, err := client.Videos.Extend(context.TODO(), openai.VideoExtendParams{\n\t\tPrompt:  \"x\",\n\t\tSeconds: openai.VideoSeconds4,\n\t\tVideo: openai.VideoExtendParamsVideoUnion{\n\t\t\tOfFile: io.Reader(bytes.NewBuffer([]byte(\"Example data\"))),\n\t\t},\n\t})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", video.ID)\n}\n"
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.videos.Video;\nimport com.openai.models.videos.VideoExtendParams;\nimport com.openai.models.videos.VideoSeconds;\nimport java.io.ByteArrayInputStream;\nimport java.io.InputStream;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        VideoExtendParams params = VideoExtendParams.builder()\n            .prompt(\"x\")\n            .seconds(VideoSeconds._4)\n            .video(new ByteArrayInputStream(\"Example data\".getBytes()))\n            .build();\n        Video video = client.videos().extend(params);\n    }\n}"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              video = openai.videos.extend_(prompt: "x", seconds: :"4", video: StringIO.new("Example data"))


              puts(video)'
  /videos/{video_id}:
    get:
      tags:
      - Videos
      summary: Fetch the latest metadata for a generated video.
      operationId: GetVideo
      parameters:
      - name: video_id
        in: path
        description: The identifier of the video to retrieve.
        required: true
        schema:
          example: video_123
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoResource'
      x-oaiMeta:
        name: Retrieve video
        group: videos
        path: retrieve matching the provided identifier.
        examples:
          response: ''
          request:
            javascript: 'import OpenAI from ''openai'';


              const client = new OpenAI();


              const video = await client.videos.retrieve(''video_123'');


              console.log(video.id);

              '
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nvideo = client.videos.retrieve(\n    \"video_123\",\n)\nprint(video.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tvideo, err := client.Videos.Get(context.TODO(), \"video_123\")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", video.ID)\n}\n"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              video = openai.videos.retrieve("video_123")


              puts(video)'
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.videos.Video;\nimport com.openai.models.videos.VideoRetrieveParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        Video video = client.videos().retrieve(\"video_123\");\n    }\n}"
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst video = await client.videos.retrieve('video_123');\n\nconsole.log(video.id);"
    delete:
      tags:
      - Videos
      summary: Permanently delete a completed or failed video and its stored assets.
      operationId: DeleteVideo
      parameters:
      - name: video_id
        in: path
        description: The identifier of the video to delete.
        required: true
        schema:
          example: video_123
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeletedVideoResource'
      x-oaiMeta:
        name: Delete video
        group: videos
        path: delete
        examples:
          response: ''
          request:
            javascript: 'import OpenAI from ''openai'';


              const client = new OpenAI();


              const video = await client.videos.delete(''video_123'');


              console.log(video.id);

              '
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nvideo = client.videos.delete(\n    \"video_123\",\n)\nprint(video.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tvideo, err := client.Videos.Delete(context.TODO(), \"video_123\")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", video.ID)\n}\n"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              video = openai.videos.delete("video_123")


              puts(video)'
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.videos.VideoDeleteParams;\nimport com.openai.models.videos.VideoDeleteResponse;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        VideoDeleteResponse video = client.videos().delete(\"video_123\");\n    }\n}"
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst video = await client.videos.delete('video_123');\n\nconsole.log(video.id);"
  /videos/{video_id}/content:
    get:
      tags:
      - Videos
      summary: 'Download the generated video bytes or a derived preview asset.


        Streams the rendered video content for the specified video job.'
      operationId: RetrieveVideoContent
      parameters:
      - name: video_id
        in: path
        description: The identifier of the video whose media to download.
        required: true
        schema:
          example: video_123
          type: string
      - name: variant
        in: query
        description: Which downloadable asset to return. Defaults to the MP4 video.
        required: false
        schema:
          $ref: '#/components/schemas/VideoContentVariant'
      responses:
        '200':
          description: The video bytes or preview asset that matches the requested variant.
          content:
            video/mp4:
              schema:
                type: string
                format: binary
            image/webp:
              schema:
                type: string
                format: binary
            application/json:
              schema:
                type: string
      x-oaiMeta:
        name: Retrieve video content
        group: videos
        path: content
        examples:
          response: ''
          request:
            javascript: 'import OpenAI from ''openai'';


              const client = new OpenAI();


              const response = await client.videos.downloadContent(''video_123'');


              console.log(response);


              const content = await response.blob();

              console.log(content);

              '
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nresponse = client.videos.download_content(\n    video_id=\"video_123\",\n)\nprint(response)\ncontent = response.read()\nprint(content)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tresponse, err := client.Videos.DownloadContent(\n\t\tcontext.TODO(),\n\t\t\"video_123\",\n\t\topenai.VideoDownloadContentParams{},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", response)\n}\n"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              response = openai.videos.download_content("video_123")


              puts(response)'
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.core.http.HttpResponse;\nimport com.openai.models.videos.VideoDownloadContentParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        HttpResponse response = client.videos().downloadContent(\"video_123\");\n    }\n}"
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.videos.downloadContent('video_123');\n\nconsole.log(response);\n\nconst content = await response.blob();\nconsole.log(content);"
  /videos/{video_id}/remix:
    post:
      tags:
      - Videos
      summary: Create a remix of a completed video using a refreshed prompt.
      operationId: CreateVideoRemix
      parameters:
      - name: video_id
        in: path
        description: The identifier of the completed video to remix.
        required: true
        schema:
          example: video_123
          type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateVideoRemixBody'
          application/json:
            schema:
              $ref: '#/components/schemas/CreateVideoRemixBody'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoResource'
      x-oaiMeta:
        name: Remix video
        group: videos
        path: remix using the provided prompt.
        examples:
          request:
            curl: "curl -X POST https://api.openai.com/v1/videos/video_123/remix \\\n  -H \"Authorization: Bearer $OPENAI_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"prompt\": \"Extend the scene with the cat taking a bow to the cheering audience\"\n  }'\n"
            javascript: 'import OpenAI from ''openai'';


              const client = new OpenAI();


              const video = await client.videos.remix(''video_123'', { prompt: ''Extend the scene with the cat taking a bow to the cheering audience'' });


              console.log(video.id);

              '
            python: "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ.get(\"OPENAI_API_KEY\"),  # This is the default and can be omitted\n)\nvideo = client.videos.remix(\n    video_id=\"video_123\",\n    prompt=\"x\",\n)\nprint(video.id)"
            go: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/openai/openai-go\"\n\t\"github.com/openai/openai-go/option\"\n)\n\nfunc main() {\n\tclient := openai.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tvideo, err := client.Videos.Remix(\n\t\tcontext.TODO(),\n\t\t\"video_123\",\n\t\topenai.VideoRemixParams{\n\t\t\tPrompt: \"x\",\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", video.ID)\n}\n"
            ruby: 'require "openai"


              openai = OpenAI::Client.new(api_key: "My API Key")


              video = openai.videos.remix("video_123", prompt: "x")


              puts(video)'
            java: "package com.openai.example;\n\nimport com.openai.client.OpenAIClient;\nimport com.openai.client.okhttp.OpenAIOkHttpClient;\nimport com.openai.models.videos.Video;\nimport com.openai.models.videos.VideoRemixParams;\n\npublic final class Main {\n    private Main() {}\n\n    public static void main(String[] args) {\n        OpenAIClient client = OpenAIOkHttpClient.fromEnv();\n\n        VideoRemixParams params = VideoRemixParams.builder()\n            .videoId(\"video_123\")\n            .prompt(\"x\")\n            .build();\n        Video video = client.videos().remix(params);\n    }\n}"
            node.js: "import OpenAI from 'openai';\n\nconst client = new OpenAI({\n  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted\n});\n\nconst video = await client.videos.remix('video_123', { prompt: 'x' });\n\nconsole.log(video.id);"
          response: "{\n  \"id\": \"video_456\",\n  \"object\": \"video\",\n  \"model\": \"sora-2\",\n  \"status\": \"queued\",\n  \"progress\": 0,\n  \"created_at\": 1712698600,\n  \"size\": \"720x1280\",\n  \"seconds\": \"8\",\n  \"remixed_from_video_id\": \"video_123\"\n}\n"
components:
  schemas:
    VideoCharacterResource:
      properties:
        id:
          anyOf:
          - type: string
            description: Identifier for the character creation cameo.
          - type: 'null'
        name:
          anyOf:
          - type: string
            description: Display name for the character.
          - type: 'null'
        created_at:
          type: integer
          format: unixtime
          description: Unix timestamp (in seconds) when the character was created.
      type: object
      required:
      - id
      - name
      - created_at
    DeletedVideoResource:
      properties:
        object:
          type: string
          enum:
          - video.deleted
          description: The object type that signals the deletion response.
          default: video.deleted
          x-stainless-const: true
        deleted:
          type: boolean
          description: Indicates that the video resource was deleted.
        id:
          type: string
          description: Identifier of the deleted video.
      type: object
      required:
      - object
      - deleted
      - id
      title: Deleted video response
      description: Confirmation payload returned after deleting a video.
    CreateVideoExtendJsonBody:
      properties:
        video:
          $ref: '#/components/schemas/VideoReferenceInputParam'
          description: Reference to the completed video to extend.
        prompt:
          type: string
          maxLength: 32000
          minLength: 1
          description: Updated text prompt that directs the extension generation.
        seconds:
          $ref: '#/components/schemas/VideoSeconds'
          description: 'Length of the newly generated extension segment in seconds (allowed values: 4, 8, 12, 16, 20).'
      type: object
      required:
      - video
      - prompt
      - seconds
      title: Create video extension JSON request
      description: JSON parameters for extending an existing generated video.
    CreateVideoRemixBody:
      properties:
        prompt:
          type: string
          maxLength: 32000
          minLength: 1
          description: Updated text prompt that directs the remix generation.
      type: object
      required:
      - prompt
      title: Create video remix request
      description: Parameters for remixing an existing generated video.
    CreateVideoEditMultipartBody:
      properties:
        video:
          oneOf:
          - type: string
            forma

# --- truncated at 32 KB (62 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/openai/refs/heads/main/openapi/openai-videos-api-openapi.yml