> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.videogen.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.videogen.io/_mcp/server.

## v2.0.0 — Prompt-to-video, content outline, motion graphics, and rewritten SDKs

This release adds two workflows and a motion-graphic tool, opens up the VideoGen AI assistant as an asynchronous conversational Assistant API, adds timeline interchange for handing projects off to desktop editors, expands export and file controls (including deliver-on-completion destinations), lets you attach transcripts and scene ranges on voiceover runs, exposes structured entity attachments on storyboard scenes, removes the `EDIT_WITH_AGENT` remix action, and replaces the TypeScript, Python, and CLI clients with rewritten `2.0.0` packages.

### Added

- **Prompt to video workflow:** `POST /v1/workflows/prompt-to-video-clip` creates an editable project from a text prompt and generates one short AI video clip (up to 15 seconds). VideoGen generates an opening frame (optionally guided by reference `imageFileIds`), then animates it into a video. Accepts `durationSeconds` (1–15, default 10), `aspectRatio`, and `quality` (`STANDARD` | `HIGH`). Does not accept `remixActions`. Distinct from `POST /v1/tools/generate-video-clip` (standalone clip, no project) and from longer narrated workflows such as script-to-video.
- **Content outline to video workflow:** `POST /v1/workflows/content-outline-to-video` creates a project from a Markdown content outline (`outlineMarkdown`) and builds a full video from it. Optional `aspectRatio` and `inputFileIds` (uploaded images/videos the agent may use). Returns a workflow run id; poll or use webhooks for completion. Does not accept `remixActions`.
- **Generate motion graphic tool:** `POST /v1/tools/generate-motion-graphic` generates a standalone animated motion graphic from a text `prompt` (optional `fileIds`, `durationSeconds` 1–300, `aspectRatio`, `numResults`, `isOutputTemporary`). Suited to precise text/kinetic animation in a short clip. For longer narrated multi-scene videos, use a video workflow such as script-to-video.
- **List project exports:** `GET /v1/projects/{projectId}/exports` returns that project's export ids (`vg_expo_...`), newest first. Fetch each export with `GET /v1/projects/{projectId}/exports/{exportId}`.
- **Export watermark mode:** `POST /v1/projects/{projectId}/export` accepts `watermarkMode` (`NONE` | `VIDEO_GEN` | `AUTO`, default `AUTO`). The API can export with a VideoGen watermark; set `watermarkMode` to `NONE` only with the Production API add-on.
- **Export end-screen mode:** `POST /v1/projects/{projectId}/export` accepts `endScreenMode` (`NONE` | `VIDEO_GEN` | `AUTO`, default `AUTO`), which appends a short "Made with VideoGen" end screen. Set both `watermarkMode` and `endScreenMode` to `NONE` (Production API add-on) to export without them.
- **Timeline interchange:** `POST /v1/projects/{projectId}/timeline-interchange` creates an editable editor timeline from a project instead of a flattened MP4, keeping separate clips, tracks, and captions. Choose `format` (`FCPXML` for Final Cut Pro, `PREMIERE_XML` for Adobe Premiere Pro, `OTIO` for OpenTimelineIO, or `SRT` for a caption sidecar) and `mediaDelivery` (`REMOTE_URLS` links signed media URLs; `BUNDLE` returns a zip with every referenced file for offline relinking). Returns a `vg_inte_...` job id; poll `GET /v1/timeline-interchange/{interchangeJobId}` until `status` is `succeeded` for the signed download URL and hydrated `file`. The SDKs and CLI expose both operations (`createTimelineInterchange` / `getTimelineInterchange`, with `*AndWait` variants).
- **File list include flags:** `GET /v1/files` accepts `includeExportFiles` and `includeProjectFiles` (default `false`). When false, export MP4s and in-project generative files are omitted; setting either to `true` requires the Production API add-on.
- **Pre-computed transcript on upload (Beta):** `POST /v1/files/upload` accepts optional `transcript` (`Transcript`: timed `segments` with `startSeconds` / `endSeconds` / `text`, optional `languageCode`). When set for audio/video, VideoGen skips re-transcription so caption timing can match your transcript. Voiceover-to-video docs note using this on the voiceover `fileId`.
- **Voiceover scene ranges (Beta):** `POST /v1/workflows/voiceover-to-video` accepts optional `scenes` (`SceneDescriptionRange[]`: `startSeconds`, `endSeconds`, `description`) to guide visuals over absolute time ranges. Ranges must be sorted and non-overlapping; omit to let the workflow choose visuals.
- **Temporary workflow outputs:** `isOutputTemporary` on `script-to-video`, `voiceover-to-video`, `slideshow-to-video`, `storyboard-to-video`, and `prompt-to-video-clip`. When `true`, generated output files (and remix-produced outputs on those runs) are guaranteed for 24 hours, then may be archived/deleted. Project metadata is unaffected. Defaults to `false`.
- **Lottie file type:** `LOTTIE` is a valid `mediaType` / file-type enum value alongside image, video, audio, PDF, slideshow, and text.
- **Assistant API:** conversational, asynchronous access to the VideoGen AI assistant. Start a chat with `POST /v1/assistants` (accepts `message`, plus optional `forceWorkflowSuggestion` and `autoGenerate`); the 202 body returns `{ messageId, assistantId, projectId, projectUrl }`. Send follow-ups with `POST /v1/assistants/{assistantId}/messages` and act on suggestions/edits with `POST /v1/assistants/{assistantId}/actions/{actionId}` (`APPROVE` or `REJECT`); those POSTs return `{ messageId }`. Poll `GET /v1/assistant/messages/{messageId}` until `status` is `succeeded`, `failed`, or `cancelled`, or subscribe to `assistant_message.succeeded` / `assistant_message.failed` / `assistant_message.cancelled` webhooks (payload mirrors the assistant message GET). Fetch the full chat with `GET /v1/assistants/{assistantId}`, which returns every message in chronological order. `AssistantMessage` is discriminated by `role`: `user` messages carry the caller's text and any attachments; `assistant` messages carry the reply, optional `workflowSuggestions`, optional `actions` (with `AssistantActionKind`: `APPROVE_PLAN`, `APPLY_EDIT`, `RUN_TOOL`, `GENERATE`, `OPEN_IN_APP` and a `requiresApp` flag), an optional `generation` workflow run when the turn kicked off a build, and an optional `error` when it failed. Every API project also exposes `assistantId` on `ProjectResponse`. The TypeScript / Python / CLI SDKs expose the operations plus `startAssistantChatAndWait` / `sendAssistantMessageAndWait` / `actOnAssistantActionAndWait` (`*_and_wait` in Python) built on a shared `pollAssistantMessage` / `poll_assistant_message` helper.
- **Storyboard entity attachments:** `POST /v1/workflows/storyboard-to-video` accepts structured entity ids alongside scene prompts. Per-scene `actorEntityIds` and `productEntityIds` feature the referenced entities' reference images in that scene, and per-scene `visualStyleEntityId` guides its look. Request-level `actorEntityIds` and `productEntityIds` register project-level entities that stay attached even when no scene references them. Prefer these structured fields over the legacy `@[entity:...]` mention tokens embedded in `prompt` / `voiceoverScript`; mention tokens are still parsed for backward compatibility.
- **Export delivery destinations:** `POST /v1/projects/{projectId}/export` accepts optional `deliveryDestinations`, an array of `ExportDeliveryDestination` referencing connected integrations. Each destination sets `integrationConnectionId` and `type` (`slack_channel` or `google_drive_folder`), plus the target-specific field (`slackChannelId` or `googleDriveFolderId`). The finished export is delivered to every listed destination in addition to any defaults saved for the team.
- **SDKs 2.0.0:** The TypeScript (`@videogen/sdk`), Python (`videogen`), and CLI (`@videogen/cli`) clients were rewritten as first-party packages (no longer auto-generated). Each exposes a `VideoGen` client with resource namespaces (`workflows`, `tools`, `projects`, `files`, and so on), `*AndWait` / `*_and_wait` helpers that start work and poll to completion, plus shared helpers for uploads, downloads, file hydration, public previews, and webhook verification. Python ships sync and async clients; the CLI mirrors the same operations as `videogen <resource> <command>`.
- **Editor integrations:** new companion apps built on the API. An Adobe Premiere Pro panel, a DaVinci Resolve import script, and a dependency-free "send to editor" CLI open a VideoGen project as a native, editable timeline (Final Cut Pro, DaVinci Resolve, and OpenTimelineIO editors). A Canva app and an updated After Effects panel generate assets and insert them into the open document.
- **Native app sign-in:** editor integrations that cannot use a loopback redirect (such as the Premiere and Canva panels) can sign in with a VideoGen account via OAuth.

