> ## Documentation Index
> Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Ein Sora-2-Video erstellen

> Verwende POST /v1/videos, um Sora-2-Videogenerierungsaufgaben aus Text-Prompts oder Referenzbildern zu erstellen, und frage dann den Status per Aufgaben-ID ab, um die Ergebnisse zu erhalten.

Verwende diesen Endpoint, um einen Sora-Render-Job aus Text oder aus Text plus einem Referenzbild zu starten. Die API gibt sofort eine video id zurück und wartet nicht, bis das Rendering abgeschlossen ist.

## Mit dem kleinsten nützlichen Job beginnen

* Verwende `sora-2` für schnellere Iterationen oder `sora-2-pro`, wenn die Ausgabequalität wichtiger ist als die Geschwindigkeit
* Belasse `seconds` für deine erste Anfrage bei `4`
* Beginne mit `size: 1280x720`, es sei denn, du benötigst ausdrücklich eine Hochformat-Ausgabe
* Lade höchstens ein Referenzbild hoch

## Dauer und Größe

| Einstellung             | Unterstützte Werte                                     | Standard-Ausgangspunkt                    | Verhalten an den Grenzen                                   |
| ----------------------- | ------------------------------------------------------ | ----------------------------------------- | ---------------------------------------------------------- |
| `seconds`               | `4`, `8`, `12`, `16`, `20`                             | `4`                                       | Andere Werte sind nicht Teil der Sora-Video-Request-Form.  |
| `size` für `sora-2`     | `1280x720`, `720x1280`                                 | `1280x720`                                | Verwende Querformat oder Hochformat.                       |
| `size` für `sora-2-pro` | `1792x1024`, `1024x1792` plus die Standard-Sora-Größen | `1792x1024` für Pro-Ausgabe im Querformat | Verwende die größeren Pro-Größen nur mit einem Pro-Modell. |

Sora erfordert das Feld `size` in der exakten Form `WxH`. Auflösungstokens wie `720p` und Seitenverhältnisbezeichnungen wie `16:9` sind bei diesem Endpoint keine gültigen Sora-`size`-Werte.

## End-to-End-Ablauf

<Steps>
  <Step title="Den Render-Job erstellen">
    Sende `model`, `prompt`, `seconds` und `size` und speichere dann die zurückgegebene `id`.
  </Step>

  <Step title="Abfragen, bis der Job abgeschlossen ist">
    Rufe [Video abrufen](./retrieve) auf, bis der Status `completed` oder `failed` ist.
  </Step>

  <Step title="Das Ergebnis herunterladen">
    Wenn das Rendering abgeschlossen ist, rufe die Datei mit [Videoinhalt abrufen](./retrieve-content) ab.
  </Step>
</Steps>

## Sora-Verhalten, das weiterhin gilt

OpenAI dokumentiert denselben Ablauf create -> retrieve -> download in der Videos API. Bei CometAPI behältst du die Sora-Request-Form bei, verwendest aber die CometAPI-Basis-URL und den Schlüssel. Fertige Download-URLs sind temporär, daher solltest du abgeschlossene Assets in deinen eigenen Storage kopieren, wenn du sie länger aufbewahren musst.


## OpenAPI

````yaml api/openapi/video/sora-2/post-create.openapi.json POST /v1/videos
openapi: 3.1.0
info:
  title: Create Video API
  version: 1.0.0
  description: >-
    Create an asynchronous Sora video job through CometAPI. Poll GET
    /v1/videos/{video_id} for status and GET /v1/videos/{video_id}/content for
    the final file.
servers:
  - url: https://api.cometapi.com
security:
  - bearerAuth: []
