Properties
| Name | Type | Description |
|---|---|---|
| script | string | The narration script, used verbatim. This exact text is narrated and turned into a video — it is not rewritten or expanded. |
| aspectRatio | object | |
| visualStyle | object | |
| visualPacing | object | |
| quality | object | Image generation quality tier for AI-generated visuals. Optional; when omitted, your account's Default AI quality for images is used (change it at https://app.videogen.io/settings/account). Only appli |
| language | string | Output language as a BCP-47 code (e.g. `en`, `es`, `fr`). Defaults to English. |
| voiceId | stringnull | Catalog `displayName` (e.g. `Matilda`) or voice id from `GET /v1/resources/tts-voices` (e.g. `vg_voic_...`). A default voice is used when omitted. Any voice may be used here, including voices where `s |
| voiceSpeed | number | Speech rate multiplier, between 0.5 (half speed) and 2 (double speed). Defaults to the voice's default speed. |
| actorEntityId | stringnull | Recommended. Optional id of a built-in stock actor or an ACTOR entity (e.g. `vg_enti_...`) with an image reference. When set, narration is delivered by that actor avatar. Omit or pass `null` for voice |
| avatarQuality | object | Avatar generation quality tier. Applies when `actorEntityId` is provided. Optional; when omitted, your account's Default AI quality for avatars is used. |
| featuredBRollFileIds | array | Optional file ids of images or videos to feature as b-roll (e.g. `["vg_file_..."]`). Upload files first via `POST /v1/files/upload`. Only image and video files are accepted. |
| workflowAgentContext | string | Optional production notes for the AI that builds the video — visual direction that should not appear in the spoken narration (e.g. on-screen code or text to display, specific b-roll to feature, or sce |
| scenes | array | Optional timed scene descriptions guiding what to show on screen during each absolute time range of the video. Ranges must be sorted by `startSeconds` and non-overlapping. Omit to let the workflow cho |
| remixActions | array | Optional edits applied to the project after the video is built, in order. Each action runs asynchronously; the response returns one remix action id per action. Recommended for script-to-video: `ENABLE |
| isOutputTemporary | boolean | When true, the video's generated OUTPUT files (AI images, video clips, voiceover audio, avatars) are created as temporary: guaranteed available for 24 hours, after which they may be archived and later |
| hideFromUi | boolean | When true, the project is hidden from Home and Projects by default, and generated files are hidden from the Media page. The project and files remain accessible through the API. Defaults to false. |
| autoExport | boolean | When true, VideoGen exports an MP4 after the video is built (and after any `remixActions` on this request finish). The workflow run stays `running` until that export succeeds or fails. On success, pol |
| exportOptions | object | Export settings used when `autoExport` is true. Ignored when `autoExport` is false. Omitted fields use the same defaults as `POST /v1/projects/{projectId}/export`. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/videogen-io/main/json-schema/videogen-io-script-to-video-request-schema.json",
"title": "ScriptToVideoRequest",
"x-generated": "2026-10-02",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/videogen-io-openapi.json#/components/schemas/ScriptToVideoRequest",
"type": "object",
"required": [
"script",
"visualStyle"
],
"properties": {
"script": {
"type": "string",
"description": "The narration script, used verbatim. This exact text is narrated and turned into a video — it is not rewritten or expanded."
},
"aspectRatio": {
"$ref": "#/$defs/AspectRatio"
},
"visualStyle": {
"$ref": "#/$defs/WorkflowVisualStyle"
},
"visualPacing": {
"$ref": "#/$defs/VisualPacing"
},
"quality": {
"$ref": "#/$defs/ModelQuality",
"description": "Image generation quality tier for AI-generated visuals. Optional; when omitted, your account's Default AI quality for images is used (change it at https://app.videogen.io/settings/account). Only applies when `visualStyle.type` is AI_IMAGE; STOCK pulls existing footage and is unaffected."
},
"language": {
"type": "string",
"description": "Output language as a BCP-47 code (e.g. `en`, `es`, `fr`). Defaults to English."
},
"voiceId": {
"type": [
"string",
"null"
],
"description": "Catalog `displayName` (e.g. `Matilda`) or voice id from `GET /v1/resources/tts-voices` (e.g. `vg_voic_...`). A default voice is used when omitted. Any voice may be used here, including voices where `supportsDirectToolExecution` is false."
},
"voiceSpeed": {
"type": "number",
"minimum": 0.5,
"maximum": 2,
"description": "Speech rate multiplier, between 0.5 (half speed) and 2 (double speed). Defaults to the voice's default speed."
},
"actorEntityId": {
"type": [
"string",
"null"
],
"description": "Recommended. Optional id of a built-in stock actor or an ACTOR entity (e.g. `vg_enti_...`) with an image reference. When set, narration is delivered by that actor avatar. Omit or pass `null` for voiceover without an avatar."
},
"avatarQuality": {
"$ref": "#/$defs/ModelQuality",
"description": "Avatar generation quality tier. Applies when `actorEntityId` is provided. Optional; when omitted, your account's Default AI quality for avatars is used."
},
"featuredBRollFileIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional file ids of images or videos to feature as b-roll (e.g. `[\"vg_file_...\"]`). Upload files first via `POST /v1/files/upload`. Only image and video files are accepted."
},
"workflowAgentContext": {
"type": "string",
"description": "Optional production notes for the AI that builds the video — visual direction that should not appear in the spoken narration (e.g. on-screen code or text to display, specific b-roll to feature, or scene-by-scene staging). Never spoken; keep the narration itself in `script`."
},
"scenes": {
"type": "array",
"items": {
"$ref": "#/$defs/SceneDescriptionRange"
},
"description": "Optional timed scene descriptions guiding what to show on screen during each absolute time range of the video. Ranges must be sorted by `startSeconds` and non-overlapping. Omit to let the workflow choose visuals automatically."
},
"remixActions": {
"type": "array",
"items": {
"$ref": "#/$defs/RemixAction"
},
"description": "Optional edits applied to the project after the video is built, in order. Each action runs asynchronously; the response returns one remix action id per action. Recommended for script-to-video: `ENABLE_CAPTIONS` to show and style captions, `CONVERT_IMAGES_TO_VIDEOS` to animate still images into clips, `ADD_TRANSITIONS` to stamp transitions between sections, and `SET_LOGO` to overlay a logo (this workflow has no native caption-style or logo fields). See the [Remix actions](/remix-actions) guide."
},
"isOutputTemporary": {
"type": "boolean",
"default": false,
"description": "When true, the video's generated OUTPUT files (AI images, video clips, voiceover audio, avatars) are created as temporary: guaranteed available for 24 hours, after which they may be archived and later deleted. This also covers files produced by post-build remix actions (e.g. generated background music, image-to-video conversions). Use this when your integration downloads or re-hosts the results itself and does not need VideoGen to retain them. The project and its metadata are unaffected. Defaults to false."
},
"hideFromUi": {
"type": "boolean",
"default": false,
"description": "When true, the project is hidden from Home and Projects by default, and generated files are hidden from the Media page. The project and files remain accessible through the API. Defaults to false."
},
"autoExport": {
"type": "boolean",
"default": false,
"description": "When true, VideoGen exports an MP4 after the video is built (and after any `remixActions` on this request finish). The workflow run stays `running` until that export succeeds or fails. On success, poll `GET /v1/workflows/runs/{workflowRunId}` and use `downloadUrl`. Defaults to false."
},
"exportOptions": {
"$ref": "#/$defs/ExportProjectRequest",
"description": "Export settings used when `autoExport` is true. Ignored when `autoExport` is false. Omitted fields use the same defaults as `POST /v1/projects/{projectId}/export`."
}
},
"$defs": {
"AspectRatio": {
"type": "object",
"required": [
"width",
"height"
],
"description": "Aspect ratio as a width:height pair (e.g. 16 and 9 for 16:9). Not pixel dimensions.",
"properties": {
"width": {
"type": "integer",
"minimum": 1
},
"height": {
"type": "integer",
"minimum": 1
}
}
},
"EndScreenMode": {
"type": "string",
"enum": [
"NONE",
"VIDEO_GEN",
"AUTO"
],
"default": "AUTO",
"description": "Controls whether a short 'Made with VideoGen' end screen is appended to the output. `AUTO` appends it unless you have a Pro plan. `VIDEO_GEN` always appends it. `NONE` removes it (requires Pro; returns an error if you don't have it)."
},
"ExportDeliveryDestination": {
"type": "object",
"required": [
"integrationConnectionId",
"type"
],
"properties": {
"integrationConnectionId": {
"type": "string",
"description": "Id of the connected integration that will receive this export."
},
"type": {
"type": "string",
"description": "Where to deliver the export within the connected integration.",
"enum": [
"SLACK_CHANNEL",
"GOOGLE_DRIVE_FOLDER"
]
},
"slackChannelId": {
"type": [
"string",
"null"
],
"description": "Target channel id. Required when `type` is `SLACK_CHANNEL`."
},
"googleDriveFolderId": {
"type": [
"string",
"null"
],
"description": "Target folder id. Required when `type` is `GOOGLE_DRIVE_FOLDER`."
}
}
},
"ExportProjectQuality": {
"type": "string",
"description": "Vertical resolution tier for the rendered MP4.",
"enum": [
"STANDARD",
"HIGH",
"FULL_HIGH",
"ULTRA_HIGH"
]
},
"ExportProjectRequest": {
"type": "object",
"properties": {
"quality": {
"$ref": "#/$defs/ExportProjectQuality"
},
"watermarkMode": {
"$ref": "#/$defs/WatermarkMode"
},
"endScreenMode": {
"$ref": "#/$defs/EndScreenMode"
},
"deliveryDestinations": {
"type": "array",
"description": "Destinations to deliver the finished export to when it completes, in addition to any delivery destinations already saved for the team. Each destination references a connected integration.",
"items": {
"$ref": "#/$defs/ExportDeliveryDestination"
}
}
}
},
"ModelQuality": {
"type": "string",
"enum": [
"LOW",
"STANDARD",
"HIGH",
"MAX"
],
"description": "AI generation quality tier, shared across every generative feature (image, video, text, and so on). `LOW` is fastest and cheapest, `STANDARD` balances quality and cost, `HIGH` is higher quality, and `MAX` is the highest quality.\n\nWhen a request omits the quality field, VideoGen falls back to your account's **Default AI quality** for that feature, which you can change at [Account settings](https://app.videogen.io/settings/account). Not every feature supports every tier; unsupported tiers are rejected with an error (see each field's description).\n"
},
"RemixAction": {
"description": "A single edit applied to a project. Each array entry is exactly one of the action types below, chosen by its `type` field; the variants are mutually-exclusive options, not fields you must all provide. Include only the actions you want.",
"oneOf": [
{
"$ref": "#/$defs/RemixActionSetBackgroundMusic"
},
{
"$ref": "#/$defs/RemixActionSetLogo"
},
{
"$ref": "#/$defs/RemixActionEnableCaptions"
},
{
"$ref": "#/$defs/RemixActionDisableCaptions"
},
{
"$ref": "#/$defs/RemixActionAddTransitions"
},
{
"$ref": "#/$defs/RemixActionAddZoom"
},
{
"$ref": "#/$defs/RemixActionResizeProject"
},
{
"$ref": "#/$defs/RemixActionCleanUpTranscript"
},
{
"$ref": "#/$defs/RemixActionConvertImagesToVideos"
},
{
"$ref": "#/$defs/RemixActionRegenerateImages"
},
{
"$ref": "#/$defs/RemixActionUpscaleAssets"
},
{
"$ref": "#/$defs/RemixActionChangeNarrator"
},
{
"$ref": "#/$defs/RemixActionShuffleStockVisuals"
},
{
"$ref": "#/$defs/RemixActionGenerateMusic"
},
{
"$ref": "#/$defs/RemixActionTranslateProject"
}
]
},
"RemixActionAddTransitions": {
"type": "object",
"required": [
"type"
],
"description": "Stamp transitions across the project. Not per-boundary: each field you set is applied uniformly to every boundary in that scope, replacing any transition already there. Set the transition between sections, between base-layer assets, or both; omit or pass `null` for a scope to leave its transitions untouched.",
"properties": {
"type": {
"type": "string",
"enum": [
"ADD_TRANSITIONS"
]
},
"sectionTransition": {
"description": "Transition applied at every boundary between sections, replacing any existing section transitions. Omit or pass `null` to leave section transitions untouched.",
"anyOf": [
{
"$ref": "#/$defs/RemixTransitionStyle"
},
{
"type": "null"
}
]
},
"assetTransition": {
"description": "Transition applied at every boundary between base-layer assets within sections, replacing any existing asset transitions. Omit or pass `null` to leave asset transitions untouched.",
"anyOf": [
{
"$ref": "#/$defs/RemixTransitionStyle"
},
{
"type": "null"
}
]
}
}
},
"RemixActionAddZoom": {
"type": "object",
"required": [
"type"
],
"description": "Apply a Ken Burns zoom to every eligible still image in the project, including uploaded images. Replaces any existing still-image effect on those assets. If the project has no eligible stills, the action is skipped and completes successfully without changing anything.",
"properties": {
"type": {
"type": "string",
"enum": [
"ADD_ZOOM"
]
}
}
},
"RemixActionChangeNarrator": {
"type": "object",
"required": [
"type",
"voiceId"
],
"description": "Re-narrate every AI-voiceover asset in the project with a new voice and optional actor avatar, replacing each narration in place. Runs asynchronously: text-to-speech is re-fired per asset with the original narration text. If the project has no AI-narrated assets, the action is skipped and completes successfully without changing anything.",
"properties": {
"type": {
"type": "string",
"enum": [
"CHANGE_NARRATOR"
]
},
"voiceId": {
"type": "string",
"description": "Catalog `displayName` (e.g. `Matilda`) or voice id from `GET /v1/resources/tts-voices` (e.g. `vg_voic_...`) to re-narrate with."
},
"actorEntityId": {
"type": [
"string",
"null"
],
"description": "Recommended. Optional id of a built-in stock actor or an ACTOR entity (e.g. `vg_enti_...`) with an image reference. When set, narration is delivered by that actor avatar. Omit or pass `null` for voiceover without an avatar."
},
"avatarQuality": {
"$ref": "#/$defs/ModelQuality",
"description": "Avatar generation quality tier. Applies when `actorEntityId` is provided. Optional; when omitted, your account's Default AI quality for avatars is used."
},
"voiceSpeed": {
"type": [
"number",
"null"
],
"minimum": 0.5,
"maximum": 2,
"description": "Speech rate multiplier, between 0.5 (half speed) and 2 (double speed). Omit or pass `null` to keep each asset's current speed."
}
}
},
"RemixActionCleanUpTranscript": {
"type": "object",
"required": [
"type"
],
"description": "Tighten every transcript in the project by removing silent pauses and/or filler words. Useful for polishing narration captured from raw recordings.",
"properties": {
"type": {
"type": "string",
"enum": [
"CLEAN_UP_TRANSCRIPT"
]
},
"removeFillers": {
"type": [
"boolean",
"null"
],
"description": "Remove filler words (\"um\", \"uh\", …). Defaults to `true`."
},
"removePauses": {
"type": [
"boolean",
"null"
],
"description": "Remove silent pauses longer than `minPauseSeconds`. Defaults to `true`."
},
"fillerWords": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "Override the filler-word list to remove. Omit or pass `null` to use the built-in defaults."
},
"minPauseSeconds": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Shortest pause (in seconds) to remove; pauses below this stay. Omit or pass `null` to use the default threshold."
}
}
},
"RemixActionConvertImagesToVideos": {
"type": "object",
"required": [
"type"
],
"description": "Animate every eligible still image in the project into a short AI video clip (image-to-video), replacing each image in place. Eligible images are non-SVG image assets backed by an uploaded or stock file. Runs asynchronously: one clip is generated per image. If the project has no eligible images, the action is skipped and completes successfully without changing anything (for example, a project whose timeline is already all video clips).",
"properties": {
"type": {
"type": "string",
"enum": [
"CONVERT_IMAGES_TO_VIDEOS"
]
},
"motionPrompt": {
"type": [
"string",
"null"
],
"description": "Describe the motion to apply to every image (e.g. \"slow cinematic push-in\"). Omit or pass `null` for automatic motion."
},
"muteOutputVideos": {
"type": [
"boolean",
"null"
],
"description": "Mute the generated clips and suppress generated background music. Recommended when the clips sit behind a voiceover. Defaults to `true`."
},
"quality": {
"$ref": "#/$defs/ModelQuality",
"description": "Video generation quality tier for the image-to-video conversions (`LOW`, `STANDARD`, `HIGH`, or `MAX`). Optional; when omitted, your account's Default AI quality for video is used (change it at https://app.videogen.io/settings/account)."
}
}
},
"RemixActionDisableCaptions": {
"type": "object",
"required": [
"type"
],
"description": "Hide captions on every captionable section.",
"properties": {
"type": {
"type": "string",
"enum": [
"DISABLE_CAPTIONS"
]
}
}
},
"RemixActionEnableCaptions": {
"type": "object",
"required": [
"type"
],
"description": "Show captions on every captionable section. Optionally override the project caption style.",
"properties": {
"type": {
"type": "string",
"enum": [
"ENABLE_CAPTIONS"
]
},
"captionStyle": {
"description": "Caption styling to apply. Omit or pass `null` to show captions with the current style. Any provided field overrides that field; omitted fields keep their current value.",
"anyOf": [
{
"$ref": "#/$defs/WorkflowCaptionStyle"
},
{
"type": "null"
}
]
}
}
},
"RemixActionGenerateMusic": {
"type": "object",
"required": [
"type",
"prompt"
],
"description": "Generate a background music track from a text prompt and set it as the project's background music, replacing any existing track. Runs asynchronously.",
"properties": {
"type": {
"type": "string",
"enum": [
"GENERATE_MUSIC"
]
},
"prompt": {
"type": "string",
"description": "Describe the music to generate (e.g. \"upbeat corporate background music with a driving beat\")."
}
}
},
"RemixActionRegenerateImages": {
"type": "object",
"required": [
"type",
"stylePrompt"
],
"description": "Restyle every eligible still image in the project to a new look (image-to-image), replacing each image in place. Eligible images are non-SVG image assets backed by an uploaded or generated file. Runs asynchronously: one restyled image is generated per eligible image. If the project has no eligible images, the action is skipped and completes successfully without changing anything.",
"properties": {
"type": {
"type": "string",
"enum": [
"REGENERATE_IMAGES"
]
},
"stylePrompt": {
"type": "string",
"description": "A full, strict paragraph for the look of every image (medium, texture, palette, then composition). Do not pass a short label such as `watercolor painting`. Image models pack the frame with text, charts, diagrams, and extra objects unless the style forbids that. Keep the picture simple: one uncluttered subject in the middle half of the frame, empty margins, and no on-image text or diagrams unless you asked for one specific word or number."
},
"quality": {
"$ref": "#/$defs/ModelQuality",
"description": "Image generation quality tier for the restyled images. Optional; when omitted, your account's Default AI quality for images is used (change it at https://app.videogen.io/settings/account)."
}
}
},
"RemixActionResizeProject": {
"type": "object",
"required": [
"type",
"aspectRatio"
],
"description": "Change the project's output aspect ratio (e.g. to a vertical 9:16 social format). The video is re-flowed to the new ratio.",
"properties": {
"type": {
"type": "string",
"enum": [
"RESIZE_PROJECT"
]
},
"aspectRatio": {
"$ref": "#/$defs/AspectRatio"
}
}
},
"RemixActionSetBackgroundMusic": {
"type": "object",
"required": [
"type"
],
"description": "Set, replace, or remove the project's background music track.",
"properties": {
"type": {
"type": "string",
"enum": [
"SET_BACKGROUND_MUSIC"
]
},
"fileId": {
"type": [
"string",
"null"
],
"description": "File id of an uploaded audio file to use as background music (e.g. `vg_file_...`). Upload it first via `POST /v1/files/upload`. Pass `null` to remove the existing background music."
},
"volume": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1,
"description": "Music volume from 0 (silent) to 1 (full). Omit or pass `null` to keep the current volume."
}
}
},
"RemixActionSetLogo": {
"type": "object",
"required": [
"type"
],
"description": "Set, replace, or remove the logo overlay.",
"properties": {
"type": {
"type": "string",
"enum": [
"SET_LOGO"
]
},
"fileId": {
"type": [
"string",
"null"
],
"description": "File id of an uploaded image to overlay as a logo (e.g. `vg_file_...`). Upload it first via `POST /v1/files/upload`. Pass `null` to remove the existing logo."
},
"position": {
"type": [
"string",
"null"
],
"enum": [
"TOP_LEFT",
"TOP_CENTER",
"TOP_RIGHT",
"BOTTOM_LEFT",
"BOTTOM_CENTER",
"BOTTOM_RIGHT",
null
],
"description": "Position the logo is anchored to. Omit or pass `null` to keep the current position."
},
"sizePercent": {
"type": [
"number",
"null"
],
"description": "Logo width as a percentage of the video width. Omit or pass `null` to keep the current size."
}
}
},
"RemixActionShuffleStockVisuals": {
"type": "object",
"required": [
"type"
],
"description": "Replace every stock (library) visual in the project with a fresh alternative from the same search, replacing each in place. Runs asynchronously: each stock asset's original search is re-run, excluding the currently-shown result. If the project has no shuffleable stock visuals, the action is skipped and completes successfully without changing anything.",
"properties": {
"type": {
"type": "string",
"enum": [
"SHUFFLE_STOCK_VISUALS"
]
}
}
},
"RemixActionTranslateProject": {
"type": "object",
"required": [
"type",
"languageCode"
],
"description": "Translate the whole project into another language: every piece of text (title, section names, on-screen text overlays, transcripts, and narration scripts) is translated, and — unless disabled — each AI voiceover is re-narrated in the new language. Runs asynchronously. Requires a Pro subscription. Retrieve the list of supported language codes from `GET /v1/resources/languages`.",
"properties": {
"type": {
"type": "string",
"enum": [
"TRANSLATE_PROJECT"
]
},
"languageCode": {
"type": "string",
"description": "Target language code to translate the project into (e.g. `es`, `fr`, `ja`). Must be one of the codes returned by `GET /v1/resources/languages`."
},
"changeVoice": {
"type": [
"boolean",
"null"
],
"description": "Swap each AI voiceover to a voice that natively matches the target language. Recommended, since keeping the original voice usually produces a foreign accent. Defaults to `true`."
},
"translateImageText": {
"type": [
"boolean",
"null"
],
"description": "Also re-generate every eligible image so that text baked into the image is translated too (image-to-image). Billed per generated image. Defaults to `false`."
}
}
},
"RemixActionUpscaleAssets": {
"type": "object",
"required": [
"type"
],
"description": "Sharpen every eligible asset in the project up to 4K, replacing each in place. Runs asynchronously: one upscaled asset is generated per eligible asset. If the project has no eligible assets, the action is skipped and completes successfully without changing anything.",
"properties": {
"type": {
"type": "string",
"enum": [
"UPSCALE_ASSETS"
]
},
"includeVideos": {
"type": [
"boolean",
"null"
],
"description": "Also upscale video assets (billed per output second). Defaults to `true`."
},
"includeStockContent": {
"type": [
"boolean",
"null"
],
"description": "Also upscale stock (library) assets, not just uploaded or generated ones. Defaults to `true`."
}
}
},
"RemixTransitionStyle": {
"type": "string",
"description": "A transition applied at a boundary. `DYNAMIC` auto-varies the style across boundaries; `NONE` removes transitions; the rest apply that fixed style everywhere.",
"enum": [
"DYNAMIC",
"NONE",
"FADE",
"RISE",
"PAN",
"POP",
"WIPE"
]
},
"SceneDescriptionRange": {
"type": "object",
"required": [
"startSeconds",
"endSeconds",
"description"
],
"description": "A description of the visuals to show during an absolute time range of the finished video.",
"properties": {
"startSeconds": {
"type": "number",
"minimum": 0,
"description": "Start time of the range in seconds from the beginning of the video."
},
"endSeconds": {
"type": "number",
"description": "End time of the range in seconds from the beginning of the video. Must be greater than `startSeconds`."
},
"description": {
"type": "string",
"description": "What should be shown on screen during this range (e.g. the b-roll subject, on-screen text, or staging)."
}
}
},
"VisualPacing": {
"type": "string",
"enum": [
"FAST",
"MEDIUM",
"SLOW"
],
"default": "MEDIUM",
"description": "How quickly visuals change. FAST shows more, shorter shots; SLOW holds each visual longer. Defaults to MEDIUM."
},
"WatermarkMode": {
"type": "string",
"enum": [
"NONE",
"VIDEO_GEN",
"AUTO"
],
"default": "AUTO",
"description": "Controls whether the VideoGen watermark is applied to the output. `AUTO` applies the watermark unless you have a Pro plan. `VIDEO_GEN` always applies it. `NONE` removes the watermark (requires Pro; returns an error if you don't have it)."
},
"WorkflowCaptionBackgroundStyle": {
"type": "object",
"required": [
"type",
"backgroundColor"
],
"description": "Background drawn behind caption text.",
"properties": {
"type": {
"type": "string",
"enum": [
"RECT",
"WRAPPED",
"WORD_BY_WORD"
],
"description": "RECT draws one rectangle behind the whole line; WRAPPED hugs the text; WORD_BY_WORD draws a box per word."
},
"backgroundColor": {
"$ref": "#/$defs/WorkflowRgbColor"
},
"borderRadiusProportion": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Corner rounding as a proportion of the background height, between 0 (square corners) and 1 (fully rounded)."
},
"opacityProportion": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Background opacity from 0 (transparent) to 1 (opaque)."
}
}
},
"WorkflowCaptionStyle": {
"type": "object",
"description": "Caption styling. Any omitted field falls back to the VideoGen default caption style. Provide an empty object (`{}`) to keep the default style but ensure captions are shown. Pass `null` for the whole `captionStyle` field to hide captions entirely.",
"properties": {
"fontName": {
"type": "string",
"description": "Font family name."
},
"fontSize": {
"type": "number",
"minimum": 1,
"description": "Font size in pixels at 1080p. Must be greater than 0."
},
"fontWeight": {
"type": "integer",
"enum": [
100,
200,
300,
400,
500,
600,
700,
800,
900
],
"description": "Numeric font weight (400 = regular, 700 = bold)."
},
"textColor": {
"$ref": "#/$defs/WorkflowRgbColor"
},
"textJustification": {
"type": "string",
"enum": [
"LEFT",
"CENTER",
"RIGHT"
]
},
"verticalAlignment": {
"type": "string",
"enum": [
"TOP",
"MIDDLE",
"BOTTOM"
],
"description": "Vertical position of the caption block in the frame."
},
"strokeColor": {
"description": "Outline color around glyphs, or null for no outline.",
"anyOf": [
{
"$ref": "#/$defs/WorkflowRgbColor"
},
{
"type": "null"
}
]
},
"strokeWeight": {
"type": "number",
"minimum": 0,
"description": "Outline thickness in pixels. 0 disables the outline."
},
"backgroundStyle": {
"description": "Background drawn behind the text, or null for no background.",
"anyOf": [
{
"$ref": "#/$defs/WorkflowCaptionBackgroundStyle"
},
{
"type": "null"
}
]
},
"spokenTextColor": {
"description": "Color applied to the currently spoken word for karaoke-style highlighting, or null to keep the base text color.",
"anyOf": [
{
"$ref": "#/$defs/WorkflowRgbColor"
},
{
"type": "null"
}
]
},
"spokenTextStrokeColor": {
"description": "Outline color applied to the currently spoken word, or null.",
"anyOf": [
{
"$ref": "#/$defs/WorkflowRgbColor"
},
{
"type": "null"
}
]
},
"persistSpokenTextColor": {
"type": "boolean",
"description": "When true, a word keeps the spoken-text color after it has been spoken instead of reverting."
}
# --- truncated at 32 KB (34 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/videogen-io/refs/heads/main/json-schema/videogen-io-script-to-video-request-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/videogen-io-script-to-video-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.