### Changed

- **Get project export:** `GET /v1/projects/{projectId}/exports/{exportId}` (summary renamed from "Get project export status") returns signed `downloadUrl` / `thumbnailUrl` with `*ExpiresAt`, plus `exportFileId` and hydrated `file` when `status` is `succeeded`. Single-export GET re-signs URLs near expiry (24-hour signed URLs).
- **Tool execution URL signing:** Docs for `GET /v1/tools/executions` and `GET /v1/tools/executions/{toolExecutionId}` clarify that list responses do not re-sign result URLs (check `downloadUrlExpiresAt`), while single-execution GET re-signs near expiry. Succeeded results always expose `downloadUrl` / `thumbnailUrl` / hydrated `file` fields (nullable until success).
- **Storyboard to video always produces video clips.** On `POST /v1/workflows/storyboard-to-video`, the per-scene `generation.type` field (`AI_IMAGE` / `AI_VIDEO`) is deprecated and ignored: every scene now renders as a video clip, with stills used only as intermediate first frames. Requests that still send `type` are accepted for compatibility. `LOW` quality is no longer supported for storyboard to video and is rejected; use `STANDARD` or `HIGH`.

### Removed

- **Breaking: `EDIT_WITH_AGENT` remix action removed.** Requests with `"type": "EDIT_WITH_AGENT"` are no longer accepted. Open-ended natural-language editing now runs through the new Assistant API (`POST /v1/assistants` to start a chat, `POST /v1/assistants/{assistantId}/messages` to continue it, and `POST /v1/assistants/{assistantId}/actions/{actionId}` to act on the assistant's suggestions and edits). For fixed polish steps, use targeted remix actions instead (for example `ENABLE_CAPTIONS` / `DISABLE_CAPTIONS`, `ADD_TRANSITIONS`, `SET_LOGO`, `SET_BACKGROUND_MUSIC`, `CONVERT_IMAGES_TO_VIDEOS`, `REGENERATE_IMAGES`, `CHANGE_NARRATOR`, or `TRANSLATE_PROJECT`). See [Remix actions](/remix-actions). Only the `EDIT_WITH_AGENT` type and its `prompt` / `mode` / `targetDurationSeconds` fields are gone; every other remix action is unchanged.