paths:
  /v1/videos:
    post:
      summary: Create a Sora video job
      description: >-
        Start a Sora render job from a prompt and, optionally, one reference
        image. Save the returned video id and poll the retrieve endpoint until
        the job completes.
      operationId: create_video
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - prompt
              properties:
                prompt:
                  type: string
                  description: Text prompt that describes the video you want to create.
                  example: A paper airplane glides across a desk.
                model:
                  type: string
                  description: >-
                    Sora model ID. Choose an available model from the [Models
                    page](/overview/models).
                  default: sora-2
                  example: sora-2
                seconds:
                  type: string
                  enum:
                    - '4'
                    - '8'
                    - '12'
                    - '16'
                    - '20'
                  description: Clip duration in seconds. Use 4, 8, 12, 16, or 20.
                  default: '4'
                  example: '4'
                size:
                  type: string
                  enum:
                    - 720x1280
                    - 1280x720
                    - 1024x1792
                    - 1792x1024
                  description: >-
                    Output resolution formatted as width x height. Use 1280x720
                    or 720x1280 for standard Sora output. Use 1792x1024 or
                    1024x1792 with a Pro model when you need larger Pro output.
                  default: 1280x720
                  example: 1280x720
                input_reference:
                  type: string
                  format: binary
                  description: >-
                    Optional reference image uploaded as a file. The image
                    should match the target size you request.
              default:
                prompt: A paper airplane glides across a desk.
                model: sora-2
                seconds: '4'
                size: 1280x720
            examples:
              Text to video:
                summary: Text to video
                value:
                  model: sora-2
                  prompt: A paper boat drifts across a calm pond at sunrise
                  seconds: '4'
                  size: 1280x720
              With reference image:
                summary: >-
                  First-frame reference image. Replace input_reference with your
                  image file.
                value:
                  model: sora-2
                  prompt: Animate gentle ripples across the water
                  seconds: '4'
                  size: 1280x720
                  input_reference: '@reference.png'
      responses:
        '200':
          description: Video job accepted.
          content:
            application/json:
              schema:
                type: object
                required:
                  - created_at
                  - id
                  - model
                  - object
                  - progress
                  - seconds
                  - size
                  - status
                properties:
                  created_at:
                    type: integer
                  id:
                    type: string
                  model:
                    type: string
                  object:
                    type: string
                  progress:
                    type: integer
                  seconds:
                    type: string
                  size:
                    type: string
                  status:
                    type: string
                example:
                  created_at: 1773296991
                  id: video_69b25d5f467c81908733a56bc236b4df
                  model: sora-2
                  object: video
                  progress: 0
                  seconds: '4'
                  size: 1280x720
                  status: queued
              example:
                id: <video_id>
                task_id: <video_id>
                object: video
                model: sora-2
                status: queued
                progress: 0
                created_at: 1781079478
                seconds: '4'
                size: 1280x720
      x-codeSamples:
        - lang: Shell
          label: Text to video
          source: |
            curl https://api.cometapi.com/v1/videos \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -F model=sora-2 \
              -F prompt="A paper boat drifts across a calm pond at sunrise" \
              -F seconds=4 \
              -F size=1280x720
        - lang: Shell
          label: With reference image
          source: |
            curl https://api.cometapi.com/v1/videos \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -F model=sora-2 \
              -F prompt="Animate gentle ripples across the water" \
              -F seconds=4 \
              -F size=1280x720 \
              -F input_reference=@reference.png
        - lang: Python
          label: Text to video
          source: >
            import os

            import requests


            response = requests.post(
                "https://api.cometapi.com/v1/videos",
                headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                data={
                    "model": "sora-2",
                    "prompt": "A paper boat drifts across a calm pond at sunrise",
                    "seconds": "4",
                    "size": "1280x720",
                },
            )


            video = response.json()

            print(video["id"], video["status"])  # poll GET /v1/videos/{id}
            until completed
        - lang: Python
          label: With reference image
          source: |
            import os
            import requests

            with open("reference.png", "rb") as image:
                response = requests.post(
                    "https://api.cometapi.com/v1/videos",
                    headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                    data={
                        "model": "sora-2",
                        "prompt": "Animate gentle ripples across the water",
                        "seconds": "4",
                        "size": "1280x720",
                    },
                    files={"input_reference": image},
                )

            video = response.json()
            print(video["id"], video["status"])
        - lang: JavaScript
          label: Text to video
          source: >
            const form = new FormData();

            form.append("model", "sora-2");

            form.append("prompt", "A paper boat drifts across a calm pond at
            sunrise");

            form.append("seconds", "4");

            form.append("size", "1280x720");


            const response = await fetch("https://api.cometapi.com/v1/videos", {
                method: "POST",
                headers: { Authorization: `Bearer ${process.env.COMETAPI_KEY}` },
                body: form,
            });


            const video = await response.json();

            console.log(video.id, video.status); // poll GET /v1/videos/{id}
            until completed
        - lang: JavaScript
          label: With reference image
          source: >
            import { readFile } from "node:fs/promises";


            const form = new FormData();

            form.append("model", "sora-2");

            form.append("prompt", "Animate gentle ripples across the water");

            form.append("seconds", "4");

            form.append("size", "1280x720");

            form.append("input_reference", new Blob([await
            readFile("reference.png")], { type: "image/png" }),
            "reference.png");


            const response = await fetch("https://api.cometapi.com/v1/videos", {
                method: "POST",
                headers: { Authorization: `Bearer ${process.env.COMETAPI_KEY}` },
                body: form,
            });


            const video = await response.json();

            console.log(video.id, video.status);
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token authentication. Use your CometAPI key.

````