> 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.

# Changelog

> Recent VideoGen API releases — new tools, endpoint changes, breaking changes, and SDK updates. Entries are listed below in reverse-chronological order; subscribe via the RSS feed at /changelog.rss.

What's new in the VideoGen API. Each entry below covers a single release window with breaking changes, new endpoints, fixes, and SDK updates.

* Subscribe to releases via the [RSS feed](/changelog.rss).
* For machine-readable history, fetch each entry as Markdown by appending `.md` to its URL (for example, [/changelog/2026/5/5.md](/changelog/2026/5/5.md)).
* For the complete documentation index, see [/llms.txt](/llms.txt).

## September 14, 2026

## v2.2.0 — Auto-export after a workflow run

Workflow start requests can now render an MP4 before the run is marked succeeded. Set `autoExport: true` (REST and SDK default is still `false`). MCP workflow tools default `autoExport` to `true`. Zapier, Make, n8n, and Pipedream always auto-export (the field is not shown) and wait until the MP4 is ready. When auto-export is on, wait until `status` is `succeeded` and use `downloadUrl`. Remix actions on the same start request finish before that export.

### Added

- **`autoExport` and `exportOptions` on workflow starts:** All five workflow start bodies accept `autoExport` and optional `exportOptions` (same shape as `POST /v1/projects/{projectId}/export`). Omitted export fields use the same defaults as a standalone export.
- **Export fields on `WorkflowRun` and `workflow_run.*` webhooks:** `exportId`, `downloadUrl`, `downloadUrlExpiresAt`, `exportFileId`, `thumbnailUrl`, and `thumbnailUrlExpiresAt` are always present. They are `null` until an auto-export succeeds.
- **MCP default:** Workflow tools (`script_to_video`, `voiceover_to_video`, `slideshow_to_video`, `storyboard_to_video`, `prompt_to_video_clip`) default `autoExport` to `true`. Pass `false` only if you will remix and export yourself.
- **Zapier, Make, n8n, and Pipedream:** Auto-export is always on. Each action waits until the run succeeds, then returns `projectId`, `projectUrl`, `downloadUrl`, and `thumbnailUrl`.

### Fixed

- **File upload:** `POST /v1/files/upload` no longer errors before the upload URL is issued. SDK `createFileUpload` and MCP `create_file_upload` / `upload_file` are the same.
- **Workflow `aspectRatio`:** Script-to-video, voiceover-to-video, slideshow-to-video, storyboard-to-video, and prompt-to-video-clip apply the `aspectRatio` you send (including 9:16) to the generated project. `GET /v1/projects/{projectId}` returns that ratio.
- **Video clip generation:** `POST /v1/tools/generate-video-clip` and storyboard scene clips are less likely to fail when a generation job is retried.

## September 13, 2026

## v2.1.13 — Simpler Zapier, Make, n8n, and Pipedream apps

The no-code apps now start a VideoGen workflow and wait until the exported MP4 is ready. The only instant trigger is `project_export.succeeded`. Individual media tools, file upload, project lookup, and other webhook triggers are no longer in those apps. Use the REST API or SDKs for that.

Docs no longer advertise unpublished per-framework agent packages. Give an agent VideoGen with the MCP server, or bind the TypeScript or Python SDK in your framework.

### Added

- **Workflow run:** Succeeded runs now include `thumbnailUrl` and `thumbnailUrlExpiresAt` on `GET /v1/workflows/runs/{workflowRunId}` and on `workflow_run.*` webhook payloads, alongside `downloadUrl`.

### Changed

- **Zapier, Make, n8n, and Pipedream:** Actions are script to video, voiceover to video, slideshow to video, and prompt to video clip. Auto-export is always on (not a field). Each action waits until the run succeeds, then returns `projectId`, `projectUrl`, `downloadUrl`, and `thumbnailUrl`.
- **Triggers:** The only instant trigger is `project_export.succeeded` (Make: Watch for succeeded project exports).
- **Make:** The first-party app is `videogen-7gdrvo`. Make still includes **Make an API call** so you can hit any VideoGen path with the same connection. Make custom apps cap a module at five minutes, so very long HIGH runs may still time out there.

### Removed

