---
title: "Create video"
method: POST
path: "/videos"
---

# Create video

`POST /videos`

## Request

- Base URL: `https://api.shortgenius.com/v1`
- URL: `https://api.shortgenius.com/v1/videos`
- Auth: HTTP bearer

Before using this endpoint, call one of the following endpoints to generate and review your video's content:
- [Draft video](#tag/videos/POST/videos/drafts)
- [Draft video from URL](#tag/videos/POST/videos/drafts/url)
- [Draft video from script](#tag/videos/POST/videos/drafts/script)
- [Draft quiz video](#tag/videos/POST/videos/drafts/quiz)
- [Draft news video](#tag/videos/POST/videos/drafts/news)

Once you (or your LLM) are happy, you can pass the content to this endpoint to create and render the video.

## Request body

- object
  - `content_type` 'Custom' | 'News' | 'Quiz' | 'History' | 'Scary' | 'Motivational' | 'Bedtime' | 'FunFacts' | 'LifeTips' | 'ELI5' | 'Philosophy' | 'Blog' | 'Ad'
  - `locale` 'af-ZA' | 'id-ID' | 'ms-MY' | 'ca-ES' | 'cs-CZ' | 'da-DK' | 'de-DE' | 'en-US' | 'es-ES' | 'es-419' | 'fr-CA' | 'fr-FR' | 'hr-HR' | 'it-IT' | 'hu-HU' | 'nl-NL' | 'no-NO' | 'pl-PL' | 'pt-BR' | 'pt-PT' | 'ro-RO' | 'sk-SK' | 'fi-FI' | 'sv-SE' | 'vi-VN' | 'tr-TR' | 'el-GR' | 'ru-RU' | 'sr-SP' | 'uk-UA' | 'hy-AM' | 'he-IL' | 'ur-PK' | 'ar-SA' | 'hi-IN' | 'th-TH' | 'ko-KR' | 'ja-JP' | 'zh-CN' | 'zh-TW' | 'auto': Locale for the generated video.
  - `image_style_id` string, uuid: The ID of the image style to use. Use the [List image styles](#tag/images/GET/presets/{type}) endpoint to get a list of available image styles. If left empty, the AI chooses.
  - `image_model` 'OpenAI' | 'Flux Ultra/Max' | 'Flux Pro' | 'Flux 2 Pro': Image model for the generated video.
  - `image_quality` 'low' | 'medium' | 'high': Image quality for the generated video.
  - `image_style_raw_mode` boolean: Whether to use the raw image style mode. If true, the image style will be ignored.
  - `image_style_custom_prompt` string: Custom prompt for the image style. If you provide a custom prompt, the image style will be ignored.
  - `animation_model` 'None' | 'Seedance' | 'Kling' | 'Hailuo02Standard' | 'Hailuo02Pro' | 'Veo3' | 'SeedanceTTV': Default animation model for scene images when not specified individually.
  - `animation_model_preset` 'fully_animated' | 'first_scene_only' | 'first_image_each_scene': Default animation preset for scene images when not specified individually.
  - `connection_ids` string[], required: List of publishing connection ids. Use the [List connections](#tag/connections/GET) endpoint to get a list of available connections
  - `aspect_ratio` '9:16' | '16:9' | '1:1': Aspect ratio of the video. Not required for News videos.
  - `voice_playback_rate` number: Voice playback speed percentage.
  - `voice_volume` number: Voice volume percentage.
  - `soundtrack_playback_rate` number: Soundtrack playback speed percentage.
  - `soundtrack_volume` number: Soundtrack volume percentage.
  - `title` string, required: The title of the video.
  - `caption` string, required: The description shown beside the video when posted to social media.
  - `scenes` DraftScene[]: A list of scenes that make up the video. Not required for Quiz videos
    - `title` string, nullable: If a news video, the headline for the story. Otherwise, blank.
    - `caption` string, required: The text narrated during the scene.
    - `image_query` string, nullable: The query for images search.
    - `first_image_description` string, nullable: The prompt for the first AI generated image.
    - `second_image_description` string, nullable: The prompt for the second AI generated image.
    - `first_image_animation_model` 'None' | 'Seedance' | 'Kling' | 'Hailuo02Standard' | 'Hailuo02Pro' | 'Veo3' | 'SeedanceTTV': Animation model for the first image.
    - `second_image_animation_model` 'None' | 'Seedance' | 'Kling' | 'Hailuo02Standard' | 'Hailuo02Pro' | 'Veo3' | 'SeedanceTTV': Animation model for the second image.
  - `quiz` object: Quiz content to be converted into a single video. Required for Quiz videos.
    - `questions` object[], required
      - `question` string, required: A quiz question.
      - `options` object[], required
        - `text` string, required
        - `correct` boolean, required
    - `results` object, required
      - `header` string, required: The header shown at the top of the quiz results.
      - `explanation` string, required: The text the AI narrates when showing the quiz results.
      - `categories` object[], required
        - `score_range` string, required: The number of questions viewers in this category got right (e.g., "1-2").
        - `title` string, required: The title of the category.
  - `ad` object: Ad content to be converted into a single video. Required for Ad videos.
    - `product_id` string, uuid, required: The ad product ID.
    - `type` 'JustTheHook' | 'HookAndVideo' | 'HookAndRealVideos', required: The ad type.
    - `ugc_media` union, required: The ad UGC media.
      - object
        - `url` string, nullable, required
        - `deletedAt` string, nullable
        - `metadata` unknown
        - `lastError` string, nullable
        - `associatedProductId` string, nullable
        - `type` 'UgcCreator', required
        - `source` 'Ugc' | 'null', nullable, required
        - `category` 'Ugc', required
        - `data` object, required
          - `id` string, required
          - `hook` string, nullable
        - `state` 'completed', required
      - object
        - `url` string, nullable, required
        - `deletedAt` string, nullable
        - `metadata` object, required
          - `sourceImageUrl` string, required
          - `muxPlaybackId` string, nullable, required
          - `narratingText` string, nullable
        - `lastError` string, nullable
        - `associatedProductId` string, nullable
        - `type` 'UgcVideo', required
        - `source` 'Ugc' | 'null', nullable, required
        - `category` 'Ugc', required
        - `data` object, required
          - `id` string, required
          - `ugcCreatorId` string, required
          - `ugcPresetId` string, required
          - `createdAt` string, required
          - `hook` string, nullable
        - `state` 'pending' | 'generating' | 'completed' | 'error', required
    - `media_id` string, uuid: The ad media ID. Required for HookAndVideo type.
  - `voice_id` string: The voice to use for speech generation. See the [List voices](#tag/voices/GET/voices) endpoint. If left empty, the AI chooses.
  - `soundtrack_id` string, uuid: Id of the soundtrack to use for background music. See the [List music](#tag/music/GET/music/genres) endpoint for available genres, and the [List music tracks](#tag/music/GET/music/tracks) endpoint for available soundtracks. If left empty, the AI chooses.
  - `publish_at` string: Scheduled time for publishing the video. Format in ISO 8601. If left empty, it will be published 1 hour after the video is created.

## Response `200`

Successful response

- Video: Details about the created or retrieved video, including scenes and their media.
  - `id` string, uuid, required
  - `title` string, nullable
  - `caption` string, nullable
  - `created_at` string, required: Date and time (ISO 8601) when the video was created.
  - `updated_at` string, nullable: Date and time (ISO 8601) when the video was last updated.
  - `series_id` string, uuid, required: ID of the associated series.
  - `publishing_state` 'pending' | 'processing' | 'completed' | 'skipped' | 'error', required: Upload status of the video.
  - `publish_at` string, nullable, required: Date and time (ISO 8601) when the video was fully uploaded.

## Other responses

- `400`: Invalid request
- `401`: Unauthorized request

---

[API](https://skmtc.dev/shortgenius/apis/shortgenius-api.md) · [All operations](https://skmtc.dev/shortgenius/apis/shortgenius-api/llms.txt) · [OpenAPI document](https://skmtc.dev/shortgenius/apis/shortgenius-api/revisions/532abda8ff32?raw)
