---
title: "Generate a video"
method: POST
path: "/v1/videos/generate"
tags: ["Videos"]
---

# Generate a video

`POST /v1/videos/generate`

## Request

- Base URL: `https://www.postquick.ai/api`
- URL: `https://www.postquick.ai/api/v1/videos/generate`
- Auth: HTTP bearer

Start an async video generation job that spends video credits. Poll with getVideoStatus; the finished video is saved as a draft and is not published.

## Request body

- object
  - `contentGroupId` string, required
  - `prompt` string, required: Description of the video content to generate
  - `model` string: A model id from GET /v1/models?kind=video (cost shown there), or a built-in name: veo-3.1-fast-generate-preview (default, 1 credit), veo-3.1-generate-preview (3), sora-2 (1), sora-2-pro (3).
  - `aspectRatio` '9:16' | '16:9': Default: 9:16
  - `duration` integer: Seconds. Default 8. Must be a length the model supports (see `durations` in listModels). Built-in Veo models: 4, 6, or 8; Sora: 4, 8, or 12.

## Response `202`

Video generation started.

- object
  - `success` true, required
  - `data` object, required
    - `videoPost` object, required: A video post record
      - `id` string, required
      - `app_id` string, required
      - `title` string, nullable, required
      - `description` string, nullable, required
      - `status` 'pending' | 'draft' | 'scheduled' | 'processing' | 'posted' | 'published' | 'partial' | 'failed', required: Post lifecycle status. `partial` indicates at least one targeted platform succeeded and at least one failed — check `platform_errors` for the per-platform breakdown.
      - `video_url` string, nullable, required
      - `thumbnail_url` string, nullable, required
      - `platforms` string[], nullable, required
      - `posted_platforms` string[], nullable, required
      - `scheduled_for` string, date-time, nullable, required
      - `posted_at` string, date-time, nullable, required
      - `error_message` string, nullable, required
      - `platform_errors` object, nullable, required: Per-platform error messages keyed by platform name. Populated when `status` is `partial` or `failed`.
      - `platform_post_ids` object, nullable
      - `publishing` object, nullable: Durable publishing ledger projection. `needs_review` means an external outcome is uncertain; do not automatically retry it.
        - `state` 'queued' | 'running' | 'published' | 'failed' | 'partial' | 'needs_review', required
        - `platforms` object, required
        - `jobId` string
      - `created_at` string, date-time
      - `updated_at` string, date-time
    - `jobId` string
    - `status` 'processing', required
    - `creditsUsed` integer, required

## Other responses

- `400`: Invalid model, aspect ratio, or duration.
- `403`: Insufficient video credits.

---

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