- **Media tools, file, project, entity, remix, cancel, and get/list modules** from the no-code apps (generate image, create file upload, get workflow run, and similar).
- **Other webhook triggers** from those apps (`workflow_run.*`, `tool_execution.*`, `file.*`, `project_export.failed`).
- **Unpublished agent-framework packages from docs:** CrewAI, LlamaIndex, Pydantic AI, Composio, LangChain, Vercel AI SDK, and OpenAI Agents wrapper pages and registry links. Those packages were never published. Use the [MCP server](/libraries/mcp) or bind `@videogen/sdk` / `videogen` as in [Use with AI agents](/use-with-ai-agents).

## September 3, 2026

## v2.1.15 — Auto-export after a workflow run

Workflow start requests can now render an MP4 before the run is marked succeeded. Set `autoExport: true` (REST default is still `false`; MCP and Zapier / Make / n8n / Pipedream default `true`). When it is on, wait until `status` is `succeeded` and use `downloadUrl`. Remix actions on the same start request finish before that export.

### Added

- **`autoExport` and `exportOptions` on workflow starts:** All five workflow start bodies accept `autoExport` and optional `exportOptions` (same shape as `POST /v1/projects/{projectId}/export`). Omitted export fields use the same defaults as a standalone export.
- **Export fields on `WorkflowRun` and `workflow_run.*` webhooks:** `exportId`, `downloadUrl`, `downloadUrlExpiresAt`, and `exportFileId` are always present. They are `null` until an auto-export succeeds.

## August 27, 2026

## v2.1.14 — Auto duration when generate-video-clip omits durationSeconds

Omitting `durationSeconds` on `POST /v1/tools/generate-video-clip` (or passing null) now estimates clip length at generate time so spoken text or the visual beat fits. Previously a missing duration was treated as 6 seconds, which rejected spoken clips longer than 6 seconds. Pass a whole number from 1 to 30 to pin an exact length.

### Fixed

- **`durationSeconds` on generate-video-clip:** Omit or pass `null` for Auto. Spoken clips longer than 6 seconds no longer fail when you leave duration unset. An explicit number still uses that length.

## August 26, 2026

## v2.1.11 — Hide workflow projects from Home and Projects

Workflow start requests already accepted `hideFromUi` to keep generated files off the Media page. The same field now also hides the project from Home and Projects unless the viewer turns on Show hidden projects. Direct project URLs and API get/list still work. Defaults to `false`.

### Changed

- **`hideFromUi` on video workflow starts:** `true` omits the project from Home and Projects by default and still hides generated files from Media. Omit the field or pass `false` to show the project in the app, which is the default for MCP and typical API use.

## August 25, 2026

## v2.1.8 — Project export webhooks and catalog voice names

You can subscribe to project export completion instead of polling the export GET. Every `voiceId` field also accepts a catalog `displayName` (for example `Matilda` or `Charlie`) in addition to a `vg_voic_…` id from `GET /v1/resources/tts-voices`. Existing clients that send ids keep working.

### Added

- **Project export webhooks:** `project_export.succeeded`, `project_export.failed`, and `project_export.cancelled` fire when an export started via `POST /v1/projects/{projectId}/export` reaches a terminal state. The payload includes `exportId`, `projectId`, `occurredAt`, and `exportFileId` (set on success). Use the export GET for signed download URLs, or hydrate `exportFileId`. These events are also available as Make / Zapier / n8n / Pipedream triggers (`succeeded` and `failed`).

### Changed

- **`voiceId` on text-to-speech, script-to-video, slideshow-to-video, and `CHANGE_NARRATOR`:** pass either the catalog display name or a `vg_voic_…` id. Names are matched case-insensitively after trim. Unknown names still return `400` `invalid_parameters`.

## August 21, 2026

## v2.1.1 — Download and thumbnail URLs on videogen.io

Signed file download and thumbnail URLs in API responses now use VideoGen hosts. `uploadUrl` for PUT uploads is unchanged.

### Changed

- **`downloadUrl`:** video and other original-file downloads are `https://storage-download.videogen.io/r2dl/{id}/primary-source?exp=...&sig=...&name=...` (host varies by environment). Image downloads that already used the image download host stay on `https://image-download.videogen.io/imagedl/...`.
- **`thumbnailUrl`:** Cloudflare image thumbnails are `https://image-download.videogen.io/imagedl/{account}/{imageId}/{variant}?exp=...&sig=...&name=...`. Video thumbs that only exist as playback stills stay on `https://image.media.videogen.io`.
- **`uploadUrl`:** still a short-lived PUT URL on the storage API host. Do not treat it as a download link.
- Expiry is still 7 days (`downloadUrlExpiresAt` / `thumbnailUrlExpiresAt`). GET a single file, export, tool execution, or interchange job to refresh a URL that is near expiry.

