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

# Create a video job

> Starts a Seedance video job and returns at once with status 202. Poll GET /v1/async/videos/{id} for the result. Send an Idempotency-Key so a retry reattaches to the same job instead of starting a second paid one.



## OpenAPI

````yaml openapi.yaml POST /v1/async/videos
openapi: 3.1.0
info:
  title: Orvado API
  version: '1.0'
  description: >-
    OpenAI-compatible image and video API. Prices in USD, charged from a prepaid
    balance.
servers:
  - url: https://orvado.dev
security:
  - bearerAuth: []
paths:
  /v1/async/videos:
    post:
      summary: Create a video job
      description: >-
        Starts a Seedance video job and returns at once with status 202. Poll
        GET /v1/async/videos/{id} for the result. Send an Idempotency-Key so a
        retry reattaches to the same job instead of starting a second paid one.
      operationId: createVideoJob
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoRequest'
      responses:
        '202':
          description: Job created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoTask'
        '400':
          $ref: '#/components/responses/VideoError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/VideoError'
        '409':
          $ref: '#/components/responses/VideoError'
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: >-
        Your own unique ID for this video, up to 256 characters. Repeating a
        request with the same key returns the same job and does not charge again
      schema:
        type: string
        example: order-1042-video
  schemas:
    VideoRequest:
      type: object
      required:
        - model
        - prompt
      properties:
        model:
          type: string
          enum:
            - seedance-2.5
            - seedance-2.0
        prompt:
          type: string
          example: >-
            slow dolly shot of a perfume bottle on plum velvet, soft studio
            light
        duration:
          type: integer
          default: 5
          description: 'Whole seconds. Seedance 2.5: 4 to 30. Seedance 2.0: 5 to 15'
        resolution:
          type: string
          enum:
            - 480p
            - 720p
            - 1080p
            - 4k
          default: 720p
          description: 4k is Seedance 2.0 only
        aspect_ratio:
          type: string
          enum:
            - '16:9'
            - '9:16'
            - '1:1'
            - '4:3'
            - '3:4'
            - '21:9'
          default: '16:9'
    VideoTask:
      type: object
      properties:
        id:
          type: string
          example: at_0b6f2c1e-6f1d-4a43-9d4e-2a7c1d9e5b10
        object:
          type: string
          example: video.task
        model:
          type: string
          example: seedance-2.5
        status:
          type: string
          description: >-
            queued and running: keep polling. completed: download the video.
            failed or cancelled: not charged. Any other value: keep polling the
            same ID
          example: queued
        created_at:
          type: integer
          example: 1792560000
        billing_status:
          type: string
          enum:
            - held
            - settled
            - refunded
        result:
          type:
            - object
            - 'null'
          properties:
            videos:
              type: array
              items:
                type: object
                properties:
                  url:
                    type: string
        error:
          type:
            - object
            - 'null'
          properties:
            code:
              type: string
            message:
              type: string
    VideoError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: async_video_wait_timeout
            message:
              type: string
            task_id:
              type: string
              example: at_0b6f2c1e-6f1d-4a43-9d4e-2a7c1d9e5b10
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            message:
              type: string
              example: 'No token provided (request id: 2026102015161442847504045555018)'
            type:
              type: string
              example: one_api_error
  responses:
    VideoError:
      description: >-
        Video error. See the code: invalid_async_video_request,
        insufficient_quota, model_not_allowed, async_task_not_found,
        idempotency_conflict, video_generation_failed (not charged),
        async_video_wait_timeout (job still running; poll task_id)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/VideoError'
    Unauthorized:
      description: Missing or invalid key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Your `td-` key from **Tokens**

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.