## August 19, 2026

## v2.1.0 — Catalog entities, spoken clips, slideshow themes, and OpenClaw

Version 2.1 of the TypeScript SDK, Python SDK, CLI, MCP server, and OpenClaw plugin. List VideoGen's built-in catalog on the Entities API, generate spoken lip-synced clips, theme slideshow-to-video decks, and install the OpenClaw plugin from npm or ClawHub.

### Added

- **Built-in catalog on the Entities API:** `GET /v1/entities` and `GET /v1/entities/{entityId}` include stock actors, products, visual styles, and slideshow themes alongside your team's entities (catalog first). Responses include `isBuiltIn` (`true` for catalog rows). Filter with `entityType` when you only need one kind. Catalog entities cannot be updated, archived, or given references (`400` `invalid_parameters` on `/update`, `/archive`, `/references`, and `/references/remove`).
- **Spoken dialogue on generate-video-clip:** `POST /v1/tools/generate-video-clip` accepts `spokenDialogue` (the line to speak as native lip-synced speech), `voiceDescription`, and `startFrameFileId`. Clip length is a whole number from 1 to 30 seconds. Set `suppressBackgroundMusic` to `true` when you will add music separately.
- **Entity ids on generate-image and generate-motion-graphic:** pass `entityIds` (`vg_enti_...`) so the model can use actors, products, or visual styles as identity or reference. You can combine them with file ids. A missing id returns not found. An inaccessible id returns a permission error.
- **`ADD_ZOOM` remix action:** apply a Ken Burns zoom to every eligible still in a project, including uploads. No extra fields. Use it in `remixActions` on a workflow start or via `POST /v1/projects/{projectId}/remix`. See [Remix actions](/remix-actions).
- **Slideshow themes:** create a `SLIDESHOW_THEME` entity with `POST /v1/entities`. `POST /v1/workflows/slideshow-to-video` accepts optional `slideshowThemeEntityId`. Omit it to convert uploaded PDF or PowerPoint pages as they are. VideoGen derives a theme from those pages so later slide edits can match the deck. A `SLIDESHOW_THEME` may attach a PDF or PowerPoint as a reference, not only images.
- **OpenClaw plugin:** install `@videogen/openclaw-plugin` from npm or ClawHub (`openclaw plugins install clawhub:@videogen/openclaw-plugin`). The package ships compiled runtime JS and exposes the same workflows, tools, projects, files, and entities as the MCP server. Set `VIDEOGEN_API_KEY` (or plugin `apiKey`).

### Fixed

- **API text-to-speech usage labels:** TTS started from the API, including narration on API workflow runs, now shows as via the API on your usage page. Amounts are unchanged.

## August 18, 2026

## v2.0.20 — Slideshow theme optional for uploaded decks

Slideshow-to-video no longer requires a theme when you are converting an uploaded PDF or PowerPoint's original pages.

### Changed

- `POST /v1/workflows/slideshow-to-video` `slideshowThemeEntityId` is optional. Omit it to narrate the uploaded pages as they are. VideoGen derives a slideshow theme from those pages in the background so later slide edits can match the original deck. Pass a `SLIDESHOW_THEME` id when you want generated or edited slides to use a specific design system. A `SLIDESHOW_THEME` may now attach a PDF or PowerPoint as a reference, not only images.

### Added

- `POST /v1/tools/generate-motion-graphic` accepts optional `entityIds` (for example `["vg_enti_..."]`). Pass actor, product, or visual-style ids so the motion graphic can use those subjects as identity or reference, the same way generate-image does. You can combine `entityIds` with `fileIds`. A missing id returns not found. An inaccessible id returns a permission error.

## August 17, 2026

## v2.0.19 — Slideshow to video requires a theme

Slideshow-to-video now requires a slideshow theme so every generated slide shares one design system.

### Changed

- **Breaking:** `POST /v1/workflows/slideshow-to-video` requires `slideshowThemeEntityId`. Create a `SLIDESHOW_THEME` entity with `POST /v1/entities`, attach a reference image, and pass that `vg_enti_...` id. Omitting the field returns `400`.

## August 14, 2026

## v2.0.20 — Entity ids on generate-image

`POST /v1/tools/generate-image` now accepts optional actor, product, and visual-style entity ids. The model uses them as identity/reference the same way in-app image generation does.

### Added

- **`entityIds` on generate-image:** pass `vg_enti_...` ids on `POST /v1/tools/generate-image` (and the matching MCP / agent tools). You can combine them with `imageFileIds`. A missing id returns not found. An inaccessible id returns a permission error.

## v2.0.21 — Spoken dialogue, start frame, and longer clips on generate-video-clip

`POST /v1/tools/generate-video-clip` now accepts `spokenDialogue` (the exact line the subject should speak as native, lip-synced speech) and `voiceDescription` (how that voice should sound). The model synthesizes the voice from that text. `audioFileIds` still accepts a reference recording for lip-sync from that file. You can pass spoken text, reference audio, or both.

Clip length on generate-video-clip is a whole number from 1 to 30 seconds and is clamped to the selected quality's supported range.

### Added

- **`spokenDialogue` on generate-video-clip:** optional string on `POST /v1/tools/generate-video-clip` (and the matching MCP / agent tools). Can be the only input. Combine it with a visual `prompt`, `startFrameFileId`, or reference media. At least one of `prompt`, `startFrameFileId`, `imageFileIds`, `videoFileIds`, `audioFileIds`, or `spokenDialogue` must be provided.
- **`voiceDescription` on generate-video-clip:** optional string describing the voice that speaks `spokenDialogue` (for example, a warm, confident young man's voice). Used when `spokenDialogue` is set. When omitted, a clear natural voice is used.
- **`startFrameFileId` on generate-video-clip:** optional file id of the opening-frame still. When set, that image is the first frame of the clip. If the same id also appears in `imageFileIds`, it is used only as the opening frame. Can be the only input.

### Changed

- **Clip duration:** `durationSeconds` on `POST /v1/tools/generate-video-clip` is a whole number from 1 to 30 (was 1 to 15). The generated clip is clamped to the selected quality's supported range. `POST /v1/workflows/prompt-to-video-clip` uses the same 1–30 window.

## v2.0.22 — Suppress background music on generate-video-clip

`POST /v1/tools/generate-video-clip` now accepts `suppressBackgroundMusic`. When true, the generated clip will not include a musical soundtrack. Spoken dialogue and environmental sound are still allowed. Use this when you will add background music separately, for example at the project level.

### Added

- **`suppressBackgroundMusic` on generate-video-clip:** optional boolean on `POST /v1/tools/generate-video-clip` (and the matching MCP / agent tools). Defaults to `false`.

## August 13, 2026

## v2.0.19 — Add zoom remix action

You can now apply a Ken Burns zoom to every still image in a project with a remix action.

### Added

- **`ADD_ZOOM` remix action:** apply a Ken Burns zoom to every eligible still image in a project, including uploaded images. No extra fields. If the project has no eligible stills, the action completes without changing anything. Use it in `remixActions` on a workflow start or via `POST /v1/projects/{projectId}/remix`. See [Remix actions](/remix-actions).

## August 11, 2026

## v2.0.18 — Actor entities replace avatar presenters

Avatar generation now uses reusable ACTOR entities exclusively.

### Changed

- **Breaking:** `POST /v1/tools/generate-avatar` now requires `actorEntityId` and `audioFileId`. Use `avatarQuality` to select `LOW`, `STANDARD`, `HIGH`, or `MAX`.
- **Breaking:** Script-to-video, voiceover-to-video, slideshow-to-video, and `CHANGE_NARRATOR` no longer accept `avatarPresenterId`. Pass `actorEntityId` instead.

### Removed

- `GET /v1/resources/avatar-presenters` and the corresponding TypeScript SDK, Python SDK, CLI, MCP, and agent-integration methods have been removed.

## August 10, 2026

## v2.0.15 — MCP host attribution

This release lets MCP hosts identify themselves so connected integrations show up correctly in VideoGen.

### Added

- **MCP host client id:** Send `X-VideoGen-Client` from your MCP config (or `?vg_client=<id>` on the MCP URL) so VideoGen attributes the connection to the right host (Cursor, Claude, Raycast, and others).

## August 7, 2026

## v2.0.14 — Actor avatars, file controls, CLI OAuth, and motion graphics

This release adds actor-based avatar generation, team file controls, interactive CLI sign-in, and more control over motion graphics. It also expands the agent integration packages and removes several plan restrictions.

### Added

- **Catalogue `query` filter:** `GET /v1/resources/languages`, `GET /v1/resources/tts-voices`, and deprecated `GET /v1/resources/avatar-presenters` accept optional `query` for case-insensitive substring matching across each item's searchable text fields.
- **Automation platforms:** Zapier, Make, n8n, and Pipedream no longer expose the deprecated avatar-presenter catalogue (`listAvatarPresenters`) or deprecated `avatarPresenterId` request fields. Use `actorEntityId` instead.
- **Actor-based avatars:** `POST /v1/tools/generate-avatar` now accepts `actorEntityId` for an `ACTOR` entity with an image reference. Use `avatarQuality` to select `LOW`, `STANDARD`, `HIGH`, or `MAX`.
- **Actor avatars in workflows:** Script-to-video, voiceover-to-video, and slideshow-to-video accept `actorEntityId` and `avatarQuality`. The `CHANGE_NARRATOR` remix action accepts the same fields.
- **Team file listing:** `GET /v1/files` now returns files accessible to your team. Pass `selfOnly=true` to restrict results to files created by the API key's user.
- **Hidden generated files:** Upload, media-generation, and video-workflow requests accept `hideFromUi`. Set it to `true` to keep generated files out of the VideoGen Media page while retaining API access.
- **Motion graphic capability controls:** `POST /v1/tools/generate-motion-graphic` accepts `subToolModes` for generated images, generated video clips, generated voiceover, and stock media search. Set each capability to `AUTO`, `ENABLED`, or `DISABLED`.
- **Transparent motion graphics:** `POST /v1/tools/generate-motion-graphic` accepts `transparentBackground`. It defaults to `true` and returns a transparent WebM suitable for overlays. Set it to `false` for an opaque MP4. MCP `generate_motion_graphic` supports the same option.
- **CLI OAuth:** Run `videogen login` for interactive OAuth 2.1 sign-in with PKCE. Run `videogen logout` to clear cached credentials. Explicit `--api-key` credentials take priority, followed by `VIDEOGEN_API_KEY`, then the cached OAuth token.
- **MCP guidance:** Four new tools and matching resources help agents choose between tools and workflows, handle asynchronous operations, follow the workflow-to-export flow, and configure authentication: `get_getting_started_guidance`, `get_async_tasks_guidance`, `get_workflows_guidance`, and `get_tools_vs_workflows_guidance`.
- **Python agent integrations:** The Composio, CrewAI, LangChain, LlamaIndex, OpenAI Agents, and Pydantic AI packages now expose `prompt_to_video_clip` and `generate_motion_graphic`, along with the actor-avatar fields.
- **OpenClaw tools:** The OpenClaw plugin now includes `prompt_to_video_clip`, `generate_motion_graphic`, `get_project_export`, `get_app_deep_link`, and the four MCP guidance tools.

### Changed

- **API access on every plan:** You can create multiple API keys and access authorized project and export files without the Production API add-on.
- **Pro branding controls:** A Pro plan now allows `watermarkMode: "NONE"` and `endScreenMode: "NONE"`. `AUTO` removes API branding on Pro and applies it below Pro.
- **File filters:** `includeExportFiles=true` and `includeProjectFiles=true` no longer require the Production API add-on.
- **Text generation billing:** `POST /v1/text/generate` now bills on AI-assistant token rates (input, output, and thinking tokens) instead of a separate per-character text-generation feature. Balance checks reserve your request's `maxOutputTokens` before the model runs.
- **Image and video clip rates:** Generated images and video clips use a flat per-image or per-output-second rate. Reference images, input video seconds, and input audio seconds are no longer billed as separate line items.

### Deprecated

- **Legacy avatar presenters:** `avatarPresenterId`, `GET /v1/resources/avatar-presenters`, and MCP `list_avatar_presenters` remain available for compatibility but are deprecated. New integrations should use `actorEntityId`.

### Fixed

- **Hosted MCP OAuth:** Sign in with VideoGen on the hosted MCP server now completes more reliably in Cursor.

## August 5, 2026

## v2.0.13 — Assistant request cleanup

This release removes the unsupported workflow-suggestion override from assistant chat creation.

### Removed

- **Breaking: `forceWorkflowSuggestion` removed.** `POST /v1/assistants` no longer accepts `forceWorkflowSuggestion`. Remove the field from requests. Use `autoGenerate: true` when the assistant should choose a workflow and start generating immediately.

## July 31, 2026

## v2.0.11 — MCP OAuth in Cursor

This release fixes MCP OAuth in Cursor so protected tools receive the access token after Sign in with VideoGen.

### Fixed

- **Cursor MCP OAuth:** After Sign in with VideoGen succeeds, protected tools (including `get_me`) no longer return a soft "Sign in to VideoGen to continue" tool error without attaching the access token. Missing credentials are challenged with HTTP 401 so the host retries with the OAuth token.

## July 30, 2026

## v2.0.12 — Storyboard Auto duration, ChatGPT MCP deep links, and developer dashboard URL

This release lets storyboard-to-video pick scene lengths automatically, improves the hosted MCP experience in ChatGPT, and updates the in-app URL where you create API keys.

### Added

- **Storyboard Auto duration:** On `POST /v1/workflows/storyboard-to-video`, `defaultDurationSeconds` is now nullable. Omit it or pass `null` for Auto: VideoGen estimates each scene's length at generate time so spoken text or the visual beat fits (clamped to model limits). Per-scene `durationSeconds` still overrides when set; omit or pass `null` on a scene to inherit the request default (including Auto). When you do set a duration, it must still be a whole number between 1 and 15.
- **MCP `get_app_deep_link`:** The hosted MCP server exposes a `get_app_deep_link` tool that returns a VideoGen app URL for actions the API cannot complete inline (upgrade, buy credits, invite teammates, open settings, and similar). Prefer this when the user needs to finish something in the VideoGen UI. See [MCP server](/libraries/mcp).
- **ChatGPT media preview:** On the hosted MCP transport, media-producing tools can render an inline preview widget for generated or exported images, video, and audio in ChatGPT Apps (alongside the existing `open_uploader` widget).

### Changed

- **Developer dashboard URL:** Create and manage API keys (and review connected OAuth apps) at [app.videogen.io/api](https://app.videogen.io/api). Docs and OpenAPI auth descriptions that previously pointed at `/developers` now use `/api`.
- **Fix: empty script-to-video scripts.** `POST /v1/workflows/script-to-video` rejects a blank or whitespace-only `script` with `invalid_parameters` (`script must be a non-empty string`) instead of starting a run that cannot succeed.

## July 25, 2026

## v2.0.9 — Entities API, SDK/CLI coverage, ChatGPT MCP connector, and client cleanup

This release adds the Entities API to the docs and SDKs, ships a ChatGPT MCP connector, expands the MCP tool surface, and removes an unsupported workflow method from the public clients.

### Added

- **Entities API:** Create and manage reusable characters, products, and visual styles:
  - `GET` / `POST /v1/entities` (list / create; filter list by `entityType`: `ACTOR` | `PRODUCT` | `VISUAL_STYLE`)
  - `GET /v1/entities/{entityId}`
  - `POST /v1/entities/{entityId}/update`
  - `POST /v1/entities/{entityId}/archive`
  - `POST /v1/entities/{entityId}/references` and `POST /v1/entities/{entityId}/references/remove` (attach or detach reference images uploaded via `POST /v1/files/upload`)
  Entity ids use the `vg_enti_...` prefix. Use an entity in a workflow with `visualStyle: { type: "ENTITY", entityId }` (for `VISUAL_STYLE`) or the structured storyboard attachment fields where available.
- **Entities in the TypeScript, Python, and CLI clients:** `@videogen/sdk`, `videogen`, and `@videogen/cli` expose an `entities` resource with `listEntities`, `createEntity`, `getEntity`, `updateEntity`, `archiveEntity`, `addEntityReference`, and `removeEntityReference` (CLI: `videogen entities …`).
- **MCP:** The hosted MCP server now includes workflows, media tools, projects, files, entities, assistant, resources, and account tools. Connect with Sign in with VideoGen OAuth; see [MCP server](/libraries/mcp).- **Docs:** `llms.txt` and the API reference now cover Entities, Assistant routes, timeline interchange, supported languages, and `assistant_message.*` webhook events. Export docs document both `watermarkMode` and `endScreenMode` (set both to `NONE` with the Production API add-on to drop VideoGen branding).

### Changed

- **Breaking (SDKs / CLI only): `contentOutlineToVideo` removed.** TypeScript, Python, and the CLI no longer expose `contentOutlineToVideo` / `content_outline_to_video` / `content-outline-to-video`. Prefer `POST /v1/workflows/prompt-to-video-clip` or a narrated workflow such as script-to-video. Update any code that imported the removed methods.
- **Fix: API key creation when no team is selected.** Creating a developer API key no longer fails when no team is selected. Keys are attributed to your active team (or your personal team when needed).
- **Signed download URLs last 7 days.** Fresh `downloadUrl` / `thumbnailUrl` values (and matching `*ExpiresAt` fields) are valid for 7 days from when they were signed (previously 24 hours). Single-resource GETs still re-sign automatically when a URL is within an hour of expiring. Temporary files (`isTemporary` / `isOutputTemporary`) remain guaranteed for 24 hours only.

## July 23, 2026

## v2.0.5 — Timed-word transcripts, script-to-video scene ranges, and assistant API refinements

This release reshapes transcripts around timed words, exposes both the structured transcript and its plain text on file reads, adds caller-provided scene ranges to script-to-video, marks the upload transcript and voiceover scene-range fields as stable, and refines the Assistant API.

### Added

- **`transcriptText` on file reads:** `GET /v1/files/{fileId}` now returns a plain `transcriptText` string alongside the structured `transcript` object, for audio and video files that have a transcript. It is the flattened spoken text (no timing) and is `null` for images or when no transcript has been generated. Use `transcriptText` when you only need the words and `transcript` when you need per-word timing.
- **Scene ranges on script-to-video:** `POST /v1/workflows/script-to-video` accepts optional `scenes` (`SceneDescriptionRange[]`: `startSeconds`, `endSeconds`, `description`) to direct what appears on screen over absolute time ranges, matching the existing field on voiceover-to-video. Passed ranges override the automatic scene split only where they are defined; the workflow fills the gaps and keeps section boundaries off your range edges. Ranges must be sorted by `startSeconds` and non-overlapping, and timings may extend past the finished video (they are cropped). Omit to let the workflow choose visuals automatically.

### Changed

- **Breaking: transcripts are now timed `words` instead of `segments`.** The `Transcript` type used by the optional `transcript` on `POST /v1/files/upload` now carries `words` (`{ startSeconds, endSeconds, word }`) instead of `segments` (`{ startSeconds, endSeconds, text }`), with an optional `languageCode`. Each entry is a single spoken word, so caption timing is pinned at word granularity. Words must be sorted by `startSeconds` and non-overlapping. Update any upload requests that previously sent `segments`.
- **Breaking: `GET /v1/files/{fileId}` returns a structured `transcript`.** The `transcript` field is now a `Transcript` object (timed `words` plus optional `languageCode`) rather than a plain string. The previous plain-string value now lives on the new `transcriptText` field. `transcript` is `null` for images or when no transcript has been generated.
- **Pre-computed transcript on upload is stable.** The optional `transcript` field on `POST /v1/files/upload` is supported for production use. Provide it for an audio or video upload to skip re-transcription so caption timing matches your transcript exactly.
- **Voiceover scene ranges are stable.** The optional `scenes` field on `POST /v1/workflows/voiceover-to-video` is supported for production use. Ranges must be sorted by `startSeconds` and non-overlapping; omit to let the workflow choose visuals automatically.
- **Assistant message polling endpoint renamed:** `GET /v1/assistant/messages/{messageId}` is now `GET /v1/assistant-messages/{messageId}`, consistent with the other `/v1/assistants` routes. Update any hard-coded polling URLs; the SDKs, CLI, and `assistant_message.*` webhook subscribers are unaffected.
- **Nullable `assistantId` on projects:** `ProjectResponse.assistantId` is now nullable. New API projects include an assistant chat, so `assistantId` is set; older projects without one return `null`.
- **`generation` and `error` on assistant messages:** polled and webhook payloads now reliably include `generation` (the workflow run a turn kicked off) and `error` (on `failed` / `cancelled` turns).

_Showing the 20 most recent of 34 entries. Append `/llms.txt` to the changelog URL for the complete index._