Skip to main content
Glama
thenavidm
by thenavidm

Shotstack MCP Server & CLI

npm CI License YouTube X LinkedIn

Shotstack MCP server and CLI for Codex and AI agents. 23 tools for current rendering, templates, generation models, Serve and Ingest, with private accounts and explicit mutation approval. One shared implementation supplies both binaries and a desktop bundle.

Built and maintained by Navid Moazzez. Built on Slipway, which turns one definition of each tool into the MCP server and the CLI. The complete guide is on navid.me.

The terminal illustrates real command names and approval flow. It is not a recording of a paid provider render. Shotstack already has official CLI/local/hosted MCP products; their Studio and semantic validation are compared below.

Requires Node 22+ and eligible Shotstack API access for account operations. Validation: fixture tests, schema validation and protocol/artifact discovery are separate from provider-account rendering and desktop GUI outcomes, which are not claimed. Section 7 has the measured token costs.

Two ways to use it

Command line

npm install -g @thenavidm/shotstack-mcp-cli@latest
shotstack-cli
shotstack-cli list-models --agent
shotstack-cli schema render
shotstack-cli render --payload-file /absolute/private/approved-edit.json --account sandbox --confirm --agent

--confirm authorizes the specific requested operation. --agent and --yes do not supply consent or a provider credit cap.

MCP server, for your AI app

codex mcp add shotstack -- npx -y @thenavidm/shotstack-mcp-cli@latest

Configure private credentials/environment first. Ask: “Inspect this existing render and return its status; do not submit another render.” Client and OS details are in INSTALL.md.

Which one

Where you work

Surface

Codex or an agent with shell access

Local MCP, shared CLI or both

Desktop chat

Compatible local MCP or .mcpb

Scripts/CI

CLI or an MCP client

Remote-URL-only chat

Official provider-hosted MCP

Related MCP server: Gantry

Features

Capability

CLI command

MCP tool

Render and status

render / get-render

render / get_render

Templates

create-template / list-templates / render-template

create_template / list_templates / render_template

Generation models and jobs

list-models / generate-asset / get-generated-asset

list_models / generate_asset / get_generated_asset

Hosted assets

get-asset / transfer-asset

get_asset / transfer_asset

Ingest sources

ingest-source / list-sources / get-source

ingest_source / list_sources / get_source

Private upload credential

create-upload-url-file

create_upload_url_file

Account/environment labels

list-accounts

list_accounts

Configuration checks

doctor / login

CLI utilities

Contents

Number

Section

What it covers

1

What you can ask it

Practical tasks

2

Quick install

MCP/CLI/desktop

3

Set up Shotstack access

Keys, environments, credits

4

Connect your client

All client/OS routes

5

Check it works

Doctor and first read

6

Output, flags and exit codes

Flags and scripting

7

MCP or CLI and token cost

Actual measurement method

8

Every tool and argument

Every route/argument

9

Render, template, generation and media workflows

Native workflow inputs

10

Jobs, pagination and private files

Status and private credential files

11

Several private accounts

Isolated named profiles

12

Writing safely

Approval and direct-call policies

13

How it works

Shared architecture and sync

14

Your data

Credentials and provider processing

15

Environment variables

Private settings and bounds

16

Updates and removal

Upgrade/revoke/uninstall

17

Troubleshooting

Errors and recovery

18

API coverage and comparisons

Official and community tradeoffs

19

Versions

Release history and migration

20

FAQ

Accordion answers

1. What you can ask it

  • Inspect my available generation models before choosing a supported asset.

  • Read this existing render's status; do not submit a duplicate.

  • Prepare a reviewed timeline and submit only the approved sandbox render.

  • Save this template, then render it with the merge values I selected.

  • Ingest this selected public source URL after confirmation.

  • Create an upload URL, keeping its temporary credential in my private file.

  • Inspect a hosted asset and confirm its exact ID before deletion.

Actual discovery supplies 23 tools: 12 reads and 11 confirmed account operations. The same handlers serve MCP and CLI. Read-only discovery and direct-call refusal agree. These checks do not establish successful provider rendering or GUI installation.

2. Quick install

npm install -g @thenavidm/shotstack-mcp-cli@latest
shotstack-cli --version
shotstack-cli login
shotstack-cli doctor
shotstack-cli tools

Node 22+ is required for manual installation. The shotstack-3.0.0.mcpb archive bundles production dependencies for a compatible desktop host. Complete setup is in INSTALL.md.

After configuring private local credentials:

codex mcp add shotstack -- npx -y @thenavidm/shotstack-mcp-cli@latest
codex mcp list

3. Set up Shotstack access

Private API keys and environments

  1. Sign in to your intended account at app.shotstack.io, open the account menu and choose API Keys.

  2. Select the sandbox or production key for the task. Set SHOTSTACK_ENV=stage or v1 to match. Production is the default; a sandbox key does not turn production URLs into sandbox URLs.

  3. Save the key in an owner-only token file outside repositories. Set SHOTSTACK_TOKEN_FILE to its absolute path. SHOTSTACK_API_KEY in private local settings is the alternative.

  4. Run shotstack-cli doctor, then doctor --network. The network check requests available generation models and does not print their content.

  5. Read the selected schema, review the exact edit/account action and confirm only that operation. Do not submit a production render merely to test installation.

Requests use x-api-key on the fixed api.shotstack.io origin, with /edit, /serve or /ingest and the selected /stage or /v1 prefix. This package does not accept arbitrary API hosts, forward keys through redirects or perform OAuth. login prints setup instructions; it neither saves keys nor creates accounts.

On macOS/Linux, use a private directory (0700) and regular token-only file (0600). Windows users must restrict the file's ACL to their user; POSIX mode checking does not establish Windows ACL protection. Token files cannot be symlinks or exceed 64 KB. They override environment keys and are cached until restart. GUI settings may differ from your shell environment.

Access, plans, credits and limits

The wrapper is free AGPL software. Shotstack access, rendering, generated assets, storage and serving follow the provider's account terms. No account role or OAuth scope bypass is supplied. Request API keys and check your dashboard's balance and current plan before approving charges.

The provider currently documents ten new-account credits valid for 30 days, with no credit card required. Sandbox renders are watermarked, limited to ten minutes and require at least one credit in the balance. AI generation in sandbox still consumes credits. Production rendering is billed by output duration; this wrapper is not a spending or money cap.

Rate limits use a fixed 60-second window per API key, across all plans. Current production/sandbox request limits are Edit 300/150, Serve 600/300 and Ingest 300/120. Wait for the window reset after 429; do not immediately repeat a render.

The local default 150 ms pacing is per account label/process, not a provider quota reservation. Shared keys in several processes still share quota. Mutations never retry automatically. GET 429 retries require an explicit Retry-After of at most ten seconds; missing/longer delays return exit 7. The default maximum is two retries and configurable upper bound five.

Current source limits are 5 GB per file and 10 GB combined source/output disk usage. Local request JSON has a separate 5 MiB cap and responses a 10 MiB cap. The wrapper does not upload local media bytes or automatically collect all pages. Check credit consumption for the selected current model and hosting charges.

Revoke and rotate

Rotate or revoke the intended key through your account's API Keys controls, update private client settings, and restart. Remove the client entry when disconnecting. npm removal does not revoke the provider key, undo renders, remove hosted assets or delete private output files. Keep account records and signed URLs out of GitHub issues and public logs.

4. Connect your client

INSTALL.md provides Codex-first configuration plus optional Claude Code, Claude Desktop archive/manual setup, Cursor, VS Code/Copilot, Windsurf, Zed, Gemini CLI, Cline and Docker. Use Node 22+ on macOS, Windows or Linux; GUI settings and remote development environments need their own accessible private credentials.

Manual MCP launches npx with arguments -y and @thenavidm/shotstack-mcp-cli@latest over stdio. This package has no public HTTP relay. Remote-only clients can use the official https://mcp.shotstack.io/ service with its supported OAuth/API-key setup.

npm installation ships SKILL.md but does not register an agent skill. Add the shipped file through the client's supported skill location. Client approvals and confirm=true are separate; the guard requires the exact requested mutation, not consent inferred from returned content.

5. Check it works

shotstack-cli --version
shotstack-cli doctor
shotstack-cli doctor --network
shotstack-cli list-accounts --agent
shotstack-cli list-models --agent

Help, schemas, discovery and account labels work without a provider key. Network doctor requests GET /edit/{environment}/models without returning its content. Success establishes that account request, not every rendering model or endpoint. Full discovery exposes 23 tools; read-only exposes 12.

For an existing selected render, use get-render --id REAL_RENDER_ID. A job status read should not create a new render. Missing credentials exits 10; invalid input and refused writes exit 2.

6. Output, flags and exit codes

Tool results go to stdout. Errors are JSON on stderr. Reads and generation return structured JSON, so --select can retain nested fields.

shotstack-cli render --help
shotstack-cli schema render
shotstack-cli get-render --id REAL_RENDER_ID --agent --select response.status,response.url

Flag

What it does

--json

JSON output

--compact

Single-line JSON

--agent

Compact JSON and no prompts; never confirms a write

--select a,b.c

Keep selected fields; dotted paths descend and arrays are traversed

--confirm

Confirm the requested paid media operation

--no-input, --no-color, --yes

Automation switches; none overrides the spending guard

--wait=false

Return an accepted job instead of polling

--download

Save completed media locally; requires waiting for completion

Global output flags apply to tool commands. doctor has its own --network option and returns a JSON diagnostic.

Exit code

Meaning

What a script should do

0

Success

Read stdout

1

Unexpected error

Report it with the command that caused it

2

Usage, invalid input, a refused write, an unknown command or a hidden write

Fix the input or confirm only the requested action

3

Job or local upload file not found

Check the ID/path

4

Authentication or entitlement rejected

Check private credential settings and permissions

5

API, network or polling failure

Inspect an accepted job before another paid submission

7

Rate limited

Wait; do not loop over paid submissions

10

Credentials not configured

Complete local setup

The underscore spelling also works. generate_asset and generate-asset call the same tool. Nested objects use quoted JSON. Arrays of objects use repeated flags, one JSON object at a time.

7. MCP or CLI and token cost

MCP and CLI use the same input schemas, handlers and confirmation guard: Slipway builds the MCP server, over stdio or --http, and the CLI from each tool's one definition; there is no second API implementation. Choose shell calls for scripts and the local MCP for a stdio AI client.

Measured on 2026-10-05 against 2.0.2, with Claude Code 2.1.286 on Claude Opus 5.5 (one short prompt with and without the server connected, the difference read from the API's own usage figures) and Codex 0.159.3 on gpt-6.1-sol:

Cost

2.0.2

3.0.0

Claude Code, every tool loaded, every message

287,446

154,114

Claude Code's default, tool search, every message

482

480

SKILL.md, read once

1,207

1,266

Codex over the CLI, one task, median of five

105,563

83,947

Codex over MCP, the same task, median of five

46,793

47,033

The task was "find the command that renders a template, and the flags it requires". Every tool loaded costs about half as much because Shotstack's edit schema spelled out its clip, track and asset types everywhere they appear, and each is now written once. Over the CLI, four 3.0.0 runs asked which render template, whose answer carries the command's help, where every 2.0.2 run read the command list and then the help: one request fewer. Over MCP, Codex now prints each destination transfer_asset can send a file to, where it printed 2.0.2's as Array<unknown>, 2,039 characters more, while seven other tools print shorter. SKILL.md costs 59 more because it says how approval works over MCP and what exit codes 1 and 2 cover.

Tool-list bytes or characters divided by four are not API usage, and no other offering was measured.

Local --select trims output after receipt; it does not change provider response size or quota. Provider credits remain separate from model tokens.

8. Every tool and argument

Every route and argument below comes from actual stdio discovery and reviewed current upstream schemas. Read exact nested definitions with shotstack-cli schema COMMAND before constructing a body. Native body names, arrays, unions and enums remain exact.

Tool

Route

Mode

render

POST /edit/{environment}/render

Confirm requested operation

get_render

GET /edit/{environment}/render/{id}

Read

create_template

POST /edit/{environment}/templates

Confirm requested operation

list_templates

GET /edit/{environment}/templates

Read

get_template

GET /edit/{environment}/templates/{id}

Read

update_template

PUT /edit/{environment}/templates/{id}

Confirm requested operation

delete_template

DELETE /edit/{environment}/templates/{id}

Confirm requested operation

render_template

POST /edit/{environment}/templates/render

Confirm requested operation

probe_media

GET /edit/{environment}/probe/{url}

Read

generate_asset

POST /edit/{environment}/generate

Confirm requested operation

get_generated_asset

GET /edit/{environment}/generate/{id}

Read

list_models

GET /edit/{environment}/models

Read

get_model

GET /edit/{environment}/models/{id}

Read

get_asset

GET /serve/{environment}/assets/{id}

Read

delete_asset

DELETE /serve/{environment}/assets/{id}

Confirm requested operation

get_asset_by_render_id

GET /serve/{environment}/assets/render/{id}

Read

transfer_asset

POST /serve/{environment}/assets

Confirm requested operation

ingest_source

POST /ingest/{environment}/sources

Confirm requested operation

list_sources

GET /ingest/{environment}/sources

Read

get_source

GET /ingest/{environment}/sources/{id}

Read

delete_source

DELETE /ingest/{environment}/sources/{id}

Confirm requested operation

create_upload_url_file

POST /ingest/{environment}/upload

Confirm requested operation

list_accounts

Local, no network

Read

render

shotstack-cli render

Argument

Required

Type

Details

timeline

No; body and guard rules apply

Timeline

See the full input schema.

output

No; body and guard rules apply

Output

See the full input schema.

merge

No; body and guard rules apply

array

An array of key/value pairs that provides an easy way to create templates with placeholders. The placeholders can be used to find and replace keys with values. For example you can search for the placeholder {{NAME}} and replace it with the value Jane. Items: MergeField.

callback

No; body and guard rules apply

string

An optional webhook callback URL used to receive status notifications when a render completes or fails. Notifications are also sent when a rendered video is sent to an output destination. See webhooks for more details.

disk

No; body and guard rules apply

string

Notice: This option is now deprecated and will be removed. Disk types are handled automatically. Setting a disk type has no effect. The disk type to use for storing footage and assets for each render. local - optimized for high speed rendering with up to 512MB storage mount - optimized for larger file sizes and longer videos with 5GB for source footage and 512MB for output render Values: local, mount.

instance

No; body and guard rules apply

string

The render instance type to use for processing the edit. s1 - standard instance (default) s2 - standard instance with more resources a1 - accelerated instance for faster rendering Values: s1, s2, a1. default: s1.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

confirm

No; body and guard rules apply

boolean

Set true only when the user asked for exactly this action.

payload

No; body and guard rules apply

object

Complete JSON request body instead of body flags. Preserves current endpoint fields and values.

payload_file

No; body and guard rules apply

string

Regular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload. minLength: 1.

A body is required. Use native body flags or one complete payload/payload_file; these cannot be mixed. Required body fields: timeline, output.

get_render

shotstack-cli get-render

Argument

Required

Type

Details

id

Yes

string

Exact resource ID from the selected account. minLength: 1.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

create_template

shotstack-cli create-template

Argument

Required

Type

Details

name

No; body and guard rules apply

string

The template name

template

No; body and guard rules apply

Edit

See the full input schema.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

confirm

No; body and guard rules apply

boolean

Set true only when the user asked for exactly this action.

payload

No; body and guard rules apply

object

Complete JSON request body instead of body flags. Preserves current endpoint fields and values.

payload_file

No; body and guard rules apply

string

Regular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload. minLength: 1.

A body is required. Use native body flags or one complete payload/payload_file; these cannot be mixed. Required body fields: name.

list_templates

shotstack-cli list-templates

Argument

Required

Type

Details

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

get_template

shotstack-cli get-template

Argument

Required

Type

Details

id

Yes

string

Exact resource ID from the selected account. minLength: 1.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

update_template

shotstack-cli update-template

Argument

Required

Type

Details

id

Yes

string

Exact resource ID from the selected account. minLength: 1.

name

No; body and guard rules apply

string

The template name

template

No; body and guard rules apply

Edit

See the full input schema.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

confirm

No; body and guard rules apply

boolean

Set true only when the user asked for exactly this action.

payload

No; body and guard rules apply

object

Complete JSON request body instead of body flags. Preserves current endpoint fields and values.

payload_file

No; body and guard rules apply

string

Regular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload. minLength: 1.

A body is required. Use native body flags or one complete payload/payload_file; these cannot be mixed. Required body fields: name.

delete_template

shotstack-cli delete-template

Argument

Required

Type

Details

id

Yes

string

Exact resource ID from the selected account. minLength: 1.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

confirm

No; body and guard rules apply

boolean

Set true only when the user asked for exactly this action.

render_template

shotstack-cli render-template

Argument

Required

Type

Details

id

No; body and guard rules apply

string

The id of the template to render in UUID format.

merge

No; body and guard rules apply

array

An array of key/value pairs that provides an easy way to create templates with placeholders. The placeholders can be used to find and replace keys with values. For example you can search for the placeholder {{NAME}} and replace it with the value Jane. Items: MergeField.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

confirm

No; body and guard rules apply

boolean

Set true only when the user asked for exactly this action.

payload

No; body and guard rules apply

object

Complete JSON request body instead of body flags. Preserves current endpoint fields and values.

payload_file

No; body and guard rules apply

string

Regular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload. minLength: 1.

A body is required. Use native body flags or one complete payload/payload_file; these cannot be mixed. Required body fields: id.

probe_media

shotstack-cli probe-media

Argument

Required

Type

Details

url

Yes

string

Public HTTPS URL of the selected media file. minLength: 1. format: uri. pattern: ^https://.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

generate_asset

shotstack-cli generate-asset

Argument

Required

Type

Details

idempotency_key

No; body and guard rules apply

string

A key that makes this request its own generation. Retrying with the same key returns the job it first created instead of generating and billing again, and a new key generates afresh even when the asset matches an earlier one. Without a key, identical assets share one cached result. For 24 hours a key reused for a different asset is rejected; after that it returns its first result.

asset

No; body and guard rules apply

GenerationAsset

See the full input schema.

length

No; body and guard rules apply

number

The length, in seconds, of the clip the asset fills. A model that generates to a duration takes it from this value in place of its own duration option. Other models ignore it.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

confirm

No; body and guard rules apply

boolean

Set true only when the user asked for exactly this action.

payload

No; body and guard rules apply

object

Complete JSON request body instead of body flags. Preserves current endpoint fields and values.

payload_file

No; body and guard rules apply

string

Regular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload. minLength: 1.

A body is required. Use native body flags or one complete payload/payload_file; these cannot be mixed. Required body fields: asset.

get_generated_asset

shotstack-cli get-generated-asset

Argument

Required

Type

Details

id

Yes

string

Exact resource ID from the selected account. minLength: 1.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

list_models

shotstack-cli list-models

Argument

Required

Type

Details

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

get_model

shotstack-cli get-model

Argument

Required

Type

Details

id

Yes

string

Exact resource ID from the selected account. minLength: 1.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

get_asset

shotstack-cli get-asset

Argument

Required

Type

Details

id

Yes

string

Exact resource ID from the selected account. minLength: 1.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

delete_asset

shotstack-cli delete-asset

Argument

Required

Type

Details

id

Yes

string

Exact resource ID from the selected account. minLength: 1.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

confirm

No; body and guard rules apply

boolean

Set true only when the user asked for exactly this action.

get_asset_by_render_id

shotstack-cli get-asset-by-render-id

Argument

Required

Type

Details

id

Yes

string

Exact resource ID from the selected account. minLength: 1.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

transfer_asset

shotstack-cli transfer-asset

Argument

Required

Type

Details

url

No; body and guard rules apply

string

The file URL to fetch and transfer.

id

No; body and guard rules apply

string

An identifier for the asset which must be provided by the client. The identifier does not need to be unique.

destinations

No; body and guard rules apply

array

Specify the storage locations and hosting services to send the file to. Items: Destinations.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

confirm

No; body and guard rules apply

boolean

Set true only when the user asked for exactly this action.

payload

No; body and guard rules apply

object

Complete JSON request body instead of body flags. Preserves current endpoint fields and values.

payload_file

No; body and guard rules apply

string

Regular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload. minLength: 1.

A body is required. Use native body flags or one complete payload/payload_file; these cannot be mixed. Required body fields: url, id, destinations.

ingest_source

shotstack-cli ingest-source

Argument

Required

Type

Details

url

No; body and guard rules apply

string

The URL of the file to be ingested. The URL must be publicly accessible or include credentials.

outputs

No; body and guard rules apply

Outputs

See the full input schema.

destinations

No; body and guard rules apply

Destinations

See the full input schema.

callback

No; body and guard rules apply

string

An optional webhook callback URL used to receive status notifications when sources are uploaded and renditions processed.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

confirm

No; body and guard rules apply

boolean

Set true only when the user asked for exactly this action.

payload

No; body and guard rules apply

object

Complete JSON request body instead of body flags. Preserves current endpoint fields and values.

payload_file

No; body and guard rules apply

string

Regular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload. minLength: 1.

A body is required. Use native body flags or one complete payload/payload_file; these cannot be mixed. Required body fields: .

list_sources

shotstack-cli list-sources

Argument

Required

Type

Details

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

get_source

shotstack-cli get-source

Argument

Required

Type

Details

id

Yes

string

Exact resource ID from the selected account. minLength: 1.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

delete_source

shotstack-cli delete-source

Argument

Required

Type

Details

id

Yes

string

Exact resource ID from the selected account. minLength: 1.

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

confirm

No; body and guard rules apply

boolean

Set true only when the user asked for exactly this action.

create_upload_url_file

shotstack-cli create-upload-url-file

Argument

Required

Type

Details

account

No; body and guard rules apply

string

Named private Shotstack account; selects private credentials and stage/v1 environment.

confirm

No; body and guard rules apply

boolean

Set true only when the user asked for exactly this action.

secret_result_file

Yes

string

New absolute JSON file in a private owner-only directory. Signed upload URL stays out of model output; no overwrite. minLength: 1.

The output file must be new and absolute, in a private directory. It is reserved exclusively before the API call; the signed URL is never returned in model output. This command creates a temporary upload credential; it does not upload file bytes.

list_accounts

shotstack-cli list-accounts

Argument

Required

Type

Details

None

No

None

No arguments

Nested request definitions

The following definitions are shared by the request schemas. oneOf selects one validated asset branch; $ref names point to the definition heading here. Required fields are specific to the selected branch. Any deeper inline shape remains available through schema COMMAND.

Timeline

A timeline represents the contents of a video edit over time, an audio edit over time, in seconds, or an image layout. A timeline consists of layers called tracks. Tracks are composed of titles, images, audio, html or video segments referred to as clips which are placed along the track at specific starting point and lasting for a specific amount of time.

Argument

Required

Type

Details

soundtrack

No; body and guard rules apply

Soundtrack

A music or audio soundtrack file in mp3 format. Deprecated - use an AudioAsset clip on its own track instead.

background

No; body and guard rules apply

string

A hexadecimal value for the timeline background colour. Defaults to #000000 (black).

fonts

No; body and guard rules apply

array

An array of custom fonts to be downloaded for use by the HTML assets. Items: Font.

tracks

Yes

array

A timeline consists of an array of tracks, each track containing clips. Tracks are layered on top of each other in the same order they are added to the array with the top most track layered over the top of those below it. Ensure that a track containing titles is the top most track so that it is displayed above videos and images. minItems: 1. Items: Track.

cache

No; body and guard rules apply

boolean

Disable the caching of ingested source footage and assets. See caching for more details.

Soundtrack

Notice: The Soundtrack is deprecated, use an AudioAsset clip on its own track instead. This type continues to function; no behaviour change for existing integrations. A music or audio file in mp3 format that plays for the duration of the rendered video or the length of the audio file, which ever is shortest.

Argument

Required

Type

Details

src

Yes

string

The URL of the mp3 audio file. The URL must be publicly accessible or include credentials. minLength: 1. pattern: \S.

effect

No; body and guard rules apply

string

The effect to apply to the audio file fadeIn - fade volume in only fadeOut - fade volume out only fadeInFadeOut - fade volume in and out Values: fadeIn, fadeOut, fadeInFadeOut.

volume

No; body and guard rules apply

number

Set the volume for the soundtrack between 0 and 1 where 0 is muted and 1 is full volume (defaults to 1).

Font

Download a custom font to use with the HTML asset type, using the font name in the CSS or font tag. See our custom fonts getting started guide for more details.

Argument

Required

Type

Details

src

Yes

string

The URL of the font file. The URL must be publicly accessible or include credentials.

Track

A track contains an array of clips. Tracks are layered on top of each other in the order in the array. The top most track will render on top of those below it.

Argument

Required

Type

Details

clips

Yes

array

An array of Clips comprising of TitleClip, ImageClip or VideoClip. minItems: 1. Items: Clip.

Clip

A clip is a container for a specific type of asset, i.e. a title, image, video, audio or html. You use a Clip to define when an asset will display on the timeline, how long it will play for and transitions, filters and effects to apply to it.

Argument

Required

Type

Details

id

No; body and guard rules apply

string

Optional client-generated identifier. Used by client SDKs (e.g. the Shotstack Studio SDK) to reference a clip across edits without relying on its position in the timeline. The render API does not use this field and it does not appear in render output.

asset

Yes

Asset

See the full input schema.

start

Yes

Union

The start position of the Clip on the timeline.

length

Yes

Union

The duration the Clip should play for.

fit

No; body and guard rules apply

string

Set how the asset should be scaled to fit the viewport using one of the following options: crop (default) - scale the asset to fill the viewport while maintaining the aspect ratio. The asset will be cropped if it exceeds the bounds of the viewport. cover - stretch the asset to fill the viewport without maintaining the aspect ratio. contain - fit the entire asset within the viewport while maintaining the original aspect ratio. none - preserves the original asset dimensions and does not apply any scaling. Values: cover, contain, crop, none.

scale

No; body and guard rules apply

Union

Scale the asset to a fraction of the viewport size - i.e. setting the scale to 0.5 will scale asset to half the size of the viewport. This is useful for picture-in-picture video and scaling images such as logos and watermarks. Use a number or an array of Tween objects to create a custom animation.

width

No; body and guard rules apply

number

Set the width of the clip bounding box in pixels. This constrains the width of the clip, overriding the default behavior where clips fill the viewport width. minimum: 1. maximum: 3840. format: float.

height

No; body and guard rules apply

number

Set the height of the clip bounding box in pixels. This constrains the height of the clip, overriding the default behavior where clips fill the viewport height. minimum: 1. maximum: 2160. format: float.

position

No; body and guard rules apply

string

Place the asset in one of nine predefined positions of the viewport. This is most effective for when the asset is scaled and you want to position the element to a specific position. top - top (center) topRight - top right right - right (center) bottomRight - bottom right bottom - bottom (center) bottomLeft - bottom left left - left (center) topLeft - top left center - center Values: top, topRight, right, bottomRight, bottom, bottomLeft, left, topLeft, center.

offset

No; body and guard rules apply

Offset

Offset the location of the asset relative to its position on the viewport. The offset distance is relative to the width of the viewport - for example an x offset of 0.5 will move the asset half the viewport width to the right.

transition

No; body and guard rules apply

Transition

See the full input schema.

effect

No; body and guard rules apply

string

A motion effect to apply to the Clip. zoomIn - slow zoom in zoomOut - slow zoom out slideLeft - slow slide (pan) left slideRight - slow slide (pan) right slideUp - slow slide (pan) up slideDown - slow slide (pan) down The motion effect speed can also be controlled by appending Fast or Slow to the effect, e.g. zoomInFast or slideRightSlow. Values: zoomIn, zoomInSlow, zoomInFast, zoomOut, zoomOutSlow, zoomOutFast, slideLeft, slideLeftSlow, slideLeftFast, slideRight, slideRightSlow, slideRightFast, slideUp, slideUpSlow, slideUpFast, slideDown, slideDownSlow, slideDownFast.

filter

No; body and guard rules apply

string

A filter effect to apply to the Clip. none - no filter applied blur - blur the scene boost - boost contrast and saturation contrast - increase contrast darken - darken the scene greyscale - remove colour lighten - lighten the scene muted - reduce saturation and contrast negative - negative colors Values: none, blur, boost, contrast, darken, greyscale, lighten, muted, negative.

opacity

No; body and guard rules apply

Union

Offset an asset on the horizontal axis (left or right). Use a number or an array of Tween objects to create a custom animation.

transform

No; body and guard rules apply

Transformation

A transformation lets you modify the visual properties of a clip. Available transformations are rotate, skew and flip. Transformations can be combined to create interesting new shapes and effects.

alias

No; body and guard rules apply

string

A unique identifier for this clip that can be used to reference it from other clips using the alias:// protocol in asset sources. This is useful for features like auto-captioning where a caption asset needs to reference the audio from another clip. pattern: ^[A-Za-z0-9_-]+$.

Asset

The type of asset to display for the duration of the Clip, i.e. a video clip or an image. Choose from one of the available asset types below.

oneOf: VideoAsset, ImageAsset, TextAsset, RichTextAsset, AudioAsset, LumaAsset, CaptionAsset, RichCaptionAsset, HtmlAsset, Html5Asset, TitleAsset, ShapeAsset, SvgAsset, TextToImageAsset, ImageToVideoAsset, TextToSpeechAsset.

Type: object.

VideoAsset

The VideoAsset adds a video to a Clip. The video can be sourced from a URL (src), generated from a text prompt (prompt), or both. At least one of src or prompt must be provided. - Source URL: set src to the URL of an mp4 (or compatible) video file. - Generated: set prompt to describe the motion. Choose a generator with model and configure it with model-specific options. Models that animate an image take it as options.startSrc (the original image-to-video models use options.inputSrc); the default model generates from the prompt alone. The generated src is filled in automatically. - Both: src acts as a preview placeholder while prompt drives generation — the video is regenerated from the prompt at render time. Unchanged prompts and options resolve from the generation cache.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to video for videos. Values: video. default: video.

src

No; body and guard rules apply

string

The video source URL. The URL must be publicly accessible or include credentials. When prompt is also set, src serves as a preview placeholder and the video is regenerated from the prompt at render time. minLength: 1. pattern: \S.

prompt

No; body and guard rules apply

string

A text prompt to generate the video from. The engine generates a video at render time and fills src automatically; an existing src is treated as a preview placeholder and replaced. Use model to choose the generator and options to configure it. A starting image goes in options.startSrc — or options.inputSrc on the original image-to-video models — on the models that accept one. maxLength: 4000.

model

No; body and guard rules apply

string

The generation model to use when prompt is set (e.g. seedance-2.0-text-to-video). Defaults to seedance-2.0-text-to-video if omitted. GET /models lists what is available and the options each accepts.

options

No; body and guard rules apply

object

Model-specific generation settings. Valid keys and values depend on the chosen model and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.

transcode

No; body and guard rules apply

boolean

Set to true to force re-encoding of the video during preprocessing. This can help resolve compatibility issues, fix rotation problems, synchronize audio, or convert formats. The video will be processed to ensure optimal compatibility with the rendering engine.

trim

No; body and guard rules apply

number

The start trim point of the video clip, in seconds (defaults to 0). Videos will start from the in trim point. The video will play until the file ends or the Clip length is reached.

volume

No; body and guard rules apply

Union

Set the volume of the video clip. Use a number or an array of Tween objects to create custom volume transitions.

volumeEffect

No; body and guard rules apply

string

Preset volume effects to apply to the video asset fadeIn - fade volume in only fadeOut - fade volume out only fadeInFadeOut - fade volume in and out Values: none, fadeIn, fadeOut, fadeInFadeOut.

speed

No; body and guard rules apply

Union

Adjust the playback speed of the video clip. Use a number for a constant speed or an array of Tween objects to change speed over time, for example easing from normal speed up to 3x.

crop

No; body and guard rules apply

Crop

See the full input schema.

chromaKey

No; body and guard rules apply

ChromaKey

See the full input schema.

ImageAsset

The ImageAsset adds an image to a Clip. The image can be sourced from a URL (src), generated from a text prompt (prompt), or both. At least one of src or prompt must be provided. - Source URL: set src to the publicly accessible URL of a jpg or png file. - Generated: set prompt to describe the image. Choose a generator with model and configure it with model-specific options; the engine fills src in automatically. - Both: src acts as a preview placeholder while prompt drives generation — the image is regenerated from the prompt at render time. Unchanged prompts and options resolve from the generation cache.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to image for images. Values: image. default: image.

src

No; body and guard rules apply

string

The image source URL. The URL must be publicly accessible or include credentials. When prompt is also set, src serves as a preview placeholder and the image is regenerated from the prompt at render time. minLength: 1. pattern: \S.

prompt

No; body and guard rules apply

string

A text prompt to generate the image from. The engine generates an image at render time and fills src automatically; an existing src is treated as a preview placeholder and replaced. Use model to choose the generator and options to configure it. maxLength: 4000.

model

No; body and guard rules apply

string

The generation model to use when prompt is set (e.g. flux-schnell, nano-banana-2). Defaults to nano-banana-2 if omitted. Each model's available options are defined by the model registry.

options

No; body and guard rules apply

object

Model-specific generation settings. Valid keys and values depend on the chosen model and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.

crop

No; body and guard rules apply

Crop

See the full input schema.

TextAsset

Notice: The TextAsset is deprecated, use the RichTextAsset instead. This type continues to function; no behaviour change for existing integrations. The TextAsset is used to add text and titles to a video. The text can be styled with built in and custom Fonts. You can also add a background bounding box used to control wrapping and overflow. Emoticons are also supported.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to text for text. Values: text. default: text.

text

Yes

string

The text string to display.

width

No; body and guard rules apply

integer

Set the width of the HTML asset bounding box in pixels. Text will wrap to fill the bounding box.

height

No; body and guard rules apply

integer

Set the width of the HTML asset bounding box in pixels. Text and elements will be masked if they exceed the height of the bounding box.

font

No; body and guard rules apply

TextFont

Font styling properties.

background

No; body and guard rules apply

TextBackground

Background styling properties.

alignment

No; body and guard rules apply

TextAlignment

Alignment properties.

stroke

No; body and guard rules apply

object

Text stroke (outline) properties.

animation

No; body and guard rules apply

object

Animation properties for text entrance effects.

ellipsis

No; body and guard rules apply

string

The string to display when text overflows its bounding box. Set to an ellipsis character or custom string to indicate truncated text.

RichTextAsset

The RichTextAsset provides advanced text rendering with support for custom fonts, gradients, shadows, strokes, animations, and styling options. It offers more flexibility and visual effects than the basic TextAsset.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to rich-text for rich text. Values: rich-text. default: rich-text.

text

Yes

string

The text string to display. Maximum 5000 characters. maxLength: 5000.

font

No; body and guard rules apply

RichTextFont

Font styling properties.

style

No; body and guard rules apply

RichTextStyle

Text style properties including spacing, line height, and transformations.

stroke

No; body and guard rules apply

RichTextStroke

Text stroke (outline) properties.

shadow

No; body and guard rules apply

RichTextShadow

Text shadow properties.

background

No; body and guard rules apply

RichTextBackground

Background styling properties for the text bounding box.

border

No; body and guard rules apply

RichTextBorder

Border styling properties for the text bounding box.

padding

No; body and guard rules apply

Union

Padding inside the text bounding box. Can be a single number (applied to all sides) or an object with individual sides.

align

No; body and guard rules apply

RichTextAlignment

Text alignment properties (horizontal and vertical).

animation

No; body and guard rules apply

RichTextAnimation

Animation properties for text entrance effects.

AudioAsset

The AudioAsset adds audio to a Clip. The audio can be sourced from a URL (src), generated from a text prompt (prompt), or both. At least one of src or prompt must be provided. - Source URL: set src to a publicly accessible audio URL (e.g. mp3). - Generated speech: set prompt to the spoken text and choose a text-to-speech model; set the voice via options. - Generated music or SFX: set prompt describing the sound and choose a music generation model. - Both: src acts as a preview placeholder while prompt drives generation — the audio is regenerated from the prompt at render time. Unchanged prompts and options resolve from the generation cache. - Use model to choose the generator and options to configure it. The generated src is filled in automatically.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to audio for audio assets. Values: audio. default: audio.

src

No; body and guard rules apply

string

The audio source URL. The URL must be publicly accessible or include credentials. When prompt is also set, src serves as a preview placeholder and the audio is regenerated from the prompt at render time. minLength: 1. pattern: \S.

prompt

No; body and guard rules apply

string

A text prompt. For text-to-speech models the prompt is the spoken text; for music models it describes the sound to generate. The generated src is filled in automatically; an existing src is treated as a preview placeholder and replaced. maxLength: 4000.

model

No; body and guard rules apply

string

The generation model to use when prompt is set (e.g. polly-neural, elevenlabs-tts, elevenlabs-music). Defaults to elevenlabs-tts (with a default voice) if omitted. Each model's available options are defined by the model registry.

options

No; body and guard rules apply

object

Model-specific generation settings. Valid keys and values depend on the chosen model and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.

trim

No; body and guard rules apply

number

The start trim point of the audio clip, in seconds (defaults to 0). Audio will start from the in trim point. The audio will play until the file ends or the Clip length is reached.

volume

No; body and guard rules apply

Union

Set the volume of the audio clip. Use a number or an array of Tween objects to create custom volume transitions.

speed

No; body and guard rules apply

number

Adjust the playback speed of the audio clip between 0 (paused) and 10 (10x normal speed), where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire audio (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire audio (i.e. original length / 2). minimum: 0. maximum: 10. format: float.

effect

No; body and guard rules apply

string

The effect to apply to the audio asset fadeIn - fade volume in only fadeOut - fade volume out only fadeInFadeOut - fade volume in and out Values: none, fadeIn, fadeOut, fadeInFadeOut.

ShapeAsset

The ShapeAsset is used to add shapes to a video. The shape can be styled with a fill and a stroke. You can manipulate properties such as rotation to create dynamic effects like a diamond shape or stripes.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to shape for shape. Values: shape. default: shape.

shape

Yes

string

The shape to display. Values: rectangle, circle, line.

width

No; body and guard rules apply

integer

Sets the width of the bounding box in pixels. This value should be larger than the shape's width. If omitted, the entire viewport width and height will be used.

height

No; body and guard rules apply

integer

Sets the height of the bounding box in pixels. This value should be larger than the shape's height. If omitted, the entire viewport width and height will be used.

fill

No; body and guard rules apply

object

Specifies the fill style of the shape.

stroke

No; body and guard rules apply

object

Specifies the stroke style of the shape.

rectangle

No; body and guard rules apply

object

Configuration settings for the rectangle shape. Required when shape is set to rectangle.

circle

No; body and guard rules apply

object

Configuration settings for the circle shape. Required when shape is set to circle.

line

No; body and guard rules apply

object

Configuration settings for the line shape. Required when shape is set to line.

LumaAsset

The LumaAsset is used to create luma matte masks, transitions and effects between other assets. A luma matte is a grey scale image or animated video where the black areas are transparent and the white areas solid. The luma matte animation should be provided as an mp4 video file. The src must be a publicly accessible URL to the file.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to luma for luma mattes. Values: luma. default: luma.

src

Yes

string

The luma matte source URL. The URL must be publicly accessible or include credentials. minLength: 1. pattern: \S.

trim

No; body and guard rules apply

number

The start trim point of the luma matte clip, in seconds (defaults to 0). Videos will start from the in trim point. A luma matte video will play until the file ends or the Clip length is reached.

CaptionAsset

Notice: The CaptionAsset is deprecated, use the RichCaptionAsset instead. The CaptionAsset is used to add captions (subtitles) to a video. It uses a supplied SRT or VTT file which will be read and burnt to the video. Captions can be applied independently from a video or audio file for greater flexibility with styling and layout. For example you can scale, position or crop a video without modifying the captions. To sync captions with a video or audio file use a Video or Audio with matching start and end time.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to caption for captions. Values: caption. default: caption.

src

Yes

string

The URL to an SRT or VTT subtitles file, or an alias reference to auto-generate captions from an audio or video clip. For file URLs, the URL must be publicly accessible or include credentials. For auto-captioning, use the format alias://clip-name where clip-name is the alias of an audio, video, or text-to-speech clip. The system will automatically transcribe the audio and detect the language. minLength: 1. pattern: \S.

font

No; body and guard rules apply

CaptionFont

Font styling properties.

background

No; body and guard rules apply

CaptionBackground

Background styling properties.

margin

No; body and guard rules apply

CaptionMargin

Margin properties.

trim

No; body and guard rules apply

number

The start trim point of the captions, in seconds (defaults to 0). Remove the trim length from the start of the captions and allow it to be synced with video or audio. The captions will play until the file ends or the Clip length is reached.

speed

No; body and guard rules apply

number

Adjust the playback speed of the captions between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire captions (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire captions (i.e. original length / 2). minimum: 0. maximum: 10. format: float.

RichCaptionAsset

The RichCaptionAsset provides word-level caption animations with rich-text styling. It supports karaoke-style highlighting, word-by-word animations, and advanced typography. Captions can be sourced from SRT/VTT/TTML subtitle files, from audio/video media URLs (auto-transcribed), or from alias references to other clips in the same timeline.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to rich-caption for rich captions. Values: rich-caption. default: rich-caption.

src

Yes

string

Source for the caption words. Accepts three formats: (1) the URL to a subtitle file (.srt, .vtt, .ttml, or .dfxp) which is parsed directly; (2) the URL to an audio or video media file (.mp4, .mov, .webm, .mp3, .wav, .m4a, .flac, .aac, .ogg, and related formats) which is auto-transcribed; (3) an alias reference in the form alias://clip-name where clip-name is the alias of another audio, video, or text-to-speech clip in the same timeline — the referenced clip's source is auto-transcribed. For file URLs, the URL must be publicly accessible or include credentials. Content is classified at runtime and unsupported content types (HTML, PDF, images, archives) are rejected with a structured error. minLength: 1.

font

No; body and guard rules apply

object

Font styling properties for inactive words.

style

No; body and guard rules apply

object

Text style properties including spacing, line height, and transformations.

stroke

No; body and guard rules apply

RichTextStroke

Text stroke (outline) properties for inactive words.

shadow

No; body and guard rules apply

RichTextShadow

Text shadow properties.

background

No; body and guard rules apply

RichTextBackground

Background styling properties for the caption bounding box.

border

No; body and guard rules apply

RichTextBorder

Border styling properties for the caption bounding box.

padding

No; body and guard rules apply

Union

Padding inside the caption bounding box. Can be a single number (applied to all sides) or an object with individual sides.

align

No; body and guard rules apply

RichTextAlignment

Text alignment properties (horizontal and vertical).

active

No; body and guard rules apply

RichCaptionActive

Styling properties for the active/highlighted word. These override the base styling when a word is being spoken.

animation

No; body and guard rules apply

RichCaptionAnimation

Word-level animation properties controlling how words are highlighted or revealed.

RichCaptionActiveFont

Font properties for the active/highlighted word.

Argument

Required

Type

Details

family

No; body and guard rules apply

string

The font family for the active word. Inherits from the base font.family when not set.

weight

No; body and guard rules apply

JSON

The weight of the font for the active word. Can be a number (100-900) or a string. Inherits from the base font.weight when not set. default: 400.

color

No; body and guard rules apply

string

The active word color using hexadecimal color notation. pattern: ^#[A-Fa-f0-9]{6}$.

background

No; body and guard rules apply

string

The background color behind the active word using hexadecimal color notation. pattern: ^#[A-Fa-f0-9]{6}$.

opacity

No; body and guard rules apply

number

The opacity of the active word where 1 is opaque and 0 is transparent. minimum: 0. maximum: 1. default: 1.

size

No; body and guard rules apply

number

The font size of the active word in pixels. minimum: 1. maximum: 500.

textDecoration

No; body and guard rules apply

string

Text decoration to apply to the active word. Values: none, underline, line-through. default: none.

RichCaptionActive

Styling properties for the active/highlighted word.

Argument

Required

Type

Details

font

No; body and guard rules apply

RichCaptionActiveFont

Font properties for the active word.

stroke

No; body and guard rules apply

Union

Stroke properties for the active word. Set to "none" to explicitly remove the base stroke on the active word.

shadow

No; body and guard rules apply

Union

Shadow properties for the active word. Set to "none" to explicitly remove the base shadow on the active word.

RichCaptionAnimation

Word-level animation properties for caption effects.

Argument

Required

Type

Details

style

Yes

string

The animation style to apply to words: karaoke - Word-by-word color fill as spoken (shows all words, highlights active) highlight - Word changes to active color when spoken (shows all words) pop - Each word scales up when active fade - Gradual opacity transition per word slide - Words slide in from a direction bounce - Spring animation on word appearance typewriter - Words appear one by one and stay visible none - No animation, all words visible immediately Values: karaoke, highlight, pop, fade, slide, bounce, typewriter, none. default: highlight.

direction

No; body and guard rules apply

string

Direction for directional animations (slide). Only applicable when style is slide. Values: left, right, up, down. default: up.

TextToImageAsset

Notice: TextToImageAsset is deprecated. Use ImageAsset with prompt instead. This type continues to function and is internally rewritten to ImageAsset; no behaviour change for existing integrations. The TextToImageAsset lets you create a dynamic image from a text prompt.

Argument

Required

Type

Details

type

Yes

string

The type of asset to generate - set to text-to-image for text-to-image. Values: text-to-image. default: text-to-image.

prompt

Yes

string

The text prompt to generate an image from.

width

No; body and guard rules apply

integer

The width of the image in pixels.

height

No; body and guard rules apply

integer

The height of the image in pixels.

crop

No; body and guard rules apply

Crop

See the full input schema.

ImageToVideoAsset

Notice: ImageToVideoAsset is deprecated. Use VideoAsset with prompt, a model that accepts a starting image, and that image in options.startSrc — for example seedance-2.0-image-to-video. This type continues to function and is internally rewritten to VideoAsset; no behaviour change for existing integrations. The ImageToVideoAsset lets you create a video from an image and a text prompt.

Argument

Required

Type

Details

type

Yes

string

The type of asset to generate - set to image-to-video for image-to-video. Values: image-to-video. default: image-to-video.

src

Yes

string

The image source URL. The URL must be publicly accessible or include credentials. minLength: 1.

prompt

No; body and guard rules apply

string

The instructions for modifying the image into a video sequence.

aspectRatio

No; body and guard rules apply

string

The aspect ratio (shape) of the video output. Values: 1:1, 4:3, 16:9, 9:16, 3:4, 21:9, 9:21.

speed

No; body and guard rules apply

number

Adjust the playback speed of the video clip between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire video (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire video (i.e. original length / 2). minimum: 0. maximum: 10. format: float.

crop

No; body and guard rules apply

Crop

See the full input schema.

TextToSpeechAsset

Notice: TextToSpeechAsset is deprecated. Use AudioAsset with prompt (the spoken text) and voice instead. This type continues to function and is internally rewritten to AudioAsset; no behaviour change for existing integrations. The TextToSpeechAsset lets you generate a voice over from text using a text-to-speech service. The generated audio can be trimmed, faded and have its volume and speed adjusted using the same properties available on the AudioAsset.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to text-to-speech for text-to-speech. Values: text-to-speech. default: text-to-speech.

text

Yes

string

The text to convert to speech.

voice

Yes

string

The voice to use for the text-to-speech conversion.

language

No; body and guard rules apply

string

The language code for the text-to-speech conversion.

newscaster

No; body and guard rules apply

boolean

Set the voice to newscaster mode. default: False.

trim

No; body and guard rules apply

number

The start trim point of the audio clip, in seconds (defaults to 0). Audio will start from the trim point. The audio will play until the file ends or the Clip length is reached.

volume

No; body and guard rules apply

Union

Set the volume of the audio clip. Use a number or an array of Tween objects to create custom volume transitions.

speed

No; body and guard rules apply

number

Adjust the playback speed of the audio clip between 0 (paused) and 10 (10x normal speed), where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length. minimum: 0. maximum: 10. format: float.

effect

No; body and guard rules apply

string

The effect to apply to the audio asset fadeIn - fade volume in only fadeOut - fade volume out only fadeInFadeOut - fade volume in and out Values: none, fadeIn, fadeOut, fadeInFadeOut.

HtmlAsset

Notice: The HtmlAsset is deprecated, use the RichTextAsset instead. The HtmlAsset clip type lets you create text based layout and formatting using HTML and CSS. You can also set the height and width of a bounding box for the HTML content to sit within. Text and elements will wrap within the bounding box.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to html for HTML. Values: html. default: html.

html

Yes

string

The HTML text string. See list of supported HTML tags.

css

No; body and guard rules apply

string

The CSS text string to apply styling to the HTML. See list of support CSS properties.

width

No; body and guard rules apply

integer

Set the width of the HTML asset bounding box in pixels. Text will wrap to fill the bounding box.

height

No; body and guard rules apply

integer

Set the width of the HTML asset bounding box in pixels. Text and elements will be masked if they exceed the height of the bounding box.

background

No; body and guard rules apply

string

Apply a background color behind the HTML bounding box using. Set the text color using hexadecimal color notation. Transparency is supported by setting the first two characters of the hex string (opposite to HTML), i.e. #80ffffff will be white with 50% transparency.

position

No; body and guard rules apply

string

Place the HTML in one of nine predefined positions within the HTML area. top - top (center) topRight - top right right - right (center) bottomRight - bottom right bottom - bottom (center) bottomLeft - bottom left left - left (center) topLeft - top left center - center Values: top, topRight, right, bottomRight, bottom, bottomLeft, left, topLeft, center.

Html5Asset

The Html5Asset renders full HTML5/CSS3/JS.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to html5 for HTML5/CSS3/JS. Values: html5. default: html5.

html

Yes

string

The HTML markup for the asset. Max 1,000,000 characters. maxLength: 1000000.

css

No; body and guard rules apply

string

The CSS string applied to the HTML. Max 500,000 characters. maxLength: 500000.

js

No; body and guard rules apply

string

Optional JavaScript. Use for chart libraries, animations, or DOM manipulation. gsap, d3, anime and lottie are always available. CSS animations, transitions, and Element.animate() are also captured automatically. Max 500,000 characters. maxLength: 500000.

TitleAsset

Notice: The TitleAsset is deprecated, use the RichTextAsset instead. The TitleAsset clip type lets you create video titles from a text string and apply styling and positioning.

Argument

Required

Type

Details

type

Yes

string

The type of asset - set to title for titles. Values: title. default: title.

text

Yes

string

The title text string - i.e. "My Title".

style

No; body and guard rules apply

string

Uses a preset to apply font properties and styling to the title. minimal blockbuster vogue sketchy skinny chunk chunkLight marker future subtitle Values: minimal, blockbuster, vogue, sketchy, skinny, chunk, chunkLight, marker, future, subtitle.

color

No; body and guard rules apply

string

Set the text color using hexadecimal color notation. Transparency is supported by setting the first two characters of the hex string (opposite to HTML), i.e. #80ffffff will be white with 50% transparency.

size

No; body and guard rules apply

string

Set the relative size of the text using predefined sizes from xx-small to xx-large. xx-small x-small small medium large x-large xx-large Values: xx-small, x-small, small, medium, large, x-large, xx-large.

background

No; body and guard rules apply

string

Apply a background color behind the text. Set the text color using hexadecimal color notation. Transparency is supported by setting the first two characters of the hex string (opposite to HTML), i.e. #80ffffff will be white with 50% transparency. Omit to use transparent background.

position

No; body and guard rules apply

string

Place the title in one of nine predefined positions of the viewport. top - top (center) topRight - top right right - right (center) bottomRight - bottom right bottom - bottom (center) bottomLeft - bottom left left - left (center) topLeft - top left center - center Values: top, topRight, right, bottomRight, bottom, bottomLeft, left, topLeft, center.

offset

No; body and guard rules apply

Offset

Offset the location of the title relative to its position on the screen.

SvgAsset

The SvgAsset is used to add scalable vector graphics (SVG) to a video using raw SVG markup. Supported elements: , , , , , , `` Automatically extracted from SVG markup: - Path data (converted to a single combined path) - Fill color (from fill attribute or style) - Stroke color and width (from attributes or style) - Dimensions (from width/height or viewBox) - Opacity (from opacity attribute) See W3C SVG 2 Specification for path data syntax.

Argument

Required

Type

Details

type

Yes

string

The asset type - set to svg for SVG assets. Values: svg. default: svg.

src

Yes

string

Raw SVG markup string. The SVG must contain valid SVG elements. The shape, fill, stroke, dimensions and opacity are automatically extracted from the SVG content. minLength: 1. maxLength: 500000.

Transition

In and out transitions for a clip - i.e. fade in and fade out

Argument

Required

Type

Details

in

No; body and guard rules apply

string

The transition in. Available transitions are: fade - fade in reveal - reveal from left to right wipeLeft - fade across screen to the left wipeRight - fade across screen to the right slideLeft - move slightly left and fade in slideRight - move slightly right and fade in slideUp - move slightly up and fade in slideDown - move slightly down and fade in carouselLeft - slide in from right to left carouselRight - slide in from left to right carouselUp - slide in from bottom to top carouselDown - slide in from top to bottom shuffleTopRight - rotate in from top right shuffleRightTop - rotate in from right top shuffleRightBottom - rotate in from right bottom shuffleBottomRight - rotate in from bottom right shuffleBottomLeft - rotate in from bottom left shuffleLeftBottom - rotate in from left bottom shuffleLeftTop - rotate in from left top shuffleTopLeft - rotate in from top left zoom - fast zoom in The transition speed can also be controlled by appending Fast or Slow to the transition, e.g. fadeFast or CarouselLeftSlow. Values: none, fade, fadeSlow, fadeFast, reveal, revealSlow, revealFast, wipeLeft, wipeLeftSlow, wipeLeftFast, wipeRight, wipeRightSlow, wipeRightFast, slideLeft, slideLeftSlow, slideLeftFast, slideRight, slideRightSlow, slideRightFast, slideUp, slideUpSlow, slideUpFast, slideDown, slideDownSlow, slideDownFast, carouselLeft, carouselLeftSlow, carouselLeftFast, carouselRight, carouselRightSlow, carouselRightFast, carouselUp, carouselUpSlow, carouselUpFast, carouselDown, carouselDownSlow, carouselDownFast, shuffleTopRight, shuffleTopRightSlow, shuffleTopRightFast, shuffleRightTop, shuffleRightTopSlow, shuffleRightTopFast, shuffleRightBottom, shuffleRightBottomSlow, shuffleRightBottomFast, shuffleBottomRight, shuffleBottomRightSlow, shuffleBottomRightFast, shuffleBottomLeft, shuffleBottomLeftSlow, shuffleBottomLeftFast, shuffleLeftBottom, shuffleLeftBottomSlow, shuffleLeftBottomFast, shuffleLeftTop, shuffleLeftTopSlow, shuffleLeftTopFast, shuffleTopLeft, shuffleTopLeftSlow, shuffleTopLeftFast, zoom.

out

No; body and guard rules apply

string

The transition out. Available transitions are: fade - fade out reveal - reveal from right to left wipeLeft - fade across screen to the left wipeRight - fade across screen to the right slideLeft - move slightly left and fade out slideRight - move slightly right and fade out slideUp - move slightly up and fade out slideDown - move slightly down and fade out carouselLeft - slide out from right to left carouselRight - slide out from left to right carouselUp - slide out from bottom to top carouselDown - slide out from top to bottom shuffleTopRight - rotate out from top right shuffleRightTop - rotate out from right top shuffleRightBottom - rotate out from right bottom shuffleBottomRight - rotate out from bottom right shuffleBottomLeft - rotate out from bottom left shuffleLeftBottom - rotate out from left bottom shuffleLeftTop - rotate out from left top shuffleTopLeft - rotate out from top left zoom - fast zoom out The transition speed can also be controlled by appending Fast or Slow to the transition, e.g. fadeFast or CarouselLeftSlow. Values: none, fade, fadeSlow, fadeFast, reveal, revealSlow, revealFast, wipeLeft, wipeLeftSlow, wipeLeftFast, wipeRight, wipeRightSlow, wipeRightFast, slideLeft, slideLeftSlow, slideLeftFast, slideRight, slideRightSlow, slideRightFast, slideUp, slideUpSlow, slideUpFast, slideDown, slideDownSlow, slideDownFast, carouselLeft, carouselLeftSlow, carouselLeftFast, carouselRight, carouselRightSlow, carouselRightFast, carouselUp, carouselUpSlow, carouselUpFast, carouselDown, carouselDownSlow, carouselDownFast, shuffleTopRight, shuffleTopRightSlow, shuffleTopRightFast, shuffleRightTop, shuffleRightTopSlow, shuffleRightTopFast, shuffleRightBottom, shuffleRightBottomSlow, shuffleRightBottomFast, shuffleBottomRight, shuffleBottomRightSlow, shuffleBottomRightFast, shuffleBottomLeft, shuffleBottomLeftSlow, shuffleBottomLeftFast, shuffleLeftBottom, shuffleLeftBottomSlow, shuffleLeftBottomFast, shuffleLeftTop, shuffleLeftTopSlow, shuffleLeftTopFast, shuffleTopLeft, shuffleTopLeftSlow, shuffleTopLeftFast, zoom.

Offset

Offsets the position of an asset horizontally or vertically by a relative distance.

Argument

Required

Type

Details

x

No; body and guard rules apply

Union

Offset an asset on the horizontal axis (left or right). Use a number or an array of Tween objects to create a custom animation.

y

No; body and guard rules apply

Union

Offset an asset on the vertical axis (up or down). Use a number or an array of Tween objects to create a custom animation.

Crop

Crop the sides of an asset by a relative amount. The size of the crop is specified using a scale between 0 and 1, relative to the screen width - i.e a left crop of 0.5 will crop half of the asset from the left, a top crop of 0.25 will crop the top by quarter of the asset.

Argument

Required

Type

Details

top

No; body and guard rules apply

number

Crop from the top of the asset minimum: 0. maximum: 1. format: float.

bottom

No; body and guard rules apply

number

Crop from the bottom of the asset minimum: 0. maximum: 1. format: float.

left

No; body and guard rules apply

number

Crop from the left of the asset minimum: 0. maximum: 1. format: float.

right

No; body and guard rules apply

number

Crop from the left of the asset minimum: 0. maximum: 1. format: float.

Transformation

Apply one or more transformations to a clip. Transformations alter the visual properties of a clip and can be combined to create new shapes and effects.

Argument

Required

Type

Details

rotate

No; body and guard rules apply

RotateTransformation

See the full input schema.

skew

No; body and guard rules apply

SkewTransformation

See the full input schema.

flip

No; body and guard rules apply

FlipTransformation

See the full input schema.

RotateTransformation

Rotate a clip by the specified angle in degrees. Rotation origin is set based on the clips position.

Argument

Required

Type

Details

angle

No; body and guard rules apply

Union

Rotate a clip by the specified angle in degrees. Use a number or an array of Tween objects to create a custom animation.

SkewTransformation

Skew a clip so its edges are sheared at an angle. Use values between -100 and 100. Values over 3 or under -3 will skew the clip almost flat.

Argument

Required

Type

Details

x

No; body and guard rules apply

Union

Skew the clip along it's x axis.

y

No; body and guard rules apply

Union

Skew the clip along it's y axis.

FlipTransformation

Flip a clip vertically or horizontally. Acts as a mirror effect of the clip along the selected plane.

Argument

Required

Type

Details

horizontal

No; body and guard rules apply

boolean

Flip a clip horizontally.

vertical

No; body and guard rules apply

boolean

Flip a clip vertically.

TextFont

Font properties for text.

Argument

Required

Type

Details

family

No; body and guard rules apply

string

The font family name. This must be Family name embedded in the font, i.e. "Open Sans".

color

No; body and guard rules apply

string

The text color using hexadecimal color notation.

opacity

No; body and guard rules apply

number

The opacity of the text where 1 is opaque and 0 is transparent.

size

No; body and guard rules apply

integer

The size of the font in pixels (px).

weight

No; body and guard rules apply

integer

The weight of the font. 100 is lightest, 900 is heaviest (boldest).

lineHeight

No; body and guard rules apply

number

The line height of the font as a ratio of the font size.

TextBackground

Displays a background box behind the text.

Argument

Required

Type

Details

color

No; body and guard rules apply

string

The background color using hexadecimal color notation. pattern: ^#[A-Fa-f0-9]{6}$.

opacity

No; body and guard rules apply

number

The opacity of the background where 1 is opaque and 0 is transparent. minimum: 0. maximum: 1.

padding

No; body and guard rules apply

number

Padding inside the background box in pixels. minimum: 0. maximum: 100.

borderRadius

No; body and guard rules apply

number

The border radius of the background box in pixels for rounded corners. minimum: 0.

wrap

No; body and guard rules apply

boolean

Not supported on legacy text assets. Accepted here only so validators can emit a clear migration error pointing users to rich-text or rich-caption, which support background wrapping natively.

TextAlignment

Horizontal and vertical alignment properties for text.

Argument

Required

Type

Details

horizontal

No; body and guard rules apply

string

The horizontal alignment of the text. Value must be one of: left center right Values: left, center, right.

vertical

No; body and guard rules apply

string

The vertical alignment of the text. Value must be one of: top center bottom Values: top, center, bottom.

RichTextFont

Font properties for rich text.

Argument

Required

Type

Details

family

No; body and guard rules apply

string

The font family name. This must be the Family name embedded in the font, i.e. "Open Sans". default: Open Sans.

size

No; body and guard rules apply

integer

The size of the font in pixels (px). Must be between 1 and 500. minimum: 1. maximum: 500. default: 24.

weight

No; body and guard rules apply

JSON

The weight of the font. Can be a number (100-900) or a string ('normal', 'bold', etc.). 100 is lightest, 900 is heaviest (boldest). default: 400.

style

No; body and guard rules apply

string

The font style. Values: normal, italic. default: normal.

color

No; body and guard rules apply

string

The text color using hexadecimal color notation. pattern: ^#[A-Fa-f0-9]{6}$. default: #000000.

opacity

No; body and guard rules apply

number

The opacity of the text where 1 is opaque and 0 is transparent. minimum: 0. maximum: 1. default: 1.

background

No; body and guard rules apply

string

The background color behind the text using hexadecimal color notation. pattern: ^#[A-Fa-f0-9]{6}$.

stroke

No; body and guard rules apply

RichTextStroke

Text stroke (outline) properties.

RichTextStyle

Text style properties including spacing, line height, and transformations.

Argument

Required

Type

Details

letterSpacing

No; body and guard rules apply

number

Additional spacing between letters in pixels. Can be negative for tighter spacing. default: 0.

wordSpacing

No; body and guard rules apply

number

Additional spacing between words in pixels. A value of 0 uses the font's natural space width. minimum: 0. default: 0.

lineHeight

No; body and guard rules apply

number

The line height as a multiplier of the font size. Must be between 0 and 10. minimum: 0. maximum: 10. default: 1.2.

textTransform

No; body and guard rules apply

string

Text transformation to apply. Values: none, uppercase, lowercase, capitalize. default: none.

textDecoration

No; body and guard rules apply

string

Text decoration to apply. Values: none, underline, line-through. default: none.

gradient

No; body and guard rules apply

RichTextGradient

Gradient fill for text instead of solid color.

RichTextGradient

Gradient properties for text fill.

Argument

Required

Type

Details

type

No; body and guard rules apply

string

The type of gradient. Values: linear, radial. default: linear.

angle

No; body and guard rules apply

number

The angle of the gradient in degrees (for linear gradients). Must be between 0 and 360. minimum: 0. maximum: 360. default: 0.

stops

Yes

array

Gradient color stops. Must have at least 2 stops. minItems: 2. Items: object.

RichTextStroke

Text stroke (outline) properties.

Argument

Required

Type

Details

width

No; body and guard rules apply

number

The width of the stroke in pixels. Must be 0 or greater. minimum: 0. default: 0.

color

No; body and guard rules apply

string

The stroke color using hexadecimal color notation. pattern: ^#[A-Fa-f0-9]{6}$. default: #000000.

opacity

No; body and guard rules apply

number

The opacity of the stroke where 1 is opaque and 0 is transparent. minimum: 0. maximum: 1. default: 1.

RichTextShadow

Text shadow properties.

Argument

Required

Type

Details

offsetX

No; body and guard rules apply

number

Horizontal offset of the shadow in pixels. Positive values move right, negative left. default: 0.

offsetY

No; body and guard rules apply

number

Vertical offset of the shadow in pixels. Positive values move down, negative up. default: 0.

blur

No; body and guard rules apply

number

The blur radius of the shadow in pixels. Must be 0 or greater. minimum: 0. default: 0.

color

No; body and guard rules apply

string

The shadow color using hexadecimal color notation. pattern: ^#[A-Fa-f0-9]{6}$. default: #000000.

opacity

No; body and guard rules apply

number

The opacity of the shadow where 1 is opaque and 0 is transparent. minimum: 0. maximum: 1. default: 0.5.

RichTextBackground

Background styling properties for the text bounding box.

Argument

Required

Type

Details

color

No; body and guard rules apply

string

The background color using hexadecimal color notation. pattern: ^#[A-Fa-f0-9]{6}$.

opacity

No; body and guard rules apply

number

The opacity of the background where 1 is opaque and 0 is transparent. minimum: 0. maximum: 1. default: 1.

borderRadius

No; body and guard rules apply

number

The border radius of the background box in pixels. Must be 0 or greater. minimum: 0. default: 0.

wrap

No; body and guard rules apply

boolean

When true, the background pill shrinks to fit the rendered text bounding box plus the asset's padding (and stroke width, if present), producing a pill or badge effect. When false (default), the background fills the full asset content area. Available on rich-text and rich-caption assets only; not supported on legacy type: text. default: False.

padding

No; body and guard rules apply

integer

Inner padding in pixels between the wrap pill edge and the rendered text. Only takes effect when wrap: true. When omitted, the renderer applies a sensible default proportional to the font size (approximately 12% of the active page font size on rich-caption assets). Set to 0 for a pill that hugs the text exactly. Available on rich-text and rich-caption assets only. minimum: 0. maximum: 200.

RichTextAlignment

Text alignment properties (horizontal and vertical).

Argument

Required

Type

Details

horizontal

No; body and guard rules apply

string

The horizontal alignment of the text. Values: left, center, right. default: center.

vertical

No; body and guard rules apply

string

The vertical alignment of the text within the bounding box. Values: top, middle, bottom. default: middle.

RichTextAnimation

Animation properties for text entrance effects.

Argument

Required

Type

Details

preset

Yes

string

The animation preset to apply. Available presets: fadeIn - fadeIn in animation slideIn - slide in from a direction typewriter - typewriter effect ascend - ascend from a direction shift - shift in from a direction movingLetters - letters move in from a direction Values: fadeIn, slideIn, typewriter, ascend, shift, movingLetters.

duration

No; body and guard rules apply

number

Override animation duration in seconds. Must be between 0.1 and 30 seconds. minimum: 0.1. maximum: 30.

style

No; body and guard rules apply

string

Animation style - animate by character or by word. Only applicable for typewriter and shift animations. Values: character, word.

direction

No; body and guard rules apply

string

Direction for directional animations. Required for slideIn, ascend, shift, and movingLetters presets. ascend - supports: up, down shift - supports: left, right, up, down slideIn - supports: left, right, up, down movingLetters - supports: left, right, up, down Values: left, right, up, down.

RichTextBorder

Border styling properties for the text bounding box.

Argument

Required

Type

Details

width

No; body and guard rules apply

number

The width of the border in pixels. Must be 0 or greater. minimum: 0. default: 0.

color

No; body and guard rules apply

string

The border color using hexadecimal color notation. pattern: ^#[A-Fa-f0-9]{6}$. default: #000000.

opacity

No; body and guard rules apply

number

The opacity of the border where 1 is opaque and 0 is transparent. minimum: 0. maximum: 1. default: 1.

radius

No; body and guard rules apply

number

The border radius in pixels for rounded corners. Must be 0 or greater. minimum: 0. default: 0.

RichTextPadding

Padding properties for individual sides of the text bounding box.

Argument

Required

Type

Details

top

No; body and guard rules apply

number

Top padding in pixels. minimum: 0. default: 0.

right

No; body and guard rules apply

number

Right padding in pixels. minimum: 0. default: 0.

bottom

No; body and guard rules apply

number

Bottom padding in pixels. minimum: 0. default: 0.

left

No; body and guard rules apply

number

Left padding in pixels. minimum: 0. default: 0.

CaptionFont

Font properties for captions text.

Argument

Required

Type

Details

family

No; body and guard rules apply

string

The font family name. This must be Family name embedded in the font, i.e. "Open Sans".

color

No; body and guard rules apply

string

The text color using hexadecimal color notation.

opacity

No; body and guard rules apply

number

The opacity of the text where 1 is opaque and 0 is transparent.

size

No; body and guard rules apply

integer

The size of the font in pixels (px).

lineHeight

No; body and guard rules apply

number

The line height of the font as a ratio of the font size.

stroke

No; body and guard rules apply

string

The stroke color of the font using hexadecimal color notation.

strokeWidth

No; body and guard rules apply

number

The width of the stroke in pixels.

CaptionBackground

Displays a background box behind the caption text.

Argument

Required

Type

Details

color

No; body and guard rules apply

string

The background color using hexadecimal color notation.

opacity

No; body and guard rules apply

number

The opacity of the background color.

padding

No; body and guard rules apply

integer

The padding inside the background box in pixels.

borderRadius

No; body and guard rules apply

integer

The border radius of the background box in pixels.

CaptionMargin

The margin properties for captions. Margins are used to position the caption text and background on the screen.

Argument

Required

Type

Details

top

No; body and guard rules apply

number

The margin above the text. Pushes captions down the screen.

left

No; body and guard rules apply

number

The margin to the left of the text. Pushes captions to the right.

right

No; body and guard rules apply

number

The margin to the right of the text. Pushes captions to the left.

ChromaKey

Chroma key is a technique that replaces a specific color in a video with a different background image or video, enabling seamless integration of diverse environments. Commonly used for green screen and blue screen effects.

Argument

Required

Type

Details

color

Yes

string

The chroma key color as a hex value. Use green (#00b140) for green screens or blue (#0000FF) for blue screens. Any valid hex color can be used as the key color. pattern: ^#[0-9a-fA-F]{6}$.

threshold

No; body and guard rules apply

integer

Pixels within this distance from the key color are eliminated by setting their alpha values to zero. minimum: 0. maximum: 250.

halo

No; body and guard rules apply

integer

Pixels within the halo distance from the threshold boundary are given an increasing alpha value based on their distance from the threshold. minimum: 0. maximum: 250.

Tween

Use a Tween to animate properties over time. The following properties are currently supported and can be animated: Opacity - animate the transparency of a clip. Offset - animate the x and y position of a clip. Rotation - animate the rotation of a clip. Skew - animate the horizontal and vertical shearing effect. Volume - animate the audio volume of a clip.

Argument

Required

Type

Details

from

No; body and guard rules apply

JSON

The initial property value at the start of the animation.

to

No; body and guard rules apply

JSON

The final property value at the end of the animation.

start

No; body and guard rules apply

number

The time in seconds when the animation starts, relative to the clip, not the timeline.

length

No; body and guard rules apply

number

The duration of the animation in seconds.

interpolation

No; body and guard rules apply

string

The interpolation method to use for the animation. Available options are: linear - a linear interpolation between the start and end values. bezier - a bezier curve interpolation between the start and end values. constant - an interpolation where the property instantly jumps from the start to the end value, without any gradual transition. Values: linear, bezier, constant.

easing

No; body and guard rules apply

string

The easing function to use for the animation. Easing controls the rate of change of the animated value, allowing for more natural motion by speeding up or slowing down the animation at different points. Only applicable if interpolation is set to bezier. Values: ease, easeIn, easeOut, easeInOut, easeInQuad, easeInCubic, easeInQuart, easeInQuint, easeInSine, easeInExpo, easeInCirc, easeInBack, easeOutQuad, easeOutCubic, easeOutQuart, easeOutQuint, easeOutSine, easeOutExpo, easeOutCirc, easeOutBack, easeInOutQuad, easeInOutCubic, easeInOutQuart, easeInOutQuint, easeInOutSine, easeInOutExpo, easeInOutCirc, easeInOutBack.

MergeField

A merge field consists of a key; find, and a value; replace. Merge fields can be used to replace placeholders within the JSON edit to create re-usable templates. Placeholders should be a string with double brace delimiters, i.e. "{{NAME}}". A placeholder can be used for any value within the JSON edit.

Argument

Required

Type

Details

find

Yes

string

The string to find without delimiters.

replace

Yes

JSON

The replacement value. The replacement can be any valid JSON type - string, boolean, number, etc...

Output

The output format, render range and type of media to generate. For all formats except mp3, either resolution or size (with both width and height) must be specified.

Argument

Required

Type

Details

format

Yes

string

The output format and type of media file to generate. mp4 - mp4 video file gif - animated gif jpg - jpg image file png - png image file bmp - bmp image file mp3 - mp3 audio file (audio only) Values: mp4, gif, mp3, jpg, png, bmp.

resolution

No; body and guard rules apply

string

The preset output resolution of the video or image. For custom sizes use the size property. Either resolution or size (with both width and height) must be specified for all formats except mp3. preview - 512px x 288px @ 15fps mobile - 640px x 360px @ 25fps sd - 1024px x 576px @ 25fps hd - 1280px x 720px @ 25fps 1080 - 1920px x 1080px @ 25fps 4k - 3840px x 2160px @ 25fps Values: preview, mobile, sd, hd, 1080, 4k.

aspectRatio

No; body and guard rules apply

string

The aspect ratio (shape) of the video or image. Useful for social media output formats. Options are: 16:9 (default) - regular landscape/horizontal aspect ratio 9:16 - vertical/portrait aspect ratio 1:1 - square aspect ratio 4:5 - short vertical/portrait aspect ratio 4:3 - legacy TV aspect ratio Values: 16:9, 9:16, 1:1, 4:5, 4:3.

size

No; body and guard rules apply

Size

See the full input schema.

fps

No; body and guard rules apply

number

Override the default frames per second. Useful for when the source footage is recorded at 30fps, i.e. on mobile devices. Lower frame rates can be used to add cinematic quality (24fps) or to create smaller file size/faster render times or animated gifs (12 or 15fps). Default is 25fps. 12 - 12fps 15 - 15fps 24 - 24fps 23.976 - 23.976fps 25 (default) - 25fps 29.97 - 29.97fps 30 - 30fps 48 - 48fps 50 - 50fps 59.94 - 59.94fps 60 - 60fps Values: 12, 15, 23.976, 24, 25, 29.97, 30, 48, 50, 59.94, 60.

scaleTo

No; body and guard rules apply

string

Override the resolution and scale the video or image to render at a different size. When using scaleTo the asset should be edited at the resolution dimensions, i.e. use font sizes that look best at HD, then use scaleTo to output the file at SD and the text will be scaled to the correct size. This is useful if you want to create multiple asset sizes. preview - 512px x 288px @ 15fps mobile - 640px x 360px @ 25fps sd - 1024px x 576px @25fps hd - 1280px x 720px @25fps 1080 - 1920px x 1080px @25fps Values: preview, mobile, sd, hd, 1080, 4k.

quality

No; body and guard rules apply

string

Adjust the output quality of the video, image or audio. Adjusting quality affects render speed, download speeds and storage requirements due to file size. The default medium provides the most optimized choice for all three factors. verylow - reduced quality, smallest file size low - slightly reduced quality, smaller file size medium (default) - optimized quality, render speeds and file size high - slightly increased quality, larger file size veryhigh - highest quality, largest file size Values: verylow, low, medium, high, veryhigh.

repeat

No; body and guard rules apply

boolean

Loop settings for gif files. Set to true to loop, false to play only once.

mute

No; body and guard rules apply

boolean

Mute the audio track of the output video. Set to true to mute, false to un-mute.

range

No; body and guard rules apply

Range

See the full input schema.

poster

No; body and guard rules apply

Poster

Generate a poster image from a specific point on the timeline.

thumbnail

No; body and guard rules apply

Thumbnail

Generate a thumbnail image from a specific point on the timeline.

destinations

No; body and guard rules apply

array

Specify the storage locations and hosting services to send rendered videos to. Items: Destinations.

Size

Set a custom size for a video or image in pixels. When using a custom size omit the resolution and aspectRatio. Custom sizes must be divisible by 2 based on the encoder specifications.

Argument

Required

Type

Details

width

No; body and guard rules apply

integer

Set a custom width for the video or image file in pixels. Value must be divisible by 2. Maximum video width is 1920px, maximum image width is 4096px. minimum: 1. maximum: 4096.

height

No; body and guard rules apply

integer

Set a custom height for the video or image file in pixels. Value must be divisible by 2. Maximum video height is 1920px, maximum image height is 4096px. minimum: 1. maximum: 4096.

Range

Specify a time range to render, i.e. to render only a portion of a video or audio file. Omit this setting to export the entire video. Range can also be used to render a frame at a specific time point - setting a range and output format as jpg will output a single frame image at the range start point.

Argument

Required

Type

Details

start

No; body and guard rules apply

number

The point on the timeline, in seconds, to start the render from - i.e. start at second 3. minimum: 0. format: float.

length

No; body and guard rules apply

number

The length of the portion of the video or audio to render - i.e. render 6 seconds of the video. minimum: 0. format: float.

Poster

Generate a poster image for the video at a specific point from the timeline. The poster image size will match the size of the output video.

Argument

Required

Type

Details

capture

Yes

number

The point on the timeline in seconds to capture a single frame to use as the poster image.

Thumbnail

Generate a thumbnail image for the video or image at a specific point from the timeline.

Argument

Required

Type

Details

capture

Yes

number

The point on the timeline in seconds to capture a single frame to use as the thumbnail image.

scale

Yes

number

Scale the thumbnail size to a fraction of the viewport size - i.e. setting the scale to 0.5 will scale the thumbnail to half the size of the viewport. minimum: 0. maximum: 1.

Destinations

A destination is a location where assets can be sent to for serving or hosting. Videos, images and audio files that are rendered by the Edit API and source and rendition files generated by the Ingest API can be sent to destinations. You can also fetch a file from any public URL and transfer it to a destination. A file can be sent to one or more destinations including 3rd party destinations. By default all ingested and generated assets are automatically sent to the Shotstack hosting destination. You can opt-out from by setting the Shotstack destination exclude property to true.

anyOf: ShotstackDestination, MuxDestination, S3Destination, GoogleCloudStorageDestination, GoogleDriveDestination, VimeoDestination, object, object, object.

Type: object.

ShotstackDestination

Send videos and assets to the Shotstack hosting and CDN service. This destination is enabled by default.

Argument

Required

Type

Details

provider

Yes

string

The destination to send assets to - set to shotstack for Shotstack hosting and CDN. default: shotstack.

exclude

No; body and guard rules apply

boolean

Set to true to opt-out from the Shotstack hosting and CDN service. All files must be downloaded within 24 hours of rendering.

MuxDestination

Notice: The Mux destination is deprecated. It continues to work, with no behaviour change for existing integrations. Send videos to the Mux video hosting and streaming service. Mux credentials are required and added via the dashboard, not in the request.

Argument

Required

Type

Details

provider

Yes

string

The destination to send video to - set to mux for Mux. default: mux.

options

No; body and guard rules apply

MuxDestinationOptions

Additional Mux configuration and features.

MuxDestinationOptions

Notice: MuxDestinationOptions, like the Mux destination, is deprecated. It continues to work, with no behaviour change for existing integrations. Pass additional options to control how Mux processes video. Currently supports playback_policy and passthrough options.

Argument

Required

Type

Details

playbackPolicy

No; body and guard rules apply

array

Sets the Mux playback_policy option. Value is an array of strings - use public, signed, or both. Items: string.

passthrough

No; body and guard rules apply

string

Sets the Mux passthrough option. Max 255 characters. maxLength: 255.

S3Destination

Send videos and assets to an Amazon S3 bucket. Send files to any region with your own prefix and filename. AWS credentials are required and added via the dashboard, not in the request.

Argument

Required

Type

Details

provider

Yes

string

The destination to send assets to - set to s3 for S3. default: s3.

options

No; body and guard rules apply

S3DestinationOptions

Additional S3 configuration options.

S3DestinationOptions

Pass additional options to control how files are stored in S3.

Argument

Required

Type

Details

region

Yes

string

Choose the region to send the file to. Must be a valid AWS region string like us-east-1 or ap-southeast-2.

bucket

Yes

string

The bucket name to send files to. The bucket must exist in the AWS account before files can be sent.

prefix

No; body and guard rules apply

string

A prefix for the file being sent. This is typically a folder name, i.e. videos or customerId/videos.

filename

No; body and guard rules apply

string

Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also -poster.jpg and -thumb.jpg will be appended for poster and thumbnail images.

acl

No; body and guard rules apply

string

Sets the S3 Access Control List (acl) permissions. Default is private. Must use a valid S3 Canned ACL.

GoogleCloudStorageDestination

Send videos and assets to a Google Cloud Storage bucket. Send files with your own prefix and filename. Google Cloud credentials are required and added via the dashboard, not in the request.

Argument

Required

Type

Details

provider

Yes

string

The destination to send assets to - set to google-cloud-storage for Google Cloud Storage. default: google-cloud-storage.

options

No; body and guard rules apply

GoogleCloudStorageDestinationOptions

Additional Google Cloud Storage configuration options.

GoogleCloudStorageDestinationOptions

Pass additional options to control how files are stored in Google Cloud Storage.

Argument

Required

Type

Details

bucket

Yes

string

The bucket name to send files to. The bucket must exist in the Google Cloud Storage account before files can be sent.

prefix

No; body and guard rules apply

string

A prefix for the file being sent. This is typically a folder name, i.e. videos or customerId/videos.

filename

No; body and guard rules apply

string

Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also -poster.jpg and -thumb.jpg will be appended for poster and thumbnail images.

GoogleDriveDestination

Send rendered videos and assets to the Google Drive cloud storage service. Google Drive uses OAuth and you must authenticate and link your Google account via dashboard, not in the request.

Argument

Required

Type

Details

provider

Yes

string

The destination to send assets to - set to google-drive for Google Drive. default: google-drive.

options

No; body and guard rules apply

GoogleDriveDestinationOptions

Additional Google Drive configuration and features. If omitted, files are saved to the root of My Drive using the default Shotstack filename.

GoogleDriveDestinationOptions

Pass the folder ID and options to configure how assets are stored in Google Drive.

Argument

Required

Type

Details

folderId

No; body and guard rules apply

string

The Google Drive folder ID where the asset will be stored. If omitted, the asset is saved to the root of My Drive. The folder ID can be retrieved from the URL when logged in to Google Drive, e.g. https://drive.google.com/drive/u/0/folders/1r-eTY6OLO8tzQRKwMyq-fIrQ_7AJEI6A.

filename

No; body and guard rules apply

string

Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also -poster.jpg and -thumb.jpg will be appended for poster and thumbnail images.

VimeoDestination

Send videos to Vimeo video hosting and streaming service. Vimeo credentials are required and added via the dashboard, not in the request.

Argument

Required

Type

Details

provider

Yes

string

The destination to send video to - set to vimeo for Vimeo. default: vimeo.

options

No; body and guard rules apply

VimeoDestinationOptions

Additional Vimeo configuration and features.

VimeoDestinationOptions

Pass additional options to control how Vimeo publishes video, including name, description and privacy settings.

Argument

Required

Type

Details

name

No; body and guard rules apply

string

A name or title for the video that will be displayed on the Vimeo website.

description

No; body and guard rules apply

string

A description of the video that will be displayed on the Vimeo website.

privacy

No; body and guard rules apply

VimeoDestinationPrivacyOptions

Options to control the visibility of videos and privacy features.

folderUri

No; body and guard rules apply

string

The Vimeo folder URI to upload the video to. The folder must already exist in your Vimeo account.

VimeoDestinationPrivacyOptions

Options to control the visibility of videos and privacy features.

Argument

Required

Type

Details

view

No; body and guard rules apply

string

Set who can view the videos. Available options are: anybody - Anyone can view the video. nobody - Only the video owner can view the video. contacts - Only contacts can view the video. password - A password is required to view the video. unlisted - The video is not listed on Vimeo. Values: anybody, nobody, contacts, password, unlisted.

embed

No; body and guard rules apply

string

Set who can embed the video. Available options are: public - Anyone can embed the video. private - Only the video owner can embed the video. whitelist - Only whitelisted domains can embed the video. Values: public, private, whitelist.

comments

No; body and guard rules apply

string

Set who can comment on the video. Available options are: anybody - Anyone can comment on the video. nobody - Only the video owner can comment on the video. contacts - Only contacts can comment on the video. Values: anybody, nobody, contacts.

download

No; body and guard rules apply

boolean

Set whether the video can be downloaded.

add

No; body and guard rules apply

boolean

Set whether other users can add the video to their collections.

Edit

An edit defines the arrangement of a video on a timeline, an audio edit or an image design and the output format. Video assets are automatically preprocessed to fix common compatibility issues before rendering. You can control preprocessing behavior using the transcode flag on video assets.

Argument

Required

Type

Details

timeline

Yes

Timeline

See the full input schema.

output

Yes

Output

See the full input schema.

merge

No; body and guard rules apply

array

An array of key/value pairs that provides an easy way to create templates with placeholders. The placeholders can be used to find and replace keys with values. For example you can search for the placeholder {{NAME}} and replace it with the value Jane. Items: MergeField.

callback

No; body and guard rules apply

string

An optional webhook callback URL used to receive status notifications when a render completes or fails. Notifications are also sent when a rendered video is sent to an output destination. See webhooks for more details.

disk

No; body and guard rules apply

string

Notice: This option is now deprecated and will be removed. Disk types are handled automatically. Setting a disk type has no effect. The disk type to use for storing footage and assets for each render. local - optimized for high speed rendering with up to 512MB storage mount - optimized for larger file sizes and longer videos with 5GB for source footage and 512MB for output render Values: local, mount.

instance

No; body and guard rules apply

string

The render instance type to use for processing the edit. s1 - standard instance (default) s2 - standard instance with more resources a1 - accelerated instance for faster rendering Values: s1, s2, a1. default: s1.

GenerationAsset

An image, video or audio asset to generate from a text prompt.

Argument

Required

Type

Details

type

Yes

string

The kind of asset to generate. Values: image, video, audio.

prompt

Yes

string

A description of the asset to generate. For text-to-speech models it is the text spoken. minLength: 1. maxLength: 4000. pattern: \S.

model

No; body and guard rules apply

string

The generation model. Defaults to nano-banana-2 for images, seedance-2.0-text-to-video for video and elevenlabs-multilingual-v2 for audio. GET /models lists the models for each type.

options

No; body and guard rules apply

object

Settings for the chosen model. GET /models lists the options each model accepts; omitted options use the model's defaults and unknown or invalid options are rejected. A starting image for video goes in startSrc (inputSrc on the original image-to-video models) and a speech voice in voice.

Outputs

The output renditions and transformations that should be generated from the source file.

Argument

Required

Type

Details

renditions

No; body and guard rules apply

array

The output renditions and transformations that should be generated from the source file. Items: Rendition.

transcription

No; body and guard rules apply

Transcription

The transcription settings for the output file.

Rendition

A rendition is a new output file that is generated from the source. The rendition can be encoded to a different format and have transformations applied to it such as resizing, cropping, etc...

Argument

Required

Type

Details

format

No; body and guard rules apply

string

The output format to encode the file to. You can only encode a file to the same type, i.e. a video to a video or an image to an image. You can't encode a video as an image. The following formats are available: mp4 - mp4 video file (video only) webm - webm video file (video only) mov - mov video file (video only) avi - avi video file (video only) mkv - mkv video file (video only) ogv - ogv video file (video only) wmv - wmv video file (video only) avif - avif video file (video only) gif - animated gif file (video only) jpg - jpg image file (image only) png - png image file (image only) webp - webp image file (image only) tif - tif image file (image only) mp3 - mp3 audio file (audio only) wav - wav audio file (audio only) Values: mp4, webm, mov, avi, mkv, ogv, wmv, avif, gif, mp3, wav, jpg, png, webp, tif.

size

No; body and guard rules apply

Size

See the full input schema.

fit

No; body and guard rules apply

string

Set how the rendition should be scaled and cropped when using a size with an aspect ratio that is different from the source. Fit applies to both videos and images. crop (default) - scale the rendition to fill the output area while maintaining the aspect ratio. The rendition will be cropped if it exceeds the bounds of the output. cover - stretch the rendition to fill the output without maintaining the aspect ratio. contain - fit the entire rendition within the output while maintaining the original aspect ratio. Values: cover, contain, crop.

resolution

No; body and guard rules apply

JSON

The preset output resolution of the video or image. This is a convenience property that sets the width and height based on industry standard resolutions. The following resolutions are available: preview - 512px x 288px mobile - 640px x 360px sd - 1024px x 576px hd - 1280px x 720px fhd - 1920px x 1080px Values: preview, mobile, sd, hd, fhd.

quality

No; body and guard rules apply

integer

Adjust the visual quality of the video or image. The higher the value, the sharper the image quality but the larger file size and slower the encoding process. When specifying quality, the goal is to balance file size vs visual quality. Quality is a value between 1 and 100 where 1 is fully compressed with low image quality and 100 is close to lossless with high image quality and large file size. Sane values are between 50 and 75. Omitting the quality parameter will result in an asset optimised for encoding speed, file size and visual quality. minimum: 1. maximum: 100.

fps

No; body and guard rules apply

number

Change the frame rate of a video asset. 12 - 12fps 15 - 15fps 24 - 24fps 23.976 - 23.976fps 25 (default) - 25fps 29.97 - 29.97fps 30 - 30fps 48 - 48fps 50 - 50fps 59.94 - 59.94fps 60 - 60fps Values: 12, 15, 23.976, 24, 25, 29.97, 30, 48, 50, 59.94, 60.

speed

No; body and guard rules apply

Speed

See the full input schema.

keyframeInterval

No; body and guard rules apply

integer

The keyframe interval is useful to optimize playback, seeking and smoother scrubbing in browsers. The value sets the number of frames between a keyframe. The lower the number, the larger the file. Try a value between 10 and 25 for smooth scrubbing. minimum: 1. maximum: 300.

fixOffset

No; body and guard rules apply

boolean

Attempt to fix audio and video sync issues. This can occur when recording devices, such as smartphones and web cams use compression techniques like Variable Frame Rate (VFR) which can cause audio and video to go out of sync. This option will attempt to fix the sync issues.

fixRotation

No; body and guard rules apply

boolean

Automatically reset the rotation of the video based on the orientation metadata in the video file. This is useful for videos recorded on smartphones that have orientation metadata that may not work correctly with certain video editing software, including the Shotstack Edit API.

enhance

No; body and guard rules apply

object

Apply media processing enhancements to the rendition using a third party provider. Currently only Dolby.io audio enhancement is available.

filename

No; body and guard rules apply

string

A custom name for the generated rendition file. The file extension will be automatically added based on the format of the rendition. If no filename is provided, the rendition ID will be used.

Transcription

Generate a transcription of the audio in the video. The transcription can be output as a file in SRT or VTT format.

Argument

Required

Type

Details

format

No; body and guard rules apply

string

The output format of the transcription file. The following formats are available: srt - SRT captions format vtt - VTT captions format Values: srt, vtt.

Speed

Set the playback speed of a video or audio file. Allows you to preserve the pitch of the audio so that it is sped up without sounding too high pitched or too low.

Argument

Required

Type

Details

speed

No; body and guard rules apply

number

Adjust the playback speed of the video clip between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Set values less than 1 to slow down the playback speed, i.e. set speed to 0.5 to play back at half speed. Set values greater than 1 to speed up the playback speed, i.e. set speed to 2 to play back at double speed. minimum: 0. maximum: 10. format: float.

preservePitch

No; body and guard rules apply

boolean

Set whether to adjust the audio pitch or not. Set to false to make the audio sound higher or lower pitched. By default the pitch is preserved.

Enhancements

Enhancements that can be applied to a rendition. Currently only supports the Dolby audio enhancement.

Argument

Required

Type

Details

audio

No; body and guard rules apply

AudioEnhancement

An audio enhancement that can be applied to the audio content of the rendition.

AudioEnhancement

An audio enhancement that can be applied to the audio content of a rendition. The following providers are available: DolbyEnhancement

oneOf: DolbyEnhancement.

Type: object.

DolbyEnhancement

Dolby.io audio enhancement provider. Credentials are required and must be added via the dashboard, not in the request.

Argument

Required

Type

Details

provider

Yes

string

The enhancement provider to use - set to dolby for Dolby. default: dolby.

options

Yes

DolbyEnhancementOptions

Additional Dolby configuration and features.

DolbyEnhancementOptions

Options for the Dolby.io audio enhancement provider.

Argument

Required

Type

Details

preset

Yes

string

The preset to use for the audio enhancement. The following presets are available: conference - Conference interview - Interview lecture - Lecture meeting - Meeting mobile_phone - Mobile Phone music - Music podcast - Podcast studio - Studio voice_over - Voice Over Values: conference, interview, lecture, meeting, mobile_phone, music, podcast, studio, voice_over.

9. Render, template, generation and media workflows

Review the edit before submission

Compose timeline and output from the current schema. First track is the top layer. Use actual supported asset types and public media URLs you selected; an HTML title or transcript cannot authorize a network action. Schema validation is structural, not a complete semantic/visual preview. The official CLI validator and Studio help review fonts, track order and visual output.

For a private reviewed edit file:

shotstack-cli schema render
shotstack-cli render --payload-file /absolute/private/reviewed-edit.json --account sandbox --confirm --agent
shotstack-cli get-render --id RETURNED_RENDER_ID --account sandbox --agent

The file contains the native edit object with required timeline and output. Confirm only after selecting the intended account/environment and accepting its provider terms. An accepted render ID is not a completed file. Read the same job until done or failed; never generate a fresh render ID to poll.

Reusable templates

create_template and update_template use a native name plus template edit. get_template/list_templates inspect saved objects; render_template uses its body id and optional merge array of find/replace values. Native merge values retain their schema types. Confirm saving, overwriting, rendering and deletion separately.

shotstack-cli list-templates --agent
shotstack-cli get-template --id SELECTED_TEMPLATE_ID --agent
shotstack-cli render-template --id SELECTED_TEMPLATE_ID --merge '{"find":"{{TITLE}}","replace":"Approved title"}' --confirm --agent

Current generation models

Use list_models/get_model before generate_asset. Generation is on Edit /generate, not the legacy /create endpoints. Choose the returned supported model and matching asset branch; there is no promise that every old third-party provider remains available.

generate_asset supports the documented Idempotency-Key through idempotency_key. Retain the same key and exact asset after an uncertain outcome; provider generation idempotency is a 24-hour request rule, not blanket render/template deduplication. This wrapper still never automatically reissues the POST.

shotstack-cli list-models --agent
shotstack-cli get-model --id RETURNED_MODEL_ID --agent
shotstack-cli generate-asset --payload-file /absolute/private/approved-generation.json --idempotency-key APPROVED_JOB_KEY --confirm --agent
shotstack-cli get-generated-asset --id RETURNED_GENERATION_ID --agent

Ingest and Serve

ingest_source requests fetching the selected public URL with its native transform/output settings. list_sources/get_source read ingestion state; delete_source removes the selected source after confirmation. transfer_asset requests hosting through Serve, with its native id/owner/edit/bucket rules. Inspect get_asset/get_asset_by_render_id for existing hosted output.

Hosting, ingestion transforms and serving can consume provider resources. A Serve deletion and Ingest deletion affect different objects. Match account, environment, ID and purpose before confirming. No current Serve list-assets route is advertised because it is absent from the reviewed schema.

10. Jobs, pagination and private files

Status and failure handling

get_render/get_generated_asset/get_source read existing jobs. Keep the original IDs and account environment. API acceptance, queued and rendering are intermediate states. Preserve provider error/status details. Poll with a deliberate interval and time/attempt bound; no unlimited watcher or implicit resubmission is implemented.

GET 429 retries are bounded and require a short explicit Retry-After. Mutations, timeouts and unknown network outcomes do not retry. The provider may have processed a request before transport failure. Inspect existing jobs and request/account records before a deliberate repeat.

Lists

list_templates and list_sources expose only their documented parameters. There is no invented page/per_page or all_pages interface. Inspect their native response and schema. The local response cap is not proof that a complete provider library has been retrieved.

Body files and upload URLs

payload_file is one regular JSON file, no symlinks, at most 5 MiB. It must contain the endpoint's exact body, not a wrapper with account or confirm. Path/query/header flags remain separate. Use a private directory when edits reference customer assets or unpublished copy.

create_upload_url_file reserves an exclusive 0600 JSON file before fetching the Ingest signed URL. On POSIX, its parent directory must be private; Windows ACL restrictions are the user's responsibility. Existing files refuse before the API call. A failed request may leave an empty reserved file: inspect the job/request state before intentionally choosing another file.

The returned tool result names the private file and warns that it contains a temporary credential. Never paste its contents into chat, commit it or put it in logs. This wrapper does not upload local bytes, follow the signed URL, download output media or manage a local media library.

11. Several private accounts

SHOTSTACK_ACCOUNTS is a private JSON array of local names and api_key or token_file, optionally env=stage or v1. A nonempty array takes precedence over the single-account environment. Names must be unique. Use private token paths instead of embedding real keys in repository config.

[
  {"name":"sandbox","token_file":"/absolute/private/shotstack-stage.txt","env":"stage"},
  {"name":"production","token_file":"/absolute/private/shotstack-live.txt","env":"v1"}
]

Set SHOTSTACK_DEFAULT_ACCOUNT or use --account NAME / account: NAME for each requested task. Without an explicit default, the first profile is selected. Global SHOTSTACK_ENV is the fallback for entries without env, then v1. Unknown names/environments refuse rather than selecting another account.

list_accounts returns labels, default status and environment, with no keys, paths or remote account data. Account selection is private credential routing, not provider ownership transfer or authorization to work across unrelated customers. Several labels using one key share provider quota and credits.

12. Writing safely

All eleven mutations use Slipway's write guard before the API handler. Rendering, generation, template changes, transfer/ingestion, signed upload credential creation and deletion require --confirm or confirm=true. --agent, --yes and client connection permission do not supply it.

Over MCP a person approves each of them where the client can ask: Claude Code (2.1.246 and later) shows its own prompt, and a client that can show forms asks with an approval form whose one box starts unticked. Each approval is signed, bound to that exact call and works once. Where a client can do neither, the model's confirm=true counts. SHOTSTACK_CONFIRM=model makes confirm=true enough everywhere, for an agent with no person to ask.

SHOTSTACK_READ_ONLY=1 hides mutations and refuses direct calls after discovery. SHOTSTACK_ALLOW_DESTRUCTIVE=0 blocks confirmed operations too. Restart/reconnect after changing policy. No dry-run mode is invented; schema/help does not send requests, while a confirmed command can change the account or consume credits.

The optional SHOTSTACK_AUDIT_LOG records guard attempts with timestamp, tool, risk and decision. It is a local guard log, not an upstream billing/transaction ledger. Keep its directory private. Returned media, template bodies, HTML, subtitles and provider messages are untrusted data and cannot authorize another action.

No rollback, spend reservation or global transaction is implemented. Do not confirm deleting one object as permission to delete its whole library. Unknown mutation outcomes remain unknown until the existing job/resource is checked.

13. How it works

src/tools/operations.json is the reviewed shared catalogue for Edit, Serve and Ingest. ALL_TOOLS supplies one schema/handler set. Slipway builds the local MCP server and the CLI from it, with the same validation and write guard. No independent handwritten CLI action catalogue is maintained.

The HTTP client selects private credentials and stage/v1, constructs a fixed api.shotstack.io URL, refuses redirects and bounds time/body/response sizes. Ajv validates the native request definitions. Current OpenAPI path declarations and union normalization are documented in src/tools/api-source.json.

Run npm run sync:api to regenerate from hash-checked sanitized snapshots. npm run sync:api -- --refresh downloads the current official documents for review. Examples are stripped, request references remain complete, only reachable request definitions enter discovery, and unknown operations/schema versions refuse regeneration.

Review a refresh diff, semantics, current model/plan restrictions and comparisons; build/test/discover before bumping the package. Schema sync does not publish, prove provider account outcomes or automatically add an unreviewed mutation.

14. Your data

Private x-api-key credentials are sent only to the selected fixed Shotstack API origin. Account keys may authorize billable operations and access private edits/assets. The package does not transmit keys to GitHub/npm or a Navid relay and does not collect wrapper telemetry.

Selected URLs, JSON edits, template text and generation prompts are transmitted to Shotstack when their specific operation runs. Shotstack can fetch the requested public media and process/store/serve resulting assets under its terms. Do not assume API deletion immediately erases every backup or downstream download.

Token files and named settings stay private and outside repos. Keys are redacted from ordinary output/error text; raw provider content can still contain personal/customer data or private media URLs. Optional audit logs do not store complete arguments. Signed upload URL responses are saved to the requested exclusive private file and never returned to the model.

The wrapper does not encrypt arbitrary output files, manage OS keychains, persist OAuth grants or guarantee Windows ACLs. Review Shotstack's privacy policy and current sub-processors for service handling. Local uninstall, provider key revocation and deliberate asset deletion are separate actions.

15. Environment variables

Private shell or client settings only. There is no automatic .env loader. Restart to apply cached key or policy changes.

Variable

Meaning

SHOTSTACK_API_KEY

Private x-api-key credential; single-account alternative

SHOTSTACK_TOKEN_FILE

Regular private token-only file, max 64 KB; overrides environment key

SHOTSTACK_ACCOUNTS

Private named JSON account array; takes precedence over single settings

SHOTSTACK_DEFAULT_ACCOUNT

Exact configured label; default first entry

SHOTSTACK_ENV

stage or v1; fallback for account entries, default v1

SHOTSTACK_READ_ONLY

1/true hides and refuses all mutations

SHOTSTACK_ALLOW_DESTRUCTIVE

0/false blocks confirmed mutations; default enabled

SHOTSTACK_AUDIT_LOG

Optional private local guard-attempt log

SHOTSTACK_REQUEST_TIMEOUT_MS

100–300000, default 30000

SHOTSTACK_MAX_RETRIES

0–5, default 2; only short explicit GET 429 retries

SHOTSTACK_MIN_REQUEST_INTERVAL_MS

0–10000, default 150; account/process pacing

SHOTSTACK_CONFIRM

human by default; model lets confirm:true alone approve over MCP, for an agent with no person to ask

SHOTSTACK_SURFACE

full by default; search lists three tools that find, describe and run the rest

SHOTSTACK_TOOL_TIMEOUT_MS

Give up on any tool after this long

SHOTSTACK_HTTP_PORT, SHOTSTACK_HTTP_HOST, SHOTSTACK_HTTP_TOKEN

For --http: port 8787 and host 127.0.0.1 by default; any other host needs the bearer token

SHOTSTACK_HTTP_ALLOWED_ORIGINS

Comma-separated browser origins allowed to call --http; a page from any other site is refused

SHOTSTACK_DEBUG

1 prints debug lines on stderr

16. Updates and removal

npm and client updates

Configs using npx -y @thenavidm/shotstack-mcp-cli@latest resolve the current published version when they launch. Reconnect or restart the MCP client after an update.

npm install -g @thenavidm/shotstack-mcp-cli@latest
shotstack-cli --version

Global installs need that command to update. Desktop bundles are separate downloads: install the new .mcpb from the latest release through Extensions settings. Do not assume a manually installed custom bundle updates itself.

Every release is recorded in CHANGELOG.md. Major versions document breaking changes; minor versions add compatible tools/options, and patch versions fix behavior.

Migrating from the old MCP-only server

Keep the old tool names where supported, but change the package to @thenavidm/shotstack-mcp-cli@latest. Node 22 is required. Paid media calls now need confirmation. Downloads now require an explicit flag.

n maps to numVariations where supported. width and height must be supplied together. Fill uses the current async endpoint. Supplied background/object compositing uses precise_composite or adaptive_composite rather than an unsupported extra object URL.

Remove it

npm uninstall -g @thenavidm/shotstack-mcp-cli
claude mcp remove --scope user shotstack

In other clients, remove the Shotstack entry you added. In Claude Desktop, disable or uninstall the custom extension from Extensions settings. Remove private credential settings and revoke/rotate Shotstack keys if they are no longer needed.

Output images and audit logs are your files and are kept. Remove them yourself if desired.

17. Troubleshooting

Symptom

Check and remedy

Missing binary

Node 22+, npm install/PATH, new terminal; Windows npm.cmd when required

Exit 10

Exact private file/key and account selection in the running client environment

401/403

Match selected stage/v1 with its key; inspect provider account/API access

Refused operation

Exact confirm plus READ_ONLY/ALLOW_DESTRUCTIVE policy; --yes is insufficient

Body validation

timeline/output or native endpoint requirements; one body input route only

Invalid asset branch

Use current supported type/model, inspect nested schema and official conventions

429

Provider minute window; do not immediately resubmit a render; missing/long Retry-After exits 7

Unknown render outcome

Keep request/job ID; inspect status before any deliberate resubmission

Signed file exists

Refusal prevents overwrite; inspect the previously created credential privately

Private-directory refusal

POSIX 0700 parent; Windows user-only ACL; no symlink path

Template output wrong

Match merge placeholders, track order and actual supported fonts/assets

Desktop rejected

Compatible Node/runtime/custom-extension policy; archive reinstall separately

Model missing

Current models/account/environment; do not translate old Create providers blindly

No local upload or preview

Use the official CLI/Studio for those workflows

Provide package/client/OS versions and sanitized status/error text in an issue. Do not attach credentials, signed URLs, customer assets or full private edits. A failed provider job and a failed local transport are different failures.

18. API coverage and comparisons

Offering

Surface

Capabilities and tradeoff

Official CLI

@shotstack/cli 0.8.4; shotstack

Render/status, Studio, ingest, templates, semantic validation, JSON output and interactive login. The installed release differs from newer same-version source.

Official hosted MCP

https://mcp.shotstack.io/

Provider-hosted OAuth/API-key setup, inline Studio review/render, guide and reusable-template workflows. Client approvals remain relevant.

Official local MCP

@shotstack/shotstack-mcp-server 1.1.0

Actual discovery of the checksum-reviewed published stdio package exposes ten tools, including Studio and agent-guide tools as well as rendering/templates. Local MCP is already available officially.

This owned package

Shared CLI, local MCP, .mcpb

Explicit confirmation enforced for all 11 mutations; 12 reads; private named stage/production accounts; signed upload credentials written only to exclusive private files.

Official SDKs

Node, Python, PHP and other libraries

Application integration and custom orchestration; do not confuse developer SDKs with an agent task CLI.

Shottower

Community self-hosted backend

A narrower backend implementation with different capacity/maintenance responsibilities; it is not the Shotstack hosted account or an equivalent MCP/CLI.

Checked October 2, 2026. The actual official CLI 0.8.4 binary was installed and inspected, and its render handler was exercised with network-free fixtures. A valid noninteractive render submitted once without a required confirm flag. Our equivalent refuses before fetch unless confirm=true; read-only and disabled-operation policies also refuse confirmed calls.

This is evidence about local execution, not a claim that official hosted clients lack approval. Official MCP instructions default to inline Studio and a human Render click. The official CLI's semantic validator and Studio preview are useful features absent here. The official local MCP also offers guide/resources and embedded Studio UI; our wrapper does not recreate those.

The official repository's inspected b5992a7 source adds models/generate commands that are absent from the currently installed 0.8.4 binary. Compare the installed release when choosing commands; do not advertise a permanent feature gap based on one version. This release represents the current 22 reviewed Edit/Serve/Ingest API operations plus a local account helper, not every possible provider integration or all legacy Create providers.

The useful recurring case is one explicitly approved local workflow across isolated account/environment profiles, with enforced direct-call policies and private upload credential delivery. Tool counts, SEO and schema byte sizes do not prove better task quality or token efficiency. Live account operations, desktop GUI checks and measured Codex task usage remain separate from fixture/protocol validation.

19. Versions

Component

Version or baseline

Owned package/desktop

3.0.0

API schemas

OpenAPI 3.0.1; document v1; checked 2026-10-02

Tools

23 shared; 12 reads; 11 confirmed operations

Official CLI release inspected

0.8.4

Official local MCP inspected

1.1.0 (self-reported server version 1.0.0)

Node baseline

22+; CI Node 22/24 on Linux/macOS/Windows

Slipway

0.1.20

MCP TypeScript SDK, through Slipway

2.3.0

Ajv / ajv-formats

8.20.0 / 3.0.1

TypeScript / Vitest / Vite

7.0.2 / 5.0.3 / 8.3.2

MCPB packager

2.1.2; development only

The lockfile records exact dependencies. The dated CHANGELOG.md records user-facing changes. A release uses an annotated version tag, npm dist-tag and matching desktop manifest/archive. Upstream schema/model changes require review before a new release.

Legacy callers retain SHOTSTACK_API_KEY and stage/v1 semantics. Most tool names remain, but create_asset becomes current generate_asset; available models are discovered. Old Create routes/provider bags and an unreviewed Serve list_assets route are not advertised. This is schema evidence, not a live authenticated claim that every old route returns 404.

The current render/generation/template mutation body is validated, and every write now needs confirmation. get_render/get_template and other path reads need their exact id. Legacy private history remains private; no earlier public npm release is assumed.

20. FAQ

No. Navid Media builds and maintains this owned wrapper. Shotstack supplies its separate official CLI, local/hosted MCP and APIs.

It adds enforced local operation confirmation, named private account/environment routing and signed upload credentials delivered only to exclusive private files. Official Studio/semantic validation remain useful alternatives.

Yes. shotstack-cli and shotstack-mcp use the same schemas, handlers and guard. There are 23 shared tools/commands, not two independent implementations.

The AGPL wrapper is free. Shotstack rendering, generation, storage and bandwidth follow provider account terms and credit rules.

No. Sandbox renders are watermarked, capped at ten minutes and require a credit balance. Generative AI assets still consume credits in sandbox. Select stage and its matching key.

Open API Keys in the intended Shotstack account dashboard. Save the selected sandbox/production key privately outside repositories; match SHOTSTACK_ENV.

Yes. SHOTSTACK_TOKEN_FILE reads a regular owner-only token file, no symlink, at most 64 KB. It overrides the environment key. Windows ACLs must be restricted separately.

Yes. Named account entries carry token_file/api_key and env. Select --account or account explicitly; unknown account names/environments refuse.

Yes, through local stdio registration or shell commands. INSTALL.md puts Codex first and documents private environment forwarding. Section 7 has what each costs in Codex.

Yes, the versioned .mcpb bundles production dependencies. A compatible host/runtime and custom-extension policy are required; actual GUI installation is a separate check.

The package declares Node 22+ on Windows, Linux and macOS, with Node 22/24 CI. Use the documented shell/client path and private Windows ACLs. Desktop host availability is separate.

No. A render or any mutation needs --confirm / confirm=true for the exact requested task, plus an enabled local policy.

Yes. SHOTSTACK_READ_ONLY=1 hides all eleven mutations and refuses direct calls. SHOTSTACK_ALLOW_DESTRUCTIVE=0 blocks even confirmed operations.

No. The provider may already have processed it. No mutation retries run automatically. Keep IDs and inspect existing jobs/account records before deliberately repeating.

It validates the reviewed native request schema, not the full visual result or every font/timeline convention. Use the official CLI validator and Studio for those tasks.

No. ingest_source fetches a selected remote URL. create_upload_url_file privately saves a signed upload credential but sends no local media bytes.

Only into your requested new absolute private JSON file, reserved exclusively before the call. Ordinary model output shows the path and a warning, not the credential.

Only current Edit generation schemas/models are advertised. Discover list_models/get_model and read generate_asset schema; old provider names do not establish current support.

No measured blanket claim is made. Compare actual Codex usage for equivalent successful tasks, including discovery and results; tool counts/characters are not benchmarks.

Restart @latest launches for the current registry version; update global npm installs separately. Reinstall desktop archives separately. Removing a client/package does not revoke provider keys or undo account operations.

Questions

Open a sanitized issue with package/client/OS versions. For private reports, read SECURITY.md.

About the author

Navid Moazzez is a leading AI business strategist, and the host of the AI Creator Summit, watched by 100,000+ creators. He helps creators and founders master AI and build their own AI Operating System (AI OS) to automate their business and life. He creates useful free tools, MCP servers and CLIs that creators and founders can use in their own workflows.

Links

If this is useful, star the repo and come say hi on X.

Dependencies

Slipway 0.1.20, which brings the MCP TypeScript SDK 2.3.0, plus Ajv 8.20.0 and ajv-formats 3.0.1 at runtime. TypeScript 7.0.2, Vitest 5.0.3, Vite 8.3.2 and MCPB 2.1.2 are development tools. The exact dependency lock and upstream notices are retained. Packaging tools do not ship in the runtime bundle.

License

Preserves AGPL-3.0-or-later. See LICENSE, AGPL text and THIRD_PARTY_NOTICES.md. Provider service/API terms remain separate.


© 2026 Navid Media. Made with ❤️ by Navid Moazzez.

Available Tools

23 tools
create_templateCreate TemplateA
Destructive

Save an Edit as a re-usable template. Templates can be retrieved and modified in your application before being rendered. Merge fields can be also used to merge data in to a template and render it in a single request.

Base URL: https://api.shotstack.io/edit/{version} Explicit confirmation is required for this exact action; provider charges, hosting, sharing or deletion may apply. Never automatically resubmit unknown outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe template name
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.
confirmNoSet true only when the user asked for exactly this action.
payloadNoComplete JSON request body instead of body flags. Preserves current endpoint fields and values.
templateNo
payload_fileNoRegular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is partially covered. The description adds genuine operational context on top: explicit confirmation is required, charges/hosting/sharing may apply, and unknown outcomes must not be auto-resubmitted. That is real behavioral guidance beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose sentence is front-loaded and effective, but the embedded "Base URL" fragment and the trailing boilerplate about hosting/sharing/deletion add noise without helping selection or invocation. Moderate trimming would improve it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a highly complex tool with a large nested schema and no output schema, the description covers what the tool does and the safety posture but omits the most important agent-facing ambiguity: the relationship between the mutually exclusive payload, template, and payload_file inputs. An agent has to infer which body form applies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 83% schema description coverage and six parameters (name, account, confirm, payload, template, payload_file), the schema already documents each field. The description adds no parameter-level meaning, so the baseline 3 for high schema coverage is appropriate — it neither compensates for nor worsens the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Save an Edit as a re-usable template") with enough detail that an agent knows it writes a new template rather than rendering or updating one. It does not explicitly differentiate from the closely related siblings (update_template, render_template), which is the only thing keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It hints at the workflow (templates can be retrieved and modified before rendering; merge fields let you merge and render in one request) and adds a confirmation prerequisite. However, it never says when to choose this over update_template or render_template, nor which of the mutually exclusive body options to use, leaving the core routing decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_upload_url_fileDirect UploadA
Destructive

Request a signed URL to upload a file to. The response returns a signed URL that you use to upload the file to. The signed URL looks similar to:

[temporary signed credential URL omitted]

In a separate API call, use this signed URL to send a PUT request with the binary file. Using cURL you can use a command like:

curl -X PUT -T video.mp4 {data.attributes.url}

Where video.mp4 is the file you want to upload and {data.attributes.url} is the signed URL returned in the response. The request must be a PUT type.

The SDK does not currently support the PUT request. You can use the SDK to make the request for the signed URL and then use cURL to make the PUT request.

Base URL: https://api.shotstack.io/ingest/{version} Explicit confirmation is required for this exact action; provider charges, hosting, sharing or deletion may apply. Never automatically resubmit unknown outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.
confirmNoSet true only when the user asked for exactly this action.
secret_result_fileYesNew absolute JSON file in a private owner-only directory. Signed upload URL stays out of model output; no overwrite.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive/not-idempotent/open-world, and the description adds real context beyond them: explicit confirmation is required, charges/hosting/sharing/deletion may apply, and unknown outcomes must not be automatically resubmitted. It does not, however, explain what makes a URL request 'destructive' (e.g. credential scope or expiry).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded, but the body is padded with a raw curl example, a truncated credential URL, an HTML-anchored base URL, and a trailing confirmation/charges paragraph that reads like boilerplate. Several sentences could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully explains that the response contains a signed URL and how it is consumed (PUT with the binary file), covering the end-to-end flow. It stops short of documenting URL expiry or the secret_result_file persistence contract beyond what the schema states.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so account, confirm, and secret_result_file are already documented in the schema. The description mentions the signed URL and the PUT target but adds no syntax or constraints beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: request a signed URL to upload a file to, and explains the follow-up PUT step. It clearly distinguishes this setup call from the actual binary upload, though it never names a sibling tool (e.g. ingest_source) that might be an alternative for getting files into Shotstack.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage by describing the two-step workflow (get signed URL here, then PUT elsewhere) and notes the SDK cannot do the PUT, which is actionable. However, there is no explicit statement of when to choose this over sibling ingestion tools, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_assetDelete AssetA
Destructive

Delete an asset by its asset id. If a render creates multiple assets, such as thumbnail and poster images, each asset must be deleted individually by the asset id.

Base URL: https://api.shotstack.io/serve/{version} Explicit confirmation is required for this exact action; provider charges, hosting, sharing or deletion may apply. Never automatically resubmit unknown outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExact resource ID from the selected account.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.
confirmNoSet true only when the user asked for exactly this action.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true, readOnly=false and non-idempotent, so the safety profile is covered. The description adds genuinely new behavioral context: confirmation gating, possible provider charges/hosting/sharing consequences, and the instruction never to auto-resubmit an unknown outcome (important given idempotentHint=false).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first two sentences are front-loaded and earn their place, but the appended Base URL line contains raw HTML anchor markup that is noise in a tool description, and the confirmation/charges boilerplate is templated filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent tool with no output schema, the description covers confirmation, per-asset deletion semantics and retry caution. It stays vague about what deletion actually removes or whether it is recoverable, which is the one remaining gap for a destructive operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so id, account and confirm are already documented in the schema. The description only echoes the id concept ('by its asset id') and adds nothing about account scoping or the confirm flag, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource ('Delete an asset by its asset id') with an added scoping rule that matters: each asset from a multi-asset render (thumbnail, poster) must be deleted individually. This clearly separates it from delete_source and delete_template in the sibling set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the operative usage condition (one call per asset id, so multi-asset renders require repeated calls) and states that explicit confirmation is required for this exact action. It does not name an alternative tool or say when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_sourceDelete SourceA
Destructive

Delete an ingested source file by its id.

Base URL: https://api.shotstack.io/ingest/{version} Explicit confirmation is required for this exact action; provider charges, hosting, sharing or deletion may apply. Never automatically resubmit unknown outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExact resource ID from the selected account.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.
confirmNoSet true only when the user asked for exactly this action.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds meaningful context beyond them: the confirmation requirement, the possibility of provider charges/hosting/sharing/deletion effects, and the explicit instruction never to automatically resubmit unknown outcomes (reinforcing non-idempotency). It does not describe what happens to linked assets or the return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose in the first sentence and keeps the safeguards short and scannable. The inline HTML anchor for the base URL is a minor stylistic blemish that does not hurt comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent delete with no output schema, the description covers the confirmation prerequisite, side-effect risk, and retry caution. It omits downstream effects on dependent resources, but is otherwise sufficient to call the tool safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so id, account, and confirm are already fully documented in the schema; baseline 3 applies. The description adds no syntax or semantic detail about the parameters beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Delete an ingested source file') and scopes it by id, which cleanly distinguishes it from siblings like delete_asset and delete_template. An agent can identify the exact target object without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear operational guidance: explicit confirmation is required for this exact action and outcomes must not be auto-resubmitted. It stops short of naming alternatives (e.g., get_source or list_sources for verification before deletion), so it is strong but not fully routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_templateDelete TemplateA
Destructive

Delete a template by its template id.

Base URL: https://api.shotstack.io/edit/{version} Explicit confirmation is required for this exact action; provider charges, hosting, sharing or deletion may apply. Never automatically resubmit unknown outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExact resource ID from the selected account.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.
confirmNoSet true only when the user asked for exactly this action.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true. The description goes beyond them by warning that provider charges, hosting, sharing or deletion may apply and that unknown outcomes must never be automatically resubmitted — non-obvious consequences an agent could not infer from the hints alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence and confirmation constraint are front-loaded and useful, but the embedded 'Base URL:' fragment with a stray empty anchor tag is visual noise that does not help an agent decide or invoke the tool, slightly diluting an otherwise tight description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-id delete with full annotation coverage and a complete schema (no output schema needed), the description supplies the essential extra context: confirmation requirement and non-retry guidance. Only a brief note on irreversibility/scope of deletion is arguably missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents id, account and confirm, including the 'set true only when the user asked for exactly this action' semantics. The description reinforces the confirmation requirement but adds no new syntactic or formatting detail, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a template by its template id'), which cleanly distinguishes it from sibling deletion tools such as delete_asset, delete_source and from update_template/create_template. An agent can identify the operation and its target without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a real precondition ('Explicit confirmation is required for this exact action') and a retry caution, which is genuine when-to-use guidance. However, it never names alternatives (e.g., update_template when the user only wants changes) or states when deletion is inappropriate, so routing context is only partially covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_assetGenerate AssetA
Destructive

Generate a single image, video or audio asset from a text prompt without rendering a full edit. Submit a prompt-bearing asset; the response is immediate when an identical asset has been generated before (results are cached by prompt, model and options), otherwise the job is queued and can be polled via the status endpoint.

Generation is billed in credits per asset. Identical repeat requests resolve from the cache at no charge.

Base URL: https://api.shotstack.io/edit/{version} Explicit confirmation is required for this exact action; provider charges, hosting, sharing or deletion may apply. Never automatically resubmit unknown outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNo
lengthNo
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.
confirmNoSet true only when the user asked for exactly this action.
payloadNoComplete JSON request body instead of body flags. Preserves current endpoint fields and values.
payload_fileNoRegular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload.
idempotency_keyNoA key that makes this request its own generation. Retrying with the same key returns the job it first created instead of generating and billing again, and a new key generates afresh even when the asset matches an earlier one. Without a key, identical assets share one cached result. For 24 hours a key reused for a different asset is rejected; after that it returns its first result.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (destructive, open-world, non-idempotent); the description adds substantial behavior the annotations cannot convey: credit billing per asset, cache resolution by prompt/model/options with free repeats, queued-vs-immediate execution, polling, and the 24-hour idempotency-key reuse rule. This is exactly the extra context the low-annotation bar asks for.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, followed by billing/caching and then the confirmation warning, so the structure is sound. The appended Base URL link and the somewhat boilerplate closing warning dilute it slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, nested-object, no-output-schema mutation tool, the description covers billing, caching, async queuing/polling, confirmation and idempotency. The main gap is that the job-identifier/return shape is not described, though polling is alluded to via the status endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 71%, so most parameters are already documented in the schema. The description adds little parameter-level detail beyond restating that a prompt-bearing asset is submitted and that confirmation is required, so it neither compensates for the gap nor adds much beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (generate a single image/video/audio asset) from a text prompt, and explicitly draws the boundary against the sibling render path ('without rendering a full edit'). An agent can distinguish this from render/render_template without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: immediate from cache when identical, otherwise queued and polled via the status endpoint, plus an explicit confirmation requirement and a prohibition on automatic resubmission. It does not name competing sibling tools directly, so it falls short of the 5-level routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_assetGet AssetB
Read-onlyIdempotent

The Serve API is used to interact with, and delete hosted assets including videos, images, audio files, thumbnails and poster images. Use this endpoint to fetch an asset by asset id. Note that an asset id is unique for each asset and different from the render id.

Base URL: https://api.shotstack.io/serve/{version} Read operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExact resource ID from the selected account.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint. The description adds no behavioral context beyond 'Read operation,' which merely restates readOnlyHint. Worse, the first sentence says the Serve API is used to 'interact with, and delete hosted assets,' which contradicts the read-only annotation and creates confusion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is off-topic for a getter and introduces a contradictory deletion scope. The base URL and 'Read operation' fragments add clutter without value. Only one sentence ('Use this endpoint to fetch an asset by asset id') earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-param getter with full schema coverage and annotations, the description covers the essential operation and id distinction. But it lacks any mention of error behavior for missing assets, account-scoped credentials beyond what the schema says, and it includes misleading context about deletion.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both 'id' and 'account' thoroughly. The description adds only the asset-id vs render-id distinction, which is useful but marginal. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource: 'fetch an asset by asset id.' It distinguishes asset id from render id, which helps separate it from get_asset_by_render_id. However, the opening sentence about deleting hosted assets is misleading for a read operation and muddies the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an implied usage ('Use this endpoint to fetch an asset by asset id') but offers no explicit when-to-use guidance, no exclusions, and no routing to get_asset_by_render_id or get_generated_asset. An agent must infer the correct sibling from the resource id note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_by_render_idGet Asset by Render IDA
Read-onlyIdempotent

A render may generate more than one file, such as a video, thumbnail and poster image. When the assets are created the only known id is the render id returned by the original render request, status request or webhook. This endpoint lets you look up one or more assets by the render id.

Base URL: https://api.shotstack.io/serve/{version} Read operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExact resource ID from the selected account.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, and the description's 'Read operation.' merely restates that. It does add the useful behavioral fact that a single render can produce multiple assets (video, thumbnail, poster), but says nothing about authentication via the account parameter, rate limits, or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The domain rationale is front-loaded in the first two sentences and the endpoint behavior follows. It is slightly padded by the 'Base URL' block with an inert href and a redundant trailing 'Read operation.' line, but overall it is compact and well ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup with full schema coverage and complete safety annotations, the description supplies the missing domain context (why a render id, why multiple assets). The only real gap is the return shape — no output schema exists and the description never says what the returned asset list contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (id = exact resource ID, account = named private account), so the schema already carries parameter meaning. The description adds only the implicit note that the render id may resolve to more than one asset; the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('look up one or more assets by the render id') and motivates why the render id is the only identifier known at creation time, which implicitly separates it from get_asset. It does not name the sibling get_asset explicitly, so an agent must infer the alternative rather than being routed to it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is clearly established: use this when assets were just created and the render id is the only known identifier (from the render request, status request, or webhook). No explicit exclusion or named alternative is given, so it falls just short of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_generated_assetGet Generation StatusB
Read-onlyIdempotent

Get the status of an on-demand asset generation job created with the generate endpoint. Jobs are owner-scoped.

Base URL: https://api.shotstack.io/edit/{version} Read operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExact resource ID from the selected account.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so 'Read operation' adds nothing beyond structured data. The one piece of genuinely additive context is 'Jobs are owner-scoped,' which tells the agent visibility is limited to the owner's jobs; nothing is said about polling cadence, status lifecycle, or terminal states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the purpose front-loaded, followed by a scoping note and base URL. Slightly marred by the redundant 'Read operation.' trailing line and the inline HTML anchor markup, which is noise for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing what a status response looks like, and it says nothing about the returned fields or possible status values. For a status-polling tool this is a meaningful gap, though the input contract is fully covered by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (id, account) are fully documented in the schema. The description adds no format or syntax detail beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the status of an on-demand asset generation job') and scopes it to jobs 'created with the generate endpoint', which distinguishes it from the sibling generate_asset. It stops short of naming the sibling directly, so an agent must infer the pairing from the endpoint reference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'created with the generate endpoint' implies this is the follow-up polling call to generate_asset, but no explicit when-to-use, when-not-to-use, or named alternative is given. The 'owner-scoped' note is a constraint rather than usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_modelGet Generation ModelA
Read-onlyIdempotent

Get one generation model, including the JSON Schema for the options it accepts and what it costs in credits.

Base URL: https://api.shotstack.io/edit/{version} Read operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExact resource ID from the selected account.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds useful non-annotation context: it is a read operation and returns the option JSON Schema plus credit cost, which is valuable since no output schema exists. It stops short of covering error behavior for an unknown ID.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Short and front-loaded, with the core purpose in the first clause and return content immediately after. The injected HTML anchor for the base URL is slightly awkward but does not obscure the meaning, and no sentence is wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with full schema coverage and annotations carrying the safety profile, the description covers the remaining gaps: it says what comes back (option JSON Schema and credit cost) in the absence of an output schema. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: `id` and `account` are both documented in the schema itself. The description adds no syntax, format, or sourcing detail beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get one generation model") and clarifies what the response contains: the model's option JSON Schema and its credit cost. It is clearly distinct in kind from list_models, though the description never names that sibling or explicitly contrasts singular fetch from listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: fetching a single model by ID to learn its accepted options and cost before generating an asset. There is no explicit when-to-use statement, no precondition (e.g. needing a valid model ID), and no named alternative to list_models for discovery.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_renderGet Render StatusA
Read-onlyIdempotent

Get the rendering status, temporary asset url and details of a render by ID.

Base URL: https://api.shotstack.io/edit/{version} Read operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExact resource ID from the selected account.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds that the asset URL returned is temporary, which is useful output context, but 'Read operation' merely restates readOnlyHint and no auth/rate-limit/expiry behavior is described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose in a single efficient sentence. The Base URL line is boilerplate but compact, and nothing is padded or redundant at length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by naming the salient return fields (status, temporary asset URL, details). For a simple two-parameter read tool this is nearly complete, lacking only lifecycle context such as when the temporary URL expires.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both 'id' and 'account'. The description only echoes the 'by ID' lookup concept and adds no format, source, or account-selection detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ('Get') plus resource ('render') and enumerates what is returned: rendering status, temporary asset URL, and details. It is clearly distinguishable from the sibling 'render' (which creates) and from the template/asset tools, though it does not explicitly name an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by ID' and 'Read operation' imply this is a lookup used to poll or inspect an existing render, but there is no explicit when-to-use versus when-not, nor any named alternative such as list/filtering tools. Usage is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sourceGet SourceB
Read-onlyIdempotent

Fetch a source file details and status by its id.

Base URL: https://api.shotstack.io/ingest/{version} Read operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExact resource ID from the selected account.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered and the description's 'Read operation' simply restates it. The base URL and stage/version context add a little value, but error behavior (e.g. unknown id) and return shape are not disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is front-loaded and does the real work in a single line. The trailing base URL markup and 'Read operation' segment are slightly noisy and redundant with the annotations, keeping it out of 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read with no output schema, 'details and status' gives a rough sense of the return, which is adequate. It does lack specifics on response fields and failure modes, so it is minimum-viable rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, covering both id and account, so the baseline is 3. The description only reinforces that lookup is by id and adds nothing about the optional account parameter's effect on credentials/environment beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (fetch) and resource (source file details and status) keyed by id, which clearly distinguishes it from list_sources, ingest_source, and delete_source. It does not explicitly name siblings, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of alternatives such as list_sources (to enumerate) or get_asset (for rendered assets). Usage is only implied by 'by its id'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_templateRetrieve TemplateB
Read-onlyIdempotent

Retrieve a template by template id.

Base URL: https://api.shotstack.io/edit/{version} Read operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExact resource ID from the selected account.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is fully covered by structured data. The description's 'Read operation.' merely restates readOnlyHint, and the base URL line is construction detail rather than behavioral context (no error/not-found behavior, no auth or rate-limit notes).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Short and front-loaded: the purpose sentence comes first and the remaining lines are brief. The HTML-anchor link and the redundant 'Read operation.' line add noise but do not bury the core statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, fully-annotated single-resource read tool with 100% schema coverage and no output schema, the definition provides enough to call it correctly. The only real omission is what a not-found or private-account lookup does, which is minor at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both 'id' and 'account' are already documented with local detail. The description adds nothing about parameter meaning or format beyond the schema, which is the baseline 3 case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Retrieve a template by template id'), which is unambiguous and clearly distinct from the create/update/delete/list template siblings. It does not explicitly name an alternative, but the single-resource-by-ID framing is clear enough for selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no contrast with list_templates (which returns many) or get_render, and no stated prerequisites. Usage is only implied by the tool name and the fact that an ID is required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ingest_sourceFetch SourceA
Destructive

Queue a source file to be fetched from a URL and stored by Shotstack. Source files can be videos, images, audio files and fonts. Once ingested, new output renditions can be created from the source file.

Base URL: https://api.shotstack.io/ingest/{version} Explicit confirmation is required for this exact action; provider charges, hosting, sharing or deletion may apply. Never automatically resubmit unknown outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe URL of the file to be ingested. The URL must be publicly accessible or include credentials.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.
confirmNoSet true only when the user asked for exactly this action.
outputsNo
payloadNoComplete JSON request body instead of body flags. Preserves current endpoint fields and values.
callbackNoAn optional webhook callback URL used to receive status notifications when sources are uploaded and renditions processed.
destinationsNo
payload_fileNoRegular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, so this is a non-idempotent write with side effects. The description adds meaningful context beyond that: provider charges, hosting/sharing/deletion consequences, and the explicit-confirmation requirement. It stops short of describing return format or timing of the async queue.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in a single efficient sentence, and the safety/confirmation note follows. Slightly padded by the raw Base URL and markdown link cruft, but overall compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with deeply nested objects and no output schema, the definition covers purpose, supported inputs, and the critical safety/confirmation caveats. It is adequate, though it could say more about the async queueing behavior and what the caller receives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75% with 8 parameters, so the schema carries most parameter meaning. The description only broadly mentions supported file types and that renditions can be created afterward, adding little field-level semantics (e.g., confirm, payload, callback).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: 'Queue a source file to be fetched from a URL and stored by Shotstack,' and enumerates supported media types. It is clear what the tool does, but it never names or distinguishes itself from close siblings like transfer_asset or create_upload_url_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states that 'Explicit confirmation is required for this exact action' and warns to 'Never automatically resubmit unknown outcomes,' which is useful invocation guidance. However, it gives no when-to-use-vs-alternative routing against the many sibling ingest/transfer tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_accountsList configured accountsA
Read-onlyIdempotent

List private account labels, default selection and configured token method. No credentials, token paths or account content; no network request.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false. The description adds meaningful behavioral context beyond those annotations: it confirms no credentials, token paths, or account content are returned, and that no network request is made.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences front-load the core scope and then immediately clarify the negative behavior. Every phrase contributes useful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with no output schema, the description adequately covers the returned concepts and explicitly rules out sensitive data and network activity. It stops short of describing result ordering, formatting, or pagination, but those may not apply or may be self-evident.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there are no parameter semantics to clarify. Per the rubric, a zero-parameter tool has a baseline of 4, and the description does not need to compensate for undocumented inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource (list accounts) and enumerates the exact scope: private account labels, default selection, and configured token method. Its exclusions also implicitly distinguish it from broader siblings like get_account or get_current_token, which would expose account content or credentials.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating exactly what metadata the tool surfaces, but it never explicitly says when to call this instead of alternatives such as get_account or get_current_token. The 'No credentials...' clause scopes the tool, yet no named alternative or when-not condition is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_modelsList Generation ModelsA
Read-onlyIdempotent

List the generation models available for prompt-bearing image, video and audio assets, with the options each accepts and what it costs in credits.

Use this to populate a model picker and render its option fields, rather than hard coding a model list. A newly launched model appears here without any change on your side. Each entry carries the asset type it generates, so filter the list client side when a picker only needs one kind.

Option schemas are omitted by default. Request them with expand=options.

Each model's available reflects the plan of the account behind the calling API key, so offer only the models it marks available.

Base URL: https://api.shotstack.io/edit/{version} Read operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds valuable behavior beyond that: option schemas are omitted by default and require `expand=options`, and the `available` field reflects the calling API key's plan, which affects what should be shown. Some context like pagination or rate limits is not mentioned, but the key operational detail is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, then usage, then behavior details, and ends with base URL and read-operation note. It is a bit long but every sentence contributes useful context; no obvious filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the shape of returned data (asset type, options, availability) and the default omission of option schemas. It could mention pagination or response ordering, but overall it gives enough for an agent to call and interpret the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the `account` parameter is fully documented in the schema. The description adds no parameter syntax or default-value information beyond the schema, so baseline 3 is appropriate. It does mention the `expand=options` behavior, but that is not a formal parameter in this schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (List) and resource (generation models available for prompt-bearing image, video, and audio assets), with the added scope that each entry carries its asset type and options. It clearly distinguishes itself from siblings like get_model (singular) and list_templates by naming what it returns and why it exists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete when-to-use case (populate a model picker, avoid hard coding) and explains that filtering by asset type should be done client side. It doesn't name a sibling alternative or explicitly state when-not-to-use, but the usage context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sourcesList SourcesC
Read-onlyIdempotent

Retrieve a list of ingested source files stored against a users account and stage.

Base URL: https://api.shotstack.io/ingest/{version} Read operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description only repeats 'Read operation' and adds no new behavioral context such as pagination, output shape, rate limits, or auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose in one sentence, but the second sentence contains a base URL link and the redundant 'Read operation' phrase, neither of which earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool, the description is enough to invoke it, but with no output schema it does not describe the returned list, pagination, or how the optional account parameter affects results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one optional parameter ('account') exists and schema description coverage is 100%, so the schema fully documents it. The description adds no syntax or meaning beyond what the schema provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Retrieve a list of ingested source files') and scopes it to account and stage, so an agent can tell it is a list operation. However, it does not name or explicitly distinguish itself from siblings such as get_source or list_accounts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no when-to-use guidance, no alternatives, and no exclusions. The only usage direction is the redundant 'Read operation' statement, which annotations already cover.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_templatesList TemplatesB
Read-onlyIdempotent

Retrieve a list of templates stored against a users account and stage.

Base URL: https://api.shotstack.io/edit/{version} Read operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered. The description's 'Read operation' merely restates readOnlyHint; its only added context is the base URL and account/stage scoping. No pagination or rate-limit behavior is disclosed, so this is minimal added value against an already-complete annotation set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loads the purpose before the URL and read flag. The embedded HTML anchor and version placeholder are slightly noisy marketing text, but there is no padding or redundancy beyond that.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-parameter list tool with no output schema, the essentials are present (what is listed, scoping, read-only nature). However, it never indicates pagination, ordering, or result shape, which are the questions an agent actually has for a list endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter and 100% schema description coverage, the schema already explains the 'account' selector. The description adds nothing about how the account parameter changes credentials or environment beyond what the schema states, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Retrieve a list of templates') and adds scoping (a user's account and stage), so an agent can distinguish it from get_template or create_template. It stops short of naming the sibling alternatives, but the list-vs-get distinction is clear from the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not guidance, and no mention of the natural alternatives (get_template for a single template, create/update/delete_template for mutations). The account/stage scope hints at usage but the agent must infer it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

probe_mediaInspect MediaA
Read-onlyIdempotent

Inspects any media asset (image, video, audio) on the internet using a hosted version of FFprobe. The probe endpoint returns useful information about an asset such as width, height, duration, rotation, framerate, etc...

Base URL: https://api.shotstack.io/edit/{version} Read operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic HTTPS URL of the selected media file.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered elsewhere. The description usefully adds that the probe goes out to the internet and lists example metadata fields (width, height, duration, rotation, framerate), but says nothing about auth requirements, rate limits, failure modes for unreachable/private URLs, or the meaning of the {version} placeholder.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and mechanism are front-loaded in the first sentence and the size is appropriate. The trailing base-URL block with a raw HTML anchor and a literal '{version}' placeholder adds noise without helping the agent invoke the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with no output schema, the description covers what it does and gives a representative list of returned fields, which is reasonably complete. The gaps are minor: no scope note that only public HTTPS URLs are supported beyond what the schema pattern implies, and no guidance on failure behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (url, account) are already documented in the schema, and the description adds no format or semantic detail beyond what is there. Baseline 3 is appropriate when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Inspects) and resource (any media asset: image, video, audio), states the mechanism (hosted FFprobe), and no sibling tool does anything comparable — everything else is render/template/asset CRUD. An agent can immediately distinguish this from get_asset or get_model.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance and no alternatives are named. 'Read operation' hints at the usage profile but the agent is left to infer that this is the metadata-probing tool rather than a fetch/download tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

renderRender AssetA
Destructive

Queue and render the contents of an Edit as a video, image or audio file.

Rendering Process:

  1. Validation: The edit JSON is validated

  2. Download: All assets are downloaded and cached

  3. Preprocessing: Video assets are automatically processed to fix compatibility issues

  4. Rendering: The timeline is rendered using the processed assets

  5. Output: The final media file is generated and stored

Video Preprocessing: Video assets undergo automatic preprocessing to ensure compatibility. You can force preprocessing by setting "transcode": true on video assets. See VideoAsset for more details.

Base URL: https://api.shotstack.io/edit/{version} Explicit confirmation is required for this exact action; provider charges, hosting, sharing or deletion may apply. Never automatically resubmit unknown outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
diskNo
mergeNo
outputNo
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.
confirmNoSet true only when the user asked for exactly this action.
payloadNoComplete JSON request body instead of body flags. Preserves current endpoint fields and values.
callbackNo
instanceNo
timelineNo
payload_fileNoRegular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/non-idempotent/open-world, and the description adds substantial context beyond them: the five-stage async pipeline (validation, download, preprocessing, render, output), automatic video preprocessing with the `transcode` override, and warnings that provider charges, hosting, sharing or deletion may apply. This is exactly the extra behavioral detail the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence, then tight numbered pipeline and a bolded safety/confirmation clause. Every block carries distinct information; nothing is repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex async render tool with a huge nested payload and no output schema, the description covers lifecycle, cost, and safety well. It omits how to track the queued job (e.g. the get_render sibling) and any auth/credential expectation, which are the remaining gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Top-level schema description coverage is low (40%) across 10 parameters, and the description only mentions one nested knob (`transcode: true` on video assets). It does orient the reader toward an Edit payload but adds no meaning for `confirm`, `account`, `instance`, `payload_file`, `callback`, or the timeline/output structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb+resource ('Queue and render the contents of an Edit') and names the output media types. The 'Queue' wording signals asynchronous submission, which cleanly separates it from sibling read tools like get_render or render_template.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states that 'explicit confirmation is required for this exact action' and warns against automatic resubmission on unknown outcomes, which is real when-to/not-to guidance. It stops short of naming an alternative (e.g. render_template for template-based renders), so routing between siblings is left partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_templateRender TemplateA
Destructive

Render an asset from a template id and optional merge fields. Merge fields can be used to replace placeholder variables within the Edit.

Base URL: https://api.shotstack.io/edit/{version} Explicit confirmation is required for this exact action; provider charges, hosting, sharing or deletion may apply. Never automatically resubmit unknown outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoThe id of the template to render in UUID format.
mergeNo
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.
confirmNoSet true only when the user asked for exactly this action.
payloadNoComplete JSON request body instead of body flags. Preserves current endpoint fields and values.
payload_fileNoRegular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so safety is partly covered. The description adds genuine context beyond them: the mandatory confirmation step, that provider charges/hosting/sharing/deletion may apply, and that unknown outcomes must not be auto-resubmitted - all material for a non-idempotent mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded and wastes little, but the body is cluttered with a broken markdown link ('[Edit](#tocs_edit)') and a raw HTML anchor wrapping the base URL, which are noise rather than agent-relevant signal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter, nested-object, no-output-schema mutation tool, the description covers purpose and confirmation but says nothing about the `account`, `payload`/`payload_file` modes, or what a render returns (a render id). Annotations carry the safety profile, so it is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, so the schema already documents `id`, `merge`, `account`, `confirm`, `payload`, and `payload_file` thoroughly. The description only echoes 'template id and optional merge fields' and adds no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Render an asset from a template id and optional merge fields,' which is clear enough to act on. However, it never distinguishes itself from the sibling tool `render`, which reads almost identically, so an agent cannot tell which to pick from the text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It supplies one real usage constraint ('Explicit confirmation is required for this exact action') and a no-resubmit rule, which is useful. But it gives no when-to-use-vs-alternative guidance against `render`, `generate_asset`, or `create_template`, leaving the selection inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transfer_assetTransfer AssetA
Destructive

Transfer a file from any publicly available URL to one or more Serve API destinations.

Base URL: https://api.shotstack.io/serve/{version} Explicit confirmation is required for this exact action; provider charges, hosting, sharing or deletion may apply. Never automatically resubmit unknown outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoAn identifier for the asset which must be provided by the client. The identifier does not need to be unique.
urlNoThe file URL to fetch and transfer.
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.
confirmNoSet true only when the user asked for exactly this action.
payloadNoComplete JSON request body instead of body flags. Preserves current endpoint fields and values.
destinationsNoSpecify the storage locations and hosting services to send the file to.
payload_fileNoRegular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, but the description adds genuinely new context beyond them: confirmation is mandatory, provider charges/hosting/sharing/deletion may apply, and unknown outcomes must not be resubmitted. That last point is exactly the right warning for a non-idempotent write. It still omits whether the transfer is asynchronous/queued or how completion is observed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and scope in one sentence, then adds the confirmation and no-resubmit rules compactly. The 'Base URL' line is mostly boilerplate that does not help an agent decide anything, but it costs little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description ideally would say what comes back (job/asset ID, status, async completion), and it does not. It does cover the two riskiest things an agent needs – confirmation and non-resubmit on unknown state – but for a 7-parameter nested-payload transfer tool with a rich destination union, that leaves a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents url, id, destinations, confirm, account, payload and payload_file. The description mentions none of them and adds no syntax or format detail, so the baseline 3 for high-coverage schemas applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (transfer) and resource (a file fetched from any publicly available URL) and the destination scope (one or more Serve API destinations). That distinguishes it well from read-side siblings like get_asset or probe_media, though it never names ingest_source or generate_asset, the nearest alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives one real precondition – explicit user confirmation is required for exactly this action – plus a 'never automatically resubmit unknown outcomes' rule for retries. It does not say when to choose transfer_asset over ingest_source or generate_asset, so routing between siblings remains implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_templateUpdate TemplateA
Destructive

Update an existing template by template id.

Base URL: https://api.shotstack.io/edit/{version} Explicit confirmation is required for this exact action; provider charges, hosting, sharing or deletion may apply. Never automatically resubmit unknown outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExact resource ID from the selected account.
nameNoThe template name
accountNoNamed private Shotstack account; selects private credentials and stage/v1 environment.
confirmNoSet true only when the user asked for exactly this action.
payloadNoComplete JSON request body instead of body flags. Preserves current endpoint fields and values.
templateNo
payload_fileNoRegular local JSON body file, at most 5 MB. Cannot be mixed with body flags or payload.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the mutation/safety profile is covered. The description earns credit for adding real context beyond that: provider charges, hosting/sharing/deletion side effects, and the explicit instruction never to automatically resubmit an unknown outcome - important for a non-idempotent destructive call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is well front-loaded and the caution line is valuable, but the embedded 'Base URL' line rendered as an anchor tag is formatting noise that adds no actionable information for the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a very deep nested schema (Edit/timeline/clips/assets) and no output schema, the description supplies the key destructive-action caution but leaves the three alternative request-body shapes and their exclusivity rules entirely to the schema. Adequate but with a clear gap for a complex mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 86% schema description coverage, the schema carries nearly all parameter meaning, so baseline 3 applies. The description adds only the confirmation-related intent that maps loosely to the `confirm` flag and nothing about the mutually exclusive payload/payload_file/template body forms.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing template by template id'), which is unambiguous and lets an agent distinguish it from create_template/delete_template. It stops short of explicitly naming siblings or the alternative path, so it is clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does establish a usage precondition - explicit confirmation is required for this exact action, and unknown outcomes must not be auto-resubmitted. But it gives no guidance on when to prefer this over create_template, render_template, or which of the payload/payload_file/template body options to choose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv3.0.0
    • Changedcreate_template423 fields changed
      • addedInput schema / $defs / AudioAsset / properties / effect / $ref
        Added value: +"#/$defs/effect"
      • removedInput schema / $defs / AudioAsset / properties / effect / description
        Removed value: -"The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>"
      • removedInput schema / $defs / AudioAsset / properties / effect / enum
        Removed value: -[
        -  "none",
        -  "fadeIn",
        -  "fadeOut",
        -  "fadeInFadeOut"
        -]
      • removedInput schema / $defs / AudioAsset / properties / effect / type
        Removed value: -"string"
      • addedInput schema / $defs / AudioAsset / properties / options / $ref
        Added value: +"#/$defs/options"
      • removedInput schema / $defs / AudioAsset / properties / options / additionalProperties
        Removed value: -true
      • removedInput schema / $defs / AudioAsset / properties / options / description
        Removed value: -"Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected."
      • removedInput schema / $defs / AudioAsset / properties / options / type
        Removed value: -"object"
      • addedInput schema / $defs / AudioAsset / properties / volume / $ref
        Added value: +"#/$defs/volume"
      • removedInput schema / $defs / AudioAsset / properties / volume / description
        Removed value: -"Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions."
      • removedInput schema / $defs / AudioAsset / properties / volume / oneOf
        Removed value: -[
        -  {
        -    "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  {
        -    "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -    "items": {
        -      "$ref": "#/$defs/Tween"
        -    },
        -    "type": "array"
        -  }
        -]
      • changedInput schema / $defs / Destinations / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/ShotstackDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/MuxDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/S3Destination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleCloudStorageDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleDriveDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/VimeoDestination"
        -  },
        -  {
        -    "deprecated": true,
        -    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        -    "properties": {
        -      "options": {
        -        "deprecated": true,
        -        "description": "Additional TikTok configuration options.",
        -        "properties": {
        -          "disableComment": {
        -            "default": false,
        -            "description": "Disable comments on this video.",
        -            "type": "boolean"
        -          },
        -          "disableDuet": {
        -            "default": false,
        -            "description": "Disable the Duet feature for this video.",
        -            "type": "boolean"
        -          },
        -          "disableStitch": {
        -            "default": false,
        -            "description": "Disable the Stitch feature for this video.",
        -            "type": "boolean"
        -          },
        -          "privacyLevel": {
        -            "default": "private",
        -            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        -            "enum": [
        -              "public",
        -              "friends",
        -              "private"
        -            ],
        -            "type": "string"
        -          },
        -          "title": {
        -            "description": "A title for the video that will be displayed on TikTok.",
        -            "maxLength": 150,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "provider": {
        -        "default": "tiktok",
        -        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Akamai NetStorage configuration options.",
        -        "properties": {
        -          "cpCode": {
        -            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "host": {
        -            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        -            "type": "string"
        -          },
        -          "path": {
        -            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "host",
        -          "cpCode"
        -        ]
        -      },
        -      "provider": {
        -        "default": "akamai-netstorage",
        -        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Azure Blob Storage configuration options.",
        -        "properties": {
        -          "accountName": {
        -            "description": "The Azure Storage account name.",
        -            "type": "string"
        -          },
        -          "container": {
        -            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "prefix": {
        -            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "accountName",
        -          "container"
        -        ]
        -      },
        -      "provider": {
        -        "default": "azure-blob-storage",
        -        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/ShotstackDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/MuxDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/S3Destination"
        +  },
        +  {
        +    "$ref": "#/$defs/GoogleCloudStorageDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/GoogleDriveDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/VimeoDestination"
        +  },
        +  {
        +    "deprecated": true,
        +    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        +    "properties": {
        +      "options": {
        +        "deprecated": true,
        +        "description": "Additional TikTok configuration options.",
        +        "properties": {
        +          "disableComment": {
        +            "default": false,
        +            "description": "Disable comments on this video.",
        +            "type": "boolean"
        +          },
        +          "disableDuet": {
        +            "default": false,
        +            "description": "Disable the Duet feature for this video.",
        +            "type": "boolean"
        +          },
        +          "disableStitch": {
        +            "default": false,
        +            "description": "Disable the Stitch feature for this video.",
        +            "type": "boolean"
        +          },
        +          "privacyLevel": {
        +            "default": "private",
        +            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        +            "enum": [
        +              "public",
        +              "friends",
        +              "private"
        +            ],
        +            "type": "string"
        +          },
        +          "title": {
        +            "description": "A title for the video that will be displayed on TikTok.",
        +            "maxLength": 150,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "provider": {
        +        "default": "tiktok",
        +        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        +    "properties": {
        +      "options": {
        +        "description": "Additional Akamai NetStorage configuration options.",
        +        "properties": {
        +          "cpCode": {
        +            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        +            "type": "string"
        +          },
        +          "filename": {
        +            "$ref": "#/$defs/filename"
        +          },
        +          "host": {
        +            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        +            "type": "string"
        +          },
        +          "path": {
        +            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "host",
        +          "cpCode"
        +        ]
        +      },
        +      "provider": {
        +        "default": "akamai-netstorage",
        +        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        +    "properties": {
        +      "options": {
        +        "description": "Additional Azure Blob Storage configuration options.",
        +        "properties": {
        +          "accountName": {
        +            "description": "The Azure Storage account name.",
        +            "type": "string"
        +          },
        +          "container": {
        +            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        +            "type": "string"
        +          },
        +          "filename": {
        +            "$ref": "#/$defs/filename"
        +          },
        +          "prefix": {
        +            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "accountName",
        +          "container"
        +        ]
        +      },
        +      "provider": {
        +        "default": "azure-blob-storage",
        +        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / ImageAsset / properties / options / $ref
        Added value: +"#/$defs/options"
      • removedInput schema / $defs / ImageAsset / properties / options / additionalProperties
        Removed value: -true
      • removedInput schema / $defs / ImageAsset / properties / options / description
        Removed value: -"Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected."
      • removedInput schema / $defs / ImageAsset / properties / options / type
        Removed value: -"object"
      • addedInput schema / $defs / S3DestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / S3DestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / S3DestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / TextToSpeechAsset / properties / effect / $ref
        Added value: +"#/$defs/effect"
      • removedInput schema / $defs / TextToSpeechAsset / properties / effect / description
        Removed value: -"The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>"
      • removedInput schema / $defs / TextToSpeechAsset / properties / effect / enum
        Removed value: -[
        -  "none",
        -  "fadeIn",
        -  "fadeOut",
        -  "fadeInFadeOut"
        -]
      • removedInput schema / $defs / TextToSpeechAsset / properties / effect / type
        Removed value: -"string"
      • addedInput schema / $defs / TextToSpeechAsset / properties / volume / $ref
        Added value: +"#/$defs/volume"
      • removedInput schema / $defs / TextToSpeechAsset / properties / volume / description
        Removed value: -"Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions."
      • removedInput schema / $defs / TextToSpeechAsset / properties / volume / oneOf
        Removed value: -[
        -  {
        -    "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  {
        -    "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -    "items": {
        -      "$ref": "#/$defs/Tween"
        -    },
        -    "type": "array"
        -  }
        -]
      • addedInput schema / $defs / VideoAsset / properties / options / $ref
        Added value: +"#/$defs/options"
      • removedInput schema / $defs / VideoAsset / properties / options / additionalProperties
        Removed value: -true
      • removedInput schema / $defs / VideoAsset / properties / options / description
        Removed value: -"Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected."
      • removedInput schema / $defs / VideoAsset / properties / options / type
        Removed value: -"object"
      • addedInput schema / $defs / effect
        Added value: +{
        +  "description": "The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        +  "enum": [
        +    "none",
        +    "fadeIn",
        +    "fadeOut",
        +    "fadeInFadeOut"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / $defs / filename
        Added value: +{
        +  "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / $defs / filename_2
        Added value: +{
        +  "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        +  "type": "string"
        +}
      • addedInput schema / $defs / options
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.",
        +  "type": "object"
        +}
      • addedInput schema / $defs / volume
        Added value: +{
        +  "description": "Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions.",
        +  "oneOf": [
        +    {
        +      "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        +      "format": "float",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        +      "items": {
        +        "$ref": "#/$defs/Tween"
        +      },
        +      "type": "array"
        +    }
        +  ]
        +}
      • changedInput schema / properties / confirm / description
        Previous value: -"Must be true for this exact requested render, generation, mutation, upload URL or deletion."New value: +"Set true only when the user asked for exactly this action."
      • addedInput schema / properties / payload / $defs / Asset / $ref
        Added value: +"#/$defs/Asset"
      • removedInput schema / properties / payload / $defs / Asset / description
        Removed value: -"The type of asset to display for the duration of the Clip, i.e. a video clip or an image. Choose from one of the available asset types below."
      • removedInput schema / properties / payload / $defs / Asset / oneOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/VideoAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/ImageAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/TextAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/RichTextAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/AudioAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/LumaAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/CaptionAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/RichCaptionAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/HtmlAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/Html5Asset"
        -  },
        -  {
        -    "$ref": "#/$defs/TitleAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/ShapeAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/SvgAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/TextToImageAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/ImageToVideoAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/TextToSpeechAsset"
        -  }
        -]
      • removedInput schema / properties / payload / $defs / Asset / type
        Removed value: -"object"
      • removedInput schema / properties / payload / $defs / Asset / unevaluatedProperties
        Removed value: -false
      • addedInput schema / properties / payload / $defs / AudioAsset / $ref
        Added value: +"#/$defs/AudioAsset"
      • removedInput schema / properties / payload / $defs / AudioAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / AudioAsset / description
        Removed value: -"The AudioAsset adds audio to a Clip. The audio can be sourced from a URL\n(`src`), generated from a text prompt (`prompt`), or both. At least one of\n`src` or `prompt` must be provided.\n\n- **Source URL:** set `src` to a publicly accessible audio URL (e.g. mp3).\n- **Generated speech:** set `prompt` to the spoken text and choose a\n  text-to-speech `model`; set the voice via `options`.\n- **Generated music or SFX:** set `prompt` describing the sound and choose\n  a music generation `model`.\n- **Both:** `src` acts as a preview placeholder while `prompt` drives\n  generation — the audio is regenerated from the prompt at render time.\n  Unchanged prompts and options resolve from the generation cache.\n- Use `model` to choose the generator and `options` to configure it. The\n  generated `src` is filled in automatically.\n"
      • removedInput schema / properties / payload / $defs / AudioAsset / properties
        Removed value: -{
        -  "effect": {
        -    "description": "The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        -    "enum": [
        -      "none",
        -      "fadeIn",
        -      "fadeOut",
        -      "fadeInFadeOut"
        -    ],
        -    "type": "string"
        -  },
        -  "model": {
        -    "description": "The generation model to use when `prompt` is set (e.g. `polly-neural`, `elevenlabs-tts`, `elevenlabs-music`). Defaults to `elevenlabs-tts` (with a default voice) if omitted. Each model's available options are defined by the model registry.",
        -    "type": "string"
        -  },
        -  "options": {
        -    "additionalProperties": true,
        -    "description": "Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.",
        -    "type": "object"
        -  },
        -  "prompt": {
        -    "description": "A text prompt. For text-to-speech models the prompt is the spoken text; for music models it describes the sound to generate. The generated `src` is filled in automatically; an existing `src` is treated as a preview placeholder and replaced.",
        -    "maxLength": 4000,
        -    "type": "string"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the audio clip between 0 (paused) and 10 (10x normal speed), where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire audio (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire audio (i.e. original length / 2).",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "src": {
        -    "description": "The audio source URL. The URL must be publicly accessible or include credentials. When `prompt` is also set, `src` serves as a preview placeholder and the audio is regenerated from the prompt at render time.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the audio clip, in seconds (defaults to 0). Audio will start from the in trim point. The audio will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "audio",
        -    "description": "The type of asset - set to `audio` for audio assets.",
        -    "enum": [
        -      "audio"
        -    ],
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions.",
        -    "oneOf": [
        -      {
        -        "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -        "format": "float",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / AudioAsset / required
        Removed value: -[
        -  "type"
        -]
      • removedInput schema / properties / payload / $defs / AudioAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / CaptionAsset / $ref
        Added value: +"#/$defs/CaptionAsset"
      • removedInput schema / properties / payload / $defs / CaptionAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / CaptionAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / CaptionAsset / description
        Removed value: -"**Notice: The CaptionAsset is deprecated, use the [RichCaptionAsset](#tocs_richcaptionasset) instead.**\n\nThe CaptionAsset is used to add captions (subtitles) to a video. It uses a supplied SRT or VTT file which will\nbe read and burnt to the video.\n\nCaptions can be applied independently from a video or audio file for greater\nflexibility with styling and layout. For example you can scale, position or crop a video without modifying the\ncaptions.\n\nTo sync captions with a video or audio file use a [Video](#tocs_videoasset) or [Audio](#tocs_audioasset) with\nmatching start and end time.\n"
      • removedInput schema / properties / payload / $defs / CaptionAsset / properties
        Removed value: -{
        -  "background": {
        -    "$ref": "#/$defs/CaptionBackground",
        -    "description": "Background styling properties."
        -  },
        -  "font": {
        -    "$ref": "#/$defs/CaptionFont",
        -    "description": "Font styling properties."
        -  },
        -  "margin": {
        -    "$ref": "#/$defs/CaptionMargin",
        -    "description": "Margin properties."
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the captions between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to  adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire captions (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire captions (i.e. original length / 2).",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "src": {
        -    "description": "The URL to an SRT or VTT subtitles file, or an alias reference to auto-generate captions from an audio or video clip. For file URLs, the URL must be publicly accessible or include credentials. For auto-captioning, use the format `alias://clip-name` where clip-name is the alias of an audio, video, or text-to-speech clip. The system will automatically transcribe the audio and detect the language.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the captions, in seconds (defaults to 0). Remove the trim length from the start of the captions and allow it to be synced with video or audio. The captions will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "caption",
        -    "description": "The type of asset - set to `caption` for captions.",
        -    "enum": [
        -      "caption"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / CaptionAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / CaptionAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / CaptionBackground / $ref
        Added value: +"#/$defs/CaptionBackground"
      • removedInput schema / properties / payload / $defs / CaptionBackground / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / CaptionBackground / description
        Removed value: -"Displays a background box behind the caption text."
      • removedInput schema / properties / payload / $defs / CaptionBackground / properties
        Removed value: -{
        -  "borderRadius": {
        -    "description": "The border radius of the background box in pixels.",
        -    "type": "integer"
        -  },
        -  "color": {
        -    "description": "The background color using hexadecimal color notation.",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "description": "The opacity of the background color.",
        -    "type": "number"
        -  },
        -  "padding": {
        -    "description": "The padding inside the background box in pixels.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / CaptionBackground / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / CaptionFont / $ref
        Added value: +"#/$defs/CaptionFont"
      • removedInput schema / properties / payload / $defs / CaptionFont / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / CaptionFont / description
        Removed value: -"Font properties for captions text."
      • removedInput schema / properties / payload / $defs / CaptionFont / properties
        Removed value: -{
        -  "color": {
        -    "description": "The text color using hexadecimal color notation.",
        -    "type": "string"
        -  },
        -  "family": {
        -    "description": "The font family name. This must be Family name embedded in the font, i.e. \"Open Sans\".",
        -    "type": "string"
        -  },
        -  "lineHeight": {
        -    "description": "The line height of the font as a ratio of the font size.",
        -    "type": "number"
        -  },
        -  "opacity": {
        -    "description": "The opacity of the text where 1 is opaque and 0 is transparent.",
        -    "type": "number"
        -  },
        -  "size": {
        -    "description": "The size of the font in pixels (px).",
        -    "type": "integer"
        -  },
        -  "stroke": {
        -    "description": "The stroke color of the font using hexadecimal color notation.",
        -    "type": "string"
        -  },
        -  "strokeWidth": {
        -    "description": "The width of the stroke in pixels.",
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / CaptionFont / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / CaptionMargin / $ref
        Added value: +"#/$defs/CaptionMargin"
      • removedInput schema / properties / payload / $defs / CaptionMargin / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / CaptionMargin / description
        Removed value: -"The margin properties for captions. Margins are used to position the caption text and background on the screen."
      • removedInput schema / properties / payload / $defs / CaptionMargin / properties
        Removed value: -{
        -  "left": {
        -    "description": "The margin to the left of the text. Pushes captions to the right.",
        -    "type": "number"
        -  },
        -  "right": {
        -    "description": "The margin to the right of the text. Pushes captions to the left.",
        -    "type": "number"
        -  },
        -  "top": {
        -    "description": "The margin above the text. Pushes captions down the screen.",
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / CaptionMargin / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / ChromaKey / $ref
        Added value: +"#/$defs/ChromaKey"
      • removedInput schema / properties / payload / $defs / ChromaKey / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / ChromaKey / description
        Removed value: -"Chroma key is a technique that replaces a specific color in a video with a different background image or video, enabling seamless integration of diverse environments. Commonly used for green screen and blue screen effects."
      • removedInput schema / properties / payload / $defs / ChromaKey / properties
        Removed value: -{
        -  "color": {
        -    "description": "The chroma key color as a hex value. Use green (#00b140) for green screens or blue (#0000FF) for blue screens. Any valid hex color can be used as the key color.",
        -    "pattern": "^#[0-9a-fA-F]{6}$",
        -    "type": "string"
        -  },
        -  "halo": {
        -    "description": "Pixels within the halo distance from the threshold boundary are given an increasing alpha value based on their distance from the threshold.",
        -    "maximum": 250,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  "threshold": {
        -    "description": "Pixels within this distance from the key color are eliminated by setting their alpha values to zero.",
        -    "maximum": 250,
        -    "minimum": 0,
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ChromaKey / required
        Removed value: -[
        -  "color"
        -]
      • removedInput schema / properties / payload / $defs / ChromaKey / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Clip / $ref
        Added value: +"#/$defs/Clip"
      • removedInput schema / properties / payload / $defs / Clip / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Clip / description
        Removed value: -"A clip is a container for a specific type of asset, i.e. a title, image, video, audio or html. You use a Clip to define when an asset will display on the timeline, how long it will play for and transitions, filters and effects to apply to it."
      • removedInput schema / properties / payload / $defs / Clip / properties
        Removed value: -{
        -  "alias": {
        -    "description": "A unique identifier for this clip that can be used to reference it from other clips using the `alias://` protocol in asset sources. This is useful for features like auto-captioning where a caption asset needs to reference the audio from another clip.",
        -    "pattern": "^[A-Za-z0-9_-]+$",
        -    "type": "string"
        -  },
        -  "asset": {
        -    "$ref": "#/$defs/Asset"
        -  },
        -  "effect": {
        -    "description": "A motion effect to apply to the Clip. <ul>\n  <li>`zoomIn` - slow zoom in</li>\n  <li>`zoomOut` - slow zoom out</li>\n  <li>`slideLeft` - slow slide (pan) left</li>\n  <li>`slideRight` - slow slide (pan) right</li>\n  <li>`slideUp` - slow slide (pan) up</li>\n  <li>`slideDown` - slow slide (pan) down</li>\n</ul> The motion effect speed can also be controlled by appending `Fast` or `Slow` to the effect, e.g. `zoomInFast` or `slideRightSlow`.",
        -    "enum": [
        -      "zoomIn",
        -      "zoomInSlow",
        -      "zoomInFast",
        -      "zoomOut",
        -      "zoomOutSlow",
        -      "zoomOutFast",
        -      "slideLeft",
        -      "slideLeftSlow",
        -      "slideLeftFast",
        -      "slideRight",
        -      "slideRightSlow",
        -      "slideRightFast",
        -      "slideUp",
        -      "slideUpSlow",
        -      "slideUpFast",
        -      "slideDown",
        -      "slideDownSlow",
        -      "slideDownFast"
        -    ],
        -    "type": "string"
        -  },
        -  "filter": {
        -    "description": "A filter effect to apply to the Clip. <ul>\n  <li>`none` - no filter applied</li>\n  <li>`blur` - blur the scene</li>\n  <li>`boost` - boost contrast and saturation</li>\n  <li>`contrast` - increase contrast</li>\n  <li>`darken` - darken the scene</li>\n  <li>`greyscale` - remove colour</li>\n  <li>`lighten` - lighten the scene</li>\n  <li>`muted` - reduce saturation and contrast</li>\n  <li>`negative` - negative colors</li>\n</ul>",
        -    "enum": [
        -      "none",
        -      "blur",
        -      "boost",
        -      "contrast",
        -      "darken",
        -      "greyscale",
        -      "lighten",
        -      "muted",
        -      "negative"
        -    ],
        -    "type": "string"
        -  },
        -  "fit": {
        -    "description": "Set how the asset should be scaled to fit the viewport using one of the following options: \n  <ul>\n    <li>`crop` <b>(default)</b> - scale the asset to fill the viewport while maintaining the aspect ratio. The asset will be cropped if it exceeds the bounds of the viewport.</li>\n    <li>`cover` - stretch the asset to fill the viewport without maintaining the aspect ratio.</li>\n    <li>`contain` - fit the entire asset within the viewport while maintaining the original aspect ratio.</li>\n    <li>`none` - preserves the original asset dimensions and does not apply any scaling.</li>\n  </ul>",
        -    "enum": [
        -      "cover",
        -      "contain",
        -      "crop",
        -      "none"
        -    ],
        -    "type": "string"
        -  },
        -  "height": {
        -    "description": "Set the height of the clip bounding box in pixels. This constrains the height of the clip, overriding the default behavior where clips fill the viewport height.",
        -    "format": "float",
        -    "maximum": 2160,
        -    "minimum": 1,
        -    "type": "number"
        -  },
        -  "id": {
        -    "description": "Optional client-generated identifier. Used by client SDKs (e.g. the Shotstack Studio SDK) to reference a clip across edits without relying on its position in the timeline. The render API does not use this field and it does not appear in render output.",
        -    "type": "string"
        -  },
        -  "length": {
        -    "description": "The duration the Clip should play for.",
        -    "oneOf": [
        -      {
        -        "description": "The duration the Clip should play for, in seconds. For example, to play the Clip for 5 seconds, set the length value to 5.",
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "The duration the Clip should play for using a [smart clip property](/docs/guide/architecting-an-application/smart-clips/). Set to `auto` to play the Clip for the duration of the asset. Set to `end` to display or play the clip to the end of the timeline. Use `alias://clip-name` to inherit the length from the referenced clip.",
        -        "pattern": "^(auto|end|alias://[A-Za-z0-9_-]+)$",
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  "offset": {
        -    "$ref": "#/$defs/Offset",
        -    "description": "Offset the location of the asset relative to its position on the viewport. The offset distance is relative to the width of the viewport - for example an x offset of 0.5 will move the asset half the viewport width to the right."
        -  },
        -  "opacity": {
        -    "description": "Offset an asset on the horizontal axis (left or right). Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "Sets the opacity of the Clip where 1 is opaque and 0 is transparent.",
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the opacity of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "position": {
        -    "description": "Place the asset in one of nine predefined positions of the viewport. This is most effective for when the asset is scaled and you want to position the element to a specific position. <ul>\n  <li>`top` - top (center)</li>\n  <li>`topRight` - top right</li>\n  <li>`right` - right (center)</li>\n  <li>`bottomRight` - bottom right</li>\n  <li>`bottom` - bottom (center)</li>\n  <li>`bottomLeft` - bottom left</li>\n  <li>`left` - left (center)</li>\n  <li>`topLeft` - top left</li>\n  <li>`center` - center</li>\n</ul>",
        -    "enum": [
        -      "top",
        -      "topRight",
        -      "right",
        -      "bottomRight",
        -      "bottom",
        -      "bottomLeft",
        -      "left",
        -      "topLeft",
        -      "center"
        -    ],
        -    "type": "string"
        -  },
        -  "scale": {
        -    "description": "Scale the asset to a fraction of the viewport size - i.e. setting the scale to 0.5 will scale asset to half the size of the viewport. This is useful for picture-in-picture video and scaling images such as logos and watermarks. Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "Scale the asset to a fraction of the viewport size. For example, 0.5 will scale the asset to half the size of the viewport.",
        -        "format": "float",
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the scale of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "start": {
        -    "description": "The start position of the Clip on the timeline.",
        -    "oneOf": [
        -      {
        -        "description": "The start position of the Clip on the timeline, in seconds. For example, to start the Clip at 2 seconds, set the start value to 2.",
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "The start position using a [smart clip property](/docs/guide/architecting-an-application/smart-clips/). Set to `auto` to automatically play the clip after the previous clip finishes. Use `alias://clip-name` to inherit the start time from the referenced clip.",
        -        "pattern": "^(auto|alias://[A-Za-z0-9_-]+)$",
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  "transform": {
        -    "$ref": "#/$defs/Transformation",
        -    "description": "A transformation lets you modify the visual properties of a clip. Available transformations are <b>rotate</b>, <b>skew</b> and <b>flip</b>. Transformations can be combined to create interesting new shapes and effects."
        -  },
        -  "transition": {
        -    "$ref": "#/$defs/Transition"
        -  },
        -  "width": {
        -    "description": "Set the width of the clip bounding box in pixels. This constrains the width of the clip, overriding the default behavior where clips fill the viewport width.",
        -    "format": "float",
        -    "maximum": 3840,
        -    "minimum": 1,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Clip / required
        Removed value: -[
        -  "asset",
        -  "start",
        -  "length"
        -]
      • removedInput schema / properties / payload / $defs / Clip / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Crop / $ref
        Added value: +"#/$defs/Crop"
      • removedInput schema / properties / payload / $defs / Crop / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Crop / description
        Removed value: -"Crop the sides of an asset by a relative amount. The size of the crop is specified using a scale between 0 and 1, relative to the screen width - i.e a left crop of 0.5 will crop half of the asset from the left, a top crop  of 0.25 will crop the top by quarter of the asset."
      • removedInput schema / properties / payload / $defs / Crop / properties
        Removed value: -{
        -  "bottom": {
        -    "description": "Crop from the bottom of the asset",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "left": {
        -    "description": "Crop from the left of the asset",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "right": {
        -    "description": "Crop from the left of the asset",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "top": {
        -    "description": "Crop from the top of the asset",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Crop / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Destinations / $ref
        Added value: +"#/$defs/Destinations"
      • removedInput schema / properties / payload / $defs / Destinations / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Destinations / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/ShotstackDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/MuxDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/S3Destination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleCloudStorageDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleDriveDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/VimeoDestination"
        -  },
        -  {
        -    "deprecated": true,
        -    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        -    "properties": {
        -      "options": {
        -        "deprecated": true,
        -        "description": "Additional TikTok configuration options.",
        -        "properties": {
        -          "disableComment": {
        -            "default": false,
        -            "description": "Disable comments on this video.",
        -            "type": "boolean"
        -          },
        -          "disableDuet": {
        -            "default": false,
        -            "description": "Disable the Duet feature for this video.",
        -            "type": "boolean"
        -          },
        -          "disableStitch": {
        -            "default": false,
        -            "description": "Disable the Stitch feature for this video.",
        -            "type": "boolean"
        -          },
        -          "privacyLevel": {
        -            "default": "private",
        -            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        -            "enum": [
        -              "public",
        -              "friends",
        -              "private"
        -            ],
        -            "type": "string"
        -          },
        -          "title": {
        -            "description": "A title for the video that will be displayed on TikTok.",
        -            "maxLength": 150,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "provider": {
        -        "default": "tiktok",
        -        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Akamai NetStorage configuration options.",
        -        "properties": {
        -          "cpCode": {
        -            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "host": {
        -            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        -            "type": "string"
        -          },
        -          "path": {
        -            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "host",
        -          "cpCode"
        -        ]
        -      },
        -      "provider": {
        -        "default": "akamai-netstorage",
        -        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Azure Blob Storage configuration options.",
        -        "properties": {
        -          "accountName": {
        -            "description": "The Azure Storage account name.",
        -            "type": "string"
        -          },
        -          "container": {
        -            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "prefix": {
        -            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "accountName",
        -          "container"
        -        ]
        -      },
        -      "provider": {
        -        "default": "azure-blob-storage",
        -        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / payload / $defs / Destinations / description
        Removed value: -"A destination is a location where assets can be sent to for serving or hosting. Videos, images and audio files that are rendered by the [Edit API](#shotstack-edit) and [source](#tocs_source) and [rendition](#tocs_rendition) files generated by the [Ingest API](#shotstack-ingest) can be sent to destinations. You can also fetch a file from any public URL and [transfer](#transfer-asset) it to a destination. A file can be sent to one or more destinations including 3rd party destinations.\n\nBy default all ingested and generated assets are automatically sent to the [Shotstack hosting destination](https://shotstack.io/docs/guide/serving-assets/hosting/). You can [opt-out](https://shotstack.io/docs/guide/serving-assets/self-host/) from by setting the Shotstack destination **exclude** property to **true**."
      • removedInput schema / properties / payload / $defs / Destinations / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Edit / $ref
        Added value: +"#/$defs/Edit"
      • removedInput schema / properties / payload / $defs / Edit / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Edit / description
        Removed value: -"An edit defines the arrangement of a video on a timeline, an audio edit or an image design and the output format. Video assets are automatically preprocessed to fix common compatibility issues before rendering. You can control preprocessing behavior using the `transcode` flag on video assets."
      • removedInput schema / properties / payload / $defs / Edit / properties
        Removed value: -{
        -  "callback": {
        -    "description": "An optional webhook callback URL used to receive status notifications when a render completes or fails. Notifications are also sent when a rendered video is sent to an output  [destination](https://shotstack.io/docs/guide/serving-assets/destinations/).\nSee [webhooks](https://shotstack.io/docs/guide/architecting-an-application/webhooks/) for more details.",
        -    "type": "string"
        -  },
        -  "disk": {
        -    "deprecated": true,
        -    "description": "**Notice: This option is now deprecated and will be removed. Disk types are handled automatically. Setting a disk type has no effect.**\n\nThe disk type to use for storing footage and assets for each render.\n<ul>\n  <li>`local` - optimized for high speed rendering with up to 512MB storage</li>\n  <li>`mount` - optimized for larger file sizes and longer videos with 5GB for source footage and 512MB for output render</li>\n</ul>\n",
        -    "enum": [
        -      "local",
        -      "mount"
        -    ],
        -    "type": "string"
        -  },
        -  "instance": {
        -    "default": "s1",
        -    "description": "The render instance type to use for processing the edit. <ul>\n  <li>`s1` - standard instance (default)</li>\n  <li>`s2` - standard instance with more resources</li>\n  <li>`a1` - accelerated instance for faster rendering</li>\n</ul>",
        -    "enum": [
        -      "s1",
        -      "s2",
        -      "a1"
        -    ],
        -    "type": "string"
        -  },
        -  "merge": {
        -    "description": "An array of key/value pairs that provides an easy way to create templates with placeholders. The placeholders can be used to find and replace keys with values. For example you can search for the placeholder `{{NAME}}` and replace it with the value `Jane`. ",
        -    "items": {
        -      "$ref": "#/$defs/MergeField"
        -    },
        -    "type": "array"
        -  },
        -  "output": {
        -    "$ref": "#/$defs/Output"
        -  },
        -  "timeline": {
        -    "$ref": "#/$defs/Timeline"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Edit / required
        Removed value: -[
        -  "timeline",
        -  "output"
        -]
      • removedInput schema / properties / payload / $defs / Edit / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / FlipTransformation / $ref
        Added value: +"#/$defs/FlipTransformation"
      • removedInput schema / properties / payload / $defs / FlipTransformation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / FlipTransformation / description
        Removed value: -"Flip a clip vertically or horizontally. Acts as a mirror effect of the clip along the selected plane."
      • removedInput schema / properties / payload / $defs / FlipTransformation / properties
        Removed value: -{
        -  "horizontal": {
        -    "description": "Flip a clip horizontally.",
        -    "type": "boolean"
        -  },
        -  "vertical": {
        -    "description": "Flip a clip vertically.",
        -    "type": "boolean"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / FlipTransformation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Font / $ref
        Added value: +"#/$defs/Font"
      • removedInput schema / properties / payload / $defs / Font / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Font / description
        Removed value: -"Download a custom font to use with the HTML asset type, using the font name in the CSS or font tag. See our [custom fonts](https://shotstack.io/learn/html-custom-fonts/) getting started guide for more details."
      • removedInput schema / properties / payload / $defs / Font / properties
        Removed value: -{
        -  "src": {
        -    "description": "The URL of the font file. The URL must be publicly accessible or include credentials.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Font / required
        Removed value: -[
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / Font / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / $ref
        Added value: +"#/$defs/GoogleCloudStorageDestination"
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / description
        Removed value: -"Send videos and assets to a [Google Cloud Storage](https://cloud.google.com/storage) bucket. Send files with your own prefix and filename. Google Cloud credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/google-cloud-storage), not in the request."
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/GoogleCloudStorageDestinationOptions",
        -    "description": "Additional Google Cloud Storage configuration options."
        -  },
        -  "provider": {
        -    "default": "google-cloud-storage",
        -    "description": "The destination to send assets to - set to `google-cloud-storage` for Google Cloud Storage.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / $ref
        Added value: +"#/$defs/GoogleCloudStorageDestinationOptions"
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / description
        Removed value: -"Pass additional options to control how files are stored in Google Cloud Storage."
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / properties
        Removed value: -{
        -  "bucket": {
        -    "description": "The bucket name to send files to. The bucket must exist in the Google Cloud Storage account before files can be sent.",
        -    "type": "string"
        -  },
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "prefix": {
        -    "description": "A prefix for the file being sent. This is typically a folder name, i.e. `videos` or `customerId/videos`.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / required
        Removed value: -[
        -  "bucket"
        -]
      • addedInput schema / properties / payload / $defs / GoogleDriveDestination / $ref
        Added value: +"#/$defs/GoogleDriveDestination"
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / description
        Removed value: -"Send rendered videos and assets to the [Google Drive](https://shotstack.io/docs/guide/serving-assets/destinations/google-drive/) cloud storage service. Google Drive uses OAuth and you must authenticate and link your Google account via  [dashboard](https://dashboard.shotstack.io/integrations/google-drive), not in the request."
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/GoogleDriveDestinationOptions",
        -    "description": "Additional Google Drive configuration and features. If omitted, files are saved to the root of My Drive using the default Shotstack filename."
        -  },
        -  "provider": {
        -    "default": "google-drive",
        -    "description": "The destination to send assets to - set to `google-drive` for Google Drive.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / $ref
        Added value: +"#/$defs/GoogleDriveDestinationOptions"
      • removedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / description
        Removed value: -"Pass the folder ID and options to configure how assets are stored in Google Drive."
      • removedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / properties
        Removed value: -{
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "folderId": {
        -    "description": "The Google Drive folder ID where the asset will be stored. If omitted, the asset is saved to the root of My Drive. The folder ID can be retrieved from the URL when logged in to Google Drive, e.g. <a href=\"#\">https://drive.google.com/drive/u/0/folders/1r-eTY6OLO8tzQRKwMyq-fIrQ_7AJEI6A</a>.",
        -    "type": "string"
        -  }
        -}
      • addedInput schema / properties / payload / $defs / Html5Asset / $ref
        Added value: +"#/$defs/Html5Asset"
      • removedInput schema / properties / payload / $defs / Html5Asset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Html5Asset / description
        Removed value: -"The Html5Asset renders full HTML5/CSS3/JS.\n"
      • removedInput schema / properties / payload / $defs / Html5Asset / properties
        Removed value: -{
        -  "css": {
        -    "description": "The CSS string applied to the HTML. Max 500,000 characters.",
        -    "maxLength": 500000,
        -    "type": "string"
        -  },
        -  "html": {
        -    "description": "The HTML markup for the asset. Max 1,000,000 characters.",
        -    "maxLength": 1000000,
        -    "type": "string"
        -  },
        -  "js": {
        -    "description": "Optional JavaScript. Use for chart libraries, animations, or DOM manipulation. `gsap`, `d3`, `anime` and `lottie` are always available. CSS animations, transitions, and `Element.animate()` are also captured automatically. Max 500,000 characters.\n",
        -    "maxLength": 500000,
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "html5",
        -    "description": "The type of asset - set to `html5` for HTML5/CSS3/JS.",
        -    "enum": [
        -      "html5"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Html5Asset / required
        Removed value: -[
        -  "type",
        -  "html"
        -]
      • removedInput schema / properties / payload / $defs / Html5Asset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / HtmlAsset / $ref
        Added value: +"#/$defs/HtmlAsset"
      • removedInput schema / properties / payload / $defs / HtmlAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / HtmlAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / HtmlAsset / description
        Removed value: -"**Notice: The HtmlAsset is deprecated, use the [RichTextAsset](#tocs_richtextasset) instead.**\n\nThe HtmlAsset clip type lets you create text based layout and formatting using\nHTML and CSS. You can also set the height and width of a bounding box for the HTML\ncontent to sit within. Text and elements will wrap within the bounding box.\n"
      • removedInput schema / properties / payload / $defs / HtmlAsset / properties
        Removed value: -{
        -  "background": {
        -    "description": "Apply a background color behind the HTML bounding box using. Set the text color using hexadecimal  color notation. Transparency is supported by setting the first two characters of the hex string  (opposite to HTML), i.e. #80ffffff will be white with 50% transparency.",
        -    "type": "string"
        -  },
        -  "css": {
        -    "description": "The CSS text string to apply styling to the HTML. See list of  [support CSS properties](https://shotstack.io/docs/guide/architecting-an-application/html-support/#supported-css-properties).",
        -    "type": "string"
        -  },
        -  "height": {
        -    "description": "Set the width of the HTML asset bounding box in pixels. Text and elements will be masked if they exceed the  height of the bounding box.",
        -    "type": "integer"
        -  },
        -  "html": {
        -    "description": "The HTML text string. See list of [supported HTML tags](https://shotstack.io/docs/guide/architecting-an-application/html-support/#supported-html-tags).",
        -    "type": "string"
        -  },
        -  "position": {
        -    "description": "Place the HTML in one of nine predefined positions within the HTML area. <ul>\n  <li>`top` - top (center)</li>\n  <li>`topRight` - top right</li>\n  <li>`right` - right (center)</li>\n  <li>`bottomRight` - bottom right</li>\n  <li>`bottom` - bottom (center)</li>\n  <li>`bottomLeft` - bottom left</li>\n  <li>`left` - left (center)</li>\n  <li>`topLeft` - top left</li>\n  <li>`center` - center</li>\n</ul>",
        -    "enum": [
        -      "top",
        -      "topRight",
        -      "right",
        -      "bottomRight",
        -      "bottom",
        -      "bottomLeft",
        -      "left",
        -      "topLeft",
        -      "center"
        -    ],
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "html",
        -    "description": "The type of asset - set to `html` for HTML.",
        -    "enum": [
        -      "html"
        -    ],
        -    "type": "string"
        -  },
        -  "width": {
        -    "description": "Set the width of the HTML asset bounding box in pixels. Text will wrap to fill the bounding box.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / HtmlAsset / required
        Removed value: -[
        -  "type",
        -  "html"
        -]
      • removedInput schema / properties / payload / $defs / HtmlAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / ImageAsset / $ref
        Added value: +"#/$defs/ImageAsset"
      • removedInput schema / properties / payload / $defs / ImageAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / ImageAsset / description
        Removed value: -"The ImageAsset adds an image to a Clip. The image can be sourced from a URL\n(`src`), generated from a text prompt (`prompt`), or both. At least one of\n`src` or `prompt` must be provided.\n\n- **Source URL:** set `src` to the publicly accessible URL of a jpg or png file.\n- **Generated:** set `prompt` to describe the image. Choose a generator with\n  `model` and configure it with model-specific `options`; the engine fills\n  `src` in automatically.\n- **Both:** `src` acts as a preview placeholder while `prompt` drives\n  generation — the image is regenerated from the prompt at render time.\n  Unchanged prompts and options resolve from the generation cache.\n"
      • removedInput schema / properties / payload / $defs / ImageAsset / properties
        Removed value: -{
        -  "crop": {
        -    "$ref": "#/$defs/Crop"
        -  },
        -  "model": {
        -    "description": "The generation model to use when `prompt` is set (e.g. `flux-schnell`, `nano-banana-2`). Defaults to `nano-banana-2` if omitted. Each model's available options are defined by the model registry.",
        -    "type": "string"
        -  },
        -  "options": {
        -    "additionalProperties": true,
        -    "description": "Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.",
        -    "type": "object"
        -  },
        -  "prompt": {
        -    "description": "A text prompt to generate the image from. The engine generates an image at render time and fills `src` automatically; an existing `src` is treated as a preview placeholder and replaced. Use `model` to choose the generator and `options` to configure it.",
        -    "maxLength": 4000,
        -    "type": "string"
        -  },
        -  "src": {
        -    "description": "The image source URL. The URL must be publicly accessible or include credentials. When `prompt` is also set, `src` serves as a preview placeholder and the image is regenerated from the prompt at render time.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "image",
        -    "description": "The type of asset - set to `image` for images.",
        -    "enum": [
        -      "image"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ImageAsset / required
        Removed value: -[
        -  "type"
        -]
      • removedInput schema / properties / payload / $defs / ImageAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / ImageToVideoAsset / $ref
        Added value: +"#/$defs/ImageToVideoAsset"
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / description
        Removed value: -"**Notice: ImageToVideoAsset is deprecated. Use [VideoAsset](#tocs_videoasset)\nwith `prompt`, a `model` that accepts a starting image, and that image in\n`options.startSrc` — for example `seedance-2.0-image-to-video`.** This type continues to\nfunction and is internally rewritten to VideoAsset; no behaviour change for\nexisting integrations.\n\nThe ImageToVideoAsset lets you create a video from an image and a text prompt.\n"
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / properties
        Removed value: -{
        -  "aspectRatio": {
        -    "description": "The aspect ratio (shape) of the video output.",
        -    "enum": [
        -      "1:1",
        -      "4:3",
        -      "16:9",
        -      "9:16",
        -      "3:4",
        -      "21:9",
        -      "9:21"
        -    ],
        -    "type": "string"
        -  },
        -  "crop": {
        -    "$ref": "#/$defs/Crop"
        -  },
        -  "prompt": {
        -    "description": "The instructions for modifying the image into a video sequence.",
        -    "type": "string"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the video clip between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to  adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire video (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire video (i.e. original length / 2).",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "src": {
        -    "description": "The image source URL. The URL must be publicly accessible or include credentials.",
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "image-to-video",
        -    "description": "The type of asset to generate - set to `image-to-video` for image-to-video.",
        -    "enum": [
        -      "image-to-video"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / LumaAsset / $ref
        Added value: +"#/$defs/LumaAsset"
      • removedInput schema / properties / payload / $defs / LumaAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / LumaAsset / description
        Removed value: -"The LumaAsset is used to create luma matte masks, transitions and effects between other assets. A luma matte is a grey scale image or animated video where the black areas are transparent and the white areas solid. The luma matte animation should be provided as an mp4 video file. The src must be a publicly accessible URL to the file."
      • removedInput schema / properties / payload / $defs / LumaAsset / properties
        Removed value: -{
        -  "src": {
        -    "description": "The luma matte source URL. The URL must be publicly accessible or include credentials.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the luma matte clip, in seconds (defaults to 0). Videos will start from the in trim point. A luma matte video will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "luma",
        -    "description": "The type of asset - set to `luma` for luma mattes.",
        -    "enum": [
        -      "luma"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / LumaAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / LumaAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / MergeField / $ref
        Added value: +"#/$defs/MergeField"
      • removedInput schema / properties / payload / $defs / MergeField / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / MergeField / description
        Removed value: -"A merge field consists of a key; `find`, and a value; `replace`. Merge fields can be used to replace placeholders within the JSON edit to create re-usable templates. Placeholders should be a string with double brace delimiters, i.e. `\"{{NAME}}\"`. A placeholder can be used for any value within the JSON edit."
      • removedInput schema / properties / payload / $defs / MergeField / properties
        Removed value: -{
        -  "find": {
        -    "description": "The string to find <u>without</u> delimiters.",
        -    "type": "string"
        -  },
        -  "replace": {
        -    "description": "The replacement value. The replacement can be any valid JSON type - string, boolean, number, etc..."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / MergeField / required
        Removed value: -[
        -  "find",
        -  "replace"
        -]
      • removedInput schema / properties / payload / $defs / MergeField / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / MuxDestination / $ref
        Added value: +"#/$defs/MuxDestination"
      • removedInput schema / properties / payload / $defs / MuxDestination / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / MuxDestination / description
        Removed value: -"**Notice: The Mux destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to the [Mux](https://www.mux.com/docs) video hosting and streaming service. Mux credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/mux), not in the request."
      • removedInput schema / properties / payload / $defs / MuxDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/MuxDestinationOptions",
        -    "description": "Additional Mux configuration and features."
        -  },
        -  "provider": {
        -    "default": "mux",
        -    "description": "The destination to send video to - set to `mux` for Mux.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / MuxDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / MuxDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / MuxDestinationOptions / $ref
        Added value: +"#/$defs/MuxDestinationOptions"
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / description
        Removed value: -"**Notice: MuxDestinationOptions, like the Mux destination, is deprecated.** It continues to work, with no behaviour change for existing integrations.\nPass additional options to control how Mux processes video. Currently supports playback_policy and passthrough options."
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / properties
        Removed value: -{
        -  "passthrough": {
        -    "description": "Sets the Mux `passthrough` option. Max 255 characters.",
        -    "maxLength": 255,
        -    "type": "string"
        -  },
        -  "playbackPolicy": {
        -    "description": "Sets the Mux `playback_policy` option. Value is an array of strings - use `public`, `signed`, or both.",
        -    "items": {
        -      "enum": [
        -        "public",
        -        "signed"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  }
        -}
      • addedInput schema / properties / payload / $defs / Offset / $ref
        Added value: +"#/$defs/Offset"
      • removedInput schema / properties / payload / $defs / Offset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Offset / description
        Removed value: -"Offsets the position of an asset horizontally or vertically by a relative distance."
      • removedInput schema / properties / payload / $defs / Offset / properties
        Removed value: -{
        -  "x": {
        -    "description": "Offset an asset on the horizontal axis (left or right). Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "Range varies from -10 to 10. Positive numbers move the asset right, negative left. The distance moved is relative to the width  of the viewport - i.e. an X offset of 0.5 will move the asset half the screen width to the right.",
        -        "format": "float",
        -        "maximum": 10,
        -        "minimum": -10,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the X offset of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "y": {
        -    "description": "Offset an asset on the vertical axis (up or down). Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "Range varies from -10 to 10. Positive numbers move the asset up, negative down. The distance moved is relative to the height of the viewport - i.e. an Y offset of 0.5 will move the asset half the screen height up.",
        -        "format": "float",
        -        "maximum": 10,
        -        "minimum": -10,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the Y offset of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Offset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Output / $ref
        Added value: +"#/$defs/Output"
      • removedInput schema / properties / payload / $defs / Output / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Output / description
        Removed value: -"The output format, render range and type of media to generate. For all formats except `mp3`, either `resolution` or `size` (with both `width` and `height`) must be specified."
      • removedInput schema / properties / payload / $defs / Output / properties
        Removed value: -{
        -  "aspectRatio": {
        -    "description": "The aspect ratio (shape) of the video or image. Useful for social media output formats. Options are: <ul>\n  <li>`16:9` (default) - regular landscape/horizontal aspect ratio</li>\n  <li>`9:16` - vertical/portrait aspect ratio</li>\n  <li>`1:1` - square aspect ratio</li>\n  <li>`4:5` - short vertical/portrait aspect ratio</li>\n  <li>`4:3` - legacy TV aspect ratio</li>\n</ul>",
        -    "enum": [
        -      "16:9",
        -      "9:16",
        -      "1:1",
        -      "4:5",
        -      "4:3"
        -    ],
        -    "type": "string"
        -  },
        -  "destinations": {
        -    "description": "Specify the storage locations and hosting services to send rendered videos to.",
        -    "items": {
        -      "$ref": "#/$defs/Destinations"
        -    },
        -    "type": "array"
        -  },
        -  "format": {
        -    "description": "The output format and type of media file to generate. <ul>\n  <li>`mp4` - mp4 video file</li>\n  <li>`gif` - animated gif</li>\n  <li>`jpg` - jpg image file</li>\n  <li>`png` - png image file</li>\n  <li>`bmp` - bmp image file</li>\n  <li>`mp3` - mp3 audio file (audio only)</li>\n</ul>",
        -    "enum": [
        -      "mp4",
        -      "gif",
        -      "mp3",
        -      "jpg",
        -      "png",
        -      "bmp"
        -    ],
        -    "type": "string"
        -  },
        -  "fps": {
        -    "description": "Override the default frames per second. Useful for when the source footage is recorded at 30fps, i.e. on  mobile devices. Lower frame rates can be used to add cinematic quality (24fps) or to create smaller file size/faster render times or animated gifs (12 or 15fps). Default is 25fps. <ul>\n  <li>`12` - 12fps</li>\n  <li>`15` - 15fps</li>\n  <li>`24` - 24fps</li>\n  <li>`23.976` - 23.976fps</li>\n  <li>`25` (default) - 25fps</li>\n  <li>`29.97` - 29.97fps</li>\n  <li>`30` - 30fps</li>\n  <li>`48` - 48fps</li>\n  <li>`50` - 50fps</li>\n  <li>`59.94` - 59.94fps</li>\n  <li>`60` - 60fps</li>\n</ul>",
        -    "enum": [
        -      12,
        -      15,
        -      23.976,
        -      24,
        -      25,
        -      29.97,
        -      30,
        -      48,
        -      50,
        -      59.94,
        -      60
        -    ],
        -    "type": "number"
        -  },
        -  "mute": {
        -    "description": "Mute the audio track of the output video. Set to `true` to mute, `false` to un-mute.",
        -    "type": "boolean"
        -  },
        -  "poster": {
        -    "$ref": "#/$defs/Poster",
        -    "description": "Generate a poster image from a specific point on the timeline."
        -  },
        -  "quality": {
        -    "description": "Adjust the output quality of the video, image or audio. Adjusting quality affects  render speed, download speeds and storage requirements due to file size. The default `medium` provides the most optimized choice for all three  factors. <ul>\n  <li>`verylow` - reduced quality, smallest file size</li>\n  <li>`low` - slightly reduced quality, smaller file size</li>\n  <li>`medium` (default) - optimized quality, render speeds and file size</li>\n  <li>`high` - slightly increased quality, larger file size</li>\n  <li>`veryhigh` - highest quality, largest file size</li>\n</ul>",
        -    "enum": [
        -      "verylow",
        -      "low",
        -      "medium",
        -      "high",
        -      "veryhigh"
        -    ],
        -    "type": "string"
        -  },
        -  "range": {
        -    "$ref": "#/$defs/Range"
        -  },
        -  "repeat": {
        -    "description": "Loop settings for gif files. Set to `true` to loop, `false` to play only once.",
        -    "type": "boolean"
        -  },
        -  "resolution": {
        -    "description": "The preset output resolution of the video or image. For custom sizes use the `size` property. Either `resolution` or `size` (with both `width` and `height`) must be specified for all formats except `mp3`. <ul>\n  <li>`preview` - 512px x 288px @ 15fps</li>\n  <li>`mobile` - 640px x 360px @ 25fps</li>\n  <li>`sd` - 1024px x 576px @ 25fps</li>\n  <li>`hd` - 1280px x 720px @ 25fps</li>\n  <li>`1080` - 1920px x 1080px @ 25fps</li>\n  <li>`4k` - 3840px x 2160px @ 25fps</li>\n</ul>",
        -    "enum": [
        -      "preview",
        -      "mobile",
        -      "sd",
        -      "hd",
        -      "1080",
        -      "4k"
        -    ],
        -    "type": "string"
        -  },
        -  "scaleTo": {
        -    "description": "Override the resolution and scale the video or image to render at a different size. When using scaleTo the asset should be edited at the resolution dimensions, i.e. use font sizes that look best at HD, then use scaleTo to output the file at SD and the text will be scaled to the correct size. This is useful if you want to create multiple asset sizes. <ul>\n  <li>`preview` - 512px x 288px @ 15fps</li>\n  <li>`mobile` - 640px x 360px @ 25fps</li>\n  <li>`sd` - 1024px x 576px @25fps</li>\n  <li>`hd` - 1280px x 720px @25fps</li>\n  <li>`1080` - 1920px x 1080px @25fps</li>\n</ul>",
        -    "enum": [
        -      "preview",
        -      "mobile",
        -      "sd",
        -      "hd",
        -      "1080",
        -      "4k"
        -    ],
        -    "type": "string"
        -  },
        -  "size": {
        -    "$ref": "#/$defs/Size"
        -  },
        -  "thumbnail": {
        -    "$ref": "#/$defs/Thumbnail",
        -    "description": "Generate a thumbnail image from a specific point on the timeline."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Output / required
        Removed value: -[
        -  "format"
        -]
      • removedInput schema / properties / payload / $defs / Output / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Poster / $ref
        Added value: +"#/$defs/Poster"
      • removedInput schema / properties / payload / $defs / Poster / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Poster / description
        Removed value: -"Generate a poster image for the video at a specific point from the timeline. The poster image size will match the size of the output video."
      • removedInput schema / properties / payload / $defs / Poster / properties
        Removed value: -{
        -  "capture": {
        -    "description": "The point on the timeline in seconds to capture a single frame to use as the poster image.",
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Poster / required
        Removed value: -[
        -  "capture"
        -]
      • removedInput schema / properties / payload / $defs / Poster / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Range / $ref
        Added value: +"#/$defs/Range"
      • removedInput schema / properties / payload / $defs / Range / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Range / description
        Removed value: -"Specify a time range to render, i.e. to render only a portion of a video or audio file. Omit this setting to  export the entire video. Range can also be used to render a frame at a specific time point - setting a range and output format as `jpg` will output a single frame image at the range `start` point."
      • removedInput schema / properties / payload / $defs / Range / properties
        Removed value: -{
        -  "length": {
        -    "description": "The length of the portion of the video or audio to render - i.e. render 6 seconds of the video.",
        -    "format": "float",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "start": {
        -    "description": "The point on the timeline, in seconds, to start the render from - i.e. start at second 3.",
        -    "format": "float",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Range / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichCaptionActive / $ref
        Added value: +"#/$defs/RichCaptionActive"
      • removedInput schema / properties / payload / $defs / RichCaptionActive / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichCaptionActive / description
        Removed value: -"Styling properties for the active/highlighted word."
      • removedInput schema / properties / payload / $defs / RichCaptionActive / properties
        Removed value: -{
        -  "font": {
        -    "$ref": "#/$defs/RichCaptionActiveFont",
        -    "description": "Font properties for the active word."
        -  },
        -  "shadow": {
        -    "description": "Shadow properties for the active word. Set to \"none\" to explicitly remove the base shadow on the active word.",
        -    "oneOf": [
        -      {
        -        "$ref": "#/$defs/RichTextShadow"
        -      },
        -      {
        -        "enum": [
        -          "none"
        -        ],
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  "stroke": {
        -    "description": "Stroke properties for the active word. Set to \"none\" to explicitly remove the base stroke on the active word.",
        -    "oneOf": [
        -      {
        -        "$ref": "#/$defs/RichTextStroke"
        -      },
        -      {
        -        "enum": [
        -          "none"
        -        ],
        -        "type": "string"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichCaptionActive / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichCaptionActiveFont / $ref
        Added value: +"#/$defs/RichCaptionActiveFont"
      • removedInput schema / properties / payload / $defs / RichCaptionActiveFont / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichCaptionActiveFont / description
        Removed value: -"Font properties for the active/highlighted word."
      • removedInput schema / properties / payload / $defs / RichCaptionActiveFont / properties
        Removed value: -{
        -  "background": {
        -    "description": "The background color behind the active word using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "color": {
        -    "description": "The active word color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "family": {
        -    "description": "The font family for the active word. Inherits from the base font.family when not set.",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the active word where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "size": {
        -    "description": "The font size of the active word in pixels.",
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "number"
        -  },
        -  "textDecoration": {
        -    "default": "none",
        -    "description": "Text decoration to apply to the active word.",
        -    "enum": [
        -      "none",
        -      "underline",
        -      "line-through"
        -    ],
        -    "type": "string"
        -  },
        -  "weight": {
        -    "default": "400",
        -    "description": "The weight of the font for the active word. Can be a number (100-900) or a string. Inherits from the base font.weight when not set.\n"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichCaptionActiveFont / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichCaptionAnimation / $ref
        Added value: +"#/$defs/RichCaptionAnimation"
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / description
        Removed value: -"Word-level animation properties for caption effects."
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / properties
        Removed value: -{
        -  "direction": {
        -    "default": "up",
        -    "description": "Direction for directional animations (slide). Only applicable when style is `slide`.",
        -    "enum": [
        -      "left",
        -      "right",
        -      "up",
        -      "down"
        -    ],
        -    "type": "string"
        -  },
        -  "style": {
        -    "default": "highlight",
        -    "description": "The animation style to apply to words: <ul>\n  <li>`karaoke` - Word-by-word color fill as spoken (shows all words, highlights active)</li>\n  <li>`highlight` - Word changes to active color when spoken (shows all words)</li>\n  <li>`pop` - Each word scales up when active</li>\n  <li>`fade` - Gradual opacity transition per word</li>\n  <li>`slide` - Words slide in from a direction</li>\n  <li>`bounce` - Spring animation on word appearance</li>\n  <li>`typewriter` - Words appear one by one and stay visible</li>\n  <li>`none` - No animation, all words visible immediately</li>\n</ul>",
        -    "enum": [
        -      "karaoke",
        -      "highlight",
        -      "pop",
        -      "fade",
        -      "slide",
        -      "bounce",
        -      "typewriter",
        -      "none"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / required
        Removed value: -[
        -  "style"
        -]
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichCaptionAsset / $ref
        Added value: +"#/$defs/RichCaptionAsset"
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / description
        Removed value: -"The RichCaptionAsset provides word-level caption animations with rich-text styling. It supports\nkaraoke-style highlighting, word-by-word animations, and advanced typography. Captions can be\nsourced from SRT/VTT/TTML subtitle files, from audio/video media URLs (auto-transcribed), or\nfrom alias references to other clips in the same timeline.\n"
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / properties
        Removed value: -{
        -  "active": {
        -    "$ref": "#/$defs/RichCaptionActive",
        -    "description": "Styling properties for the active/highlighted word. These override the base styling when a word is being spoken."
        -  },
        -  "align": {
        -    "$ref": "#/$defs/RichTextAlignment",
        -    "description": "Text alignment properties (horizontal and vertical)."
        -  },
        -  "animation": {
        -    "$ref": "#/$defs/RichCaptionAnimation",
        -    "description": "Word-level animation properties controlling how words are highlighted or revealed."
        -  },
        -  "background": {
        -    "$ref": "#/$defs/RichTextBackground",
        -    "description": "Background styling properties for the caption bounding box."
        -  },
        -  "border": {
        -    "$ref": "#/$defs/RichTextBorder",
        -    "description": "Border styling properties for the caption bounding box."
        -  },
        -  "font": {
        -    "additionalProperties": false,
        -    "description": "Font styling properties for inactive words.",
        -    "properties": {
        -      "background": {
        -        "description": "The background color behind the text using hexadecimal color notation.",
        -        "pattern": "^#[A-Fa-f0-9]{6}$",
        -        "type": "string"
        -      },
        -      "color": {
        -        "default": "#ffffff",
        -        "description": "The text color using hexadecimal color notation.",
        -        "pattern": "^#[A-Fa-f0-9]{6}$",
        -        "type": "string"
        -      },
        -      "family": {
        -        "default": "Roboto",
        -        "description": "The font family name. This must be the Family name embedded in the font, i.e. \"Roboto\".",
        -        "type": "string"
        -      },
        -      "opacity": {
        -        "default": 1,
        -        "description": "The opacity of the text where 1 is opaque and 0 is transparent.",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "size": {
        -        "default": 24,
        -        "description": "The size of the font in pixels (px). Must be between 1 and 500.",
        -        "maximum": 500,
        -        "minimum": 1,
        -        "type": "integer"
        -      },
        -      "style": {
        -        "default": "normal",
        -        "description": "The font style.",
        -        "enum": [
        -          "normal",
        -          "italic"
        -        ],
        -        "type": "string"
        -      },
        -      "weight": {
        -        "default": "400",
        -        "description": "The weight of the font. Can be a number (100-900) or a string ('normal', 'bold', etc.). 100 is lightest, 900 is heaviest (boldest)."
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "padding": {
        -    "description": "Padding inside the caption bounding box. Can be a single number (applied to all sides) or an object with individual sides.",
        -    "oneOf": [
        -      {
        -        "description": "Padding in pixels applied to all sides.",
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "$ref": "#/$defs/RichTextPadding"
        -      }
        -    ]
        -  },
        -  "shadow": {
        -    "$ref": "#/$defs/RichTextShadow",
        -    "description": "Text shadow properties."
        -  },
        -  "src": {
        -    "description": "Source for the caption words. Accepts three formats: (1) the URL to a subtitle file (`.srt`, `.vtt`, `.ttml`, or `.dfxp`) which is parsed directly; (2) the URL to an audio or video media file (`.mp4`, `.mov`, `.webm`, `.mp3`, `.wav`, `.m4a`, `.flac`, `.aac`, `.ogg`, and related formats) which is auto-transcribed; (3) an alias reference in the form `alias://clip-name` where `clip-name` is the alias of another audio, video, or text-to-speech clip in the same timeline — the referenced clip's source is auto-transcribed. For file URLs, the URL must be publicly accessible or include credentials. Content is classified at runtime and unsupported content types (HTML, PDF, images, archives) are rejected with a structured error.",
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  "stroke": {
        -    "$ref": "#/$defs/RichTextStroke",
        -    "description": "Text stroke (outline) properties for inactive words."
        -  },
        -  "style": {
        -    "additionalProperties": false,
        -    "description": "Text style properties including spacing, line height, and transformations.",
        -    "properties": {
        -      "gradient": {
        -        "$ref": "#/$defs/RichTextGradient",
        -        "description": "Gradient fill for text instead of solid color."
        -      },
        -      "letterSpacing": {
        -        "default": 0,
        -        "description": "Additional spacing between letters in pixels. Can be negative for tighter spacing.",
        -        "type": "number"
        -      },
        -      "lineHeight": {
        -        "default": 1.2,
        -        "description": "The line height as a multiplier of the font size. Must be between 0 and 10.",
        -        "maximum": 10,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "size": {
        -        "description": "The font size in pixels. Can be used as an alternative to font.size.",
        -        "maximum": 500,
        -        "minimum": 1,
        -        "type": "number"
        -      },
        -      "textDecoration": {
        -        "default": "none",
        -        "description": "Text decoration to apply.",
        -        "enum": [
        -          "none",
        -          "underline",
        -          "line-through"
        -        ],
        -        "type": "string"
        -      },
        -      "textTransform": {
        -        "default": "none",
        -        "description": "Text transformation to apply.",
        -        "enum": [
        -          "none",
        -          "uppercase",
        -          "lowercase",
        -          "capitalize"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "type": {
        -    "default": "rich-caption",
        -    "description": "The type of asset - set to `rich-caption` for rich captions.",
        -    "enum": [
        -      "rich-caption"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextAlignment / $ref
        Added value: +"#/$defs/RichTextAlignment"
      • removedInput schema / properties / payload / $defs / RichTextAlignment / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextAlignment / description
        Removed value: -"Text alignment properties (horizontal and vertical)."
      • removedInput schema / properties / payload / $defs / RichTextAlignment / properties
        Removed value: -{
        -  "horizontal": {
        -    "default": "center",
        -    "description": "The horizontal alignment of the text.",
        -    "enum": [
        -      "left",
        -      "center",
        -      "right"
        -    ],
        -    "type": "string"
        -  },
        -  "vertical": {
        -    "default": "middle",
        -    "description": "The vertical alignment of the text within the bounding box.",
        -    "enum": [
        -      "top",
        -      "middle",
        -      "bottom"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextAlignment / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextAnimation / $ref
        Added value: +"#/$defs/RichTextAnimation"
      • removedInput schema / properties / payload / $defs / RichTextAnimation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextAnimation / description
        Removed value: -"Animation properties for text entrance effects."
      • removedInput schema / properties / payload / $defs / RichTextAnimation / properties
        Removed value: -{
        -  "direction": {
        -    "description": "Direction for directional animations. Required for slideIn, ascend, shift, and movingLetters presets. <ul>\n  <li>`ascend` - supports: up, down</li>\n  <li>`shift` - supports: left, right, up, down</li>\n  <li>`slideIn` - supports: left, right, up, down</li>\n  <li>`movingLetters` - supports: left, right, up, down</li>\n</ul>",
        -    "enum": [
        -      "left",
        -      "right",
        -      "up",
        -      "down"
        -    ],
        -    "type": "string"
        -  },
        -  "duration": {
        -    "description": "Override animation duration in seconds. Must be between 0.1 and 30 seconds.",
        -    "maximum": 30,
        -    "minimum": 0.1,
        -    "type": "number"
        -  },
        -  "preset": {
        -    "description": "The animation preset to apply. Available presets: <ul>\n  <li>`fadeIn` - fadeIn in animation</li>\n  <li>`slideIn` - slide in from a direction</li>\n  <li>`typewriter` - typewriter effect</li>\n  <li>`ascend` - ascend from a direction</li>\n  <li>`shift` - shift in from a direction</li>\n  <li>`movingLetters` - letters move in from a direction</li>\n</ul>",
        -    "enum": [
        -      "fadeIn",
        -      "slideIn",
        -      "typewriter",
        -      "ascend",
        -      "shift",
        -      "movingLetters"
        -    ],
        -    "type": "string"
        -  },
        -  "style": {
        -    "description": "Animation style - animate by character or by word. Only applicable for typewriter and shift animations.",
        -    "enum": [
        -      "character",
        -      "word"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextAnimation / required
        Removed value: -[
        -  "preset"
        -]
      • removedInput schema / properties / payload / $defs / RichTextAnimation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextAsset / $ref
        Added value: +"#/$defs/RichTextAsset"
      • removedInput schema / properties / payload / $defs / RichTextAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextAsset / description
        Removed value: -"The RichTextAsset provides advanced text rendering with support for custom fonts, gradients, shadows, strokes,\nanimations, and styling options. It offers more flexibility and visual effects than the basic TextAsset.\n"
      • removedInput schema / properties / payload / $defs / RichTextAsset / properties
        Removed value: -{
        -  "align": {
        -    "$ref": "#/$defs/RichTextAlignment",
        -    "description": "Text alignment properties (horizontal and vertical)."
        -  },
        -  "animation": {
        -    "$ref": "#/$defs/RichTextAnimation",
        -    "description": "Animation properties for text entrance effects."
        -  },
        -  "background": {
        -    "$ref": "#/$defs/RichTextBackground",
        -    "description": "Background styling properties for the text bounding box."
        -  },
        -  "border": {
        -    "$ref": "#/$defs/RichTextBorder",
        -    "description": "Border styling properties for the text bounding box."
        -  },
        -  "font": {
        -    "$ref": "#/$defs/RichTextFont",
        -    "description": "Font styling properties."
        -  },
        -  "padding": {
        -    "description": "Padding inside the text bounding box. Can be a single number (applied to all sides) or an object with individual sides.",
        -    "oneOf": [
        -      {
        -        "description": "Padding in pixels applied to all sides.",
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "$ref": "#/$defs/RichTextPadding"
        -      }
        -    ]
        -  },
        -  "shadow": {
        -    "$ref": "#/$defs/RichTextShadow",
        -    "description": "Text shadow properties."
        -  },
        -  "stroke": {
        -    "$ref": "#/$defs/RichTextStroke",
        -    "description": "Text stroke (outline) properties."
        -  },
        -  "style": {
        -    "$ref": "#/$defs/RichTextStyle",
        -    "description": "Text style properties including spacing, line height, and transformations."
        -  },
        -  "text": {
        -    "description": "The text string to display. Maximum 5000 characters.",
        -    "maxLength": 5000,
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "rich-text",
        -    "description": "The type of asset - set to `rich-text` for rich text.",
        -    "enum": [
        -      "rich-text"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextAsset / required
        Removed value: -[
        -  "type",
        -  "text"
        -]
      • removedInput schema / properties / payload / $defs / RichTextAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextBackground / $ref
        Added value: +"#/$defs/RichTextBackground"
      • removedInput schema / properties / payload / $defs / RichTextBackground / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextBackground / description
        Removed value: -"Background styling properties for the text bounding box."
      • removedInput schema / properties / payload / $defs / RichTextBackground / properties
        Removed value: -{
        -  "borderRadius": {
        -    "default": 0,
        -    "description": "The border radius of the background box in pixels. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "color": {
        -    "description": "The background color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the background where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "padding": {
        -    "description": "Inner padding in pixels between the wrap pill edge and the rendered text. Only takes\neffect when `wrap: true`. When omitted, the renderer applies a sensible default\nproportional to the font size (approximately 12% of the active page font size on\nrich-caption assets). Set to 0 for a pill that hugs the text exactly. Available on\nrich-text and rich-caption assets only.\n",
        -    "maximum": 200,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  "wrap": {
        -    "default": false,
        -    "description": "When true, the background pill shrinks to fit the rendered text bounding box plus the\nasset's padding (and stroke width, if present), producing a pill or badge effect. When\nfalse (default), the background fills the full asset content area. Available on\nrich-text and rich-caption assets only; not supported on legacy `type: text`.\n",
        -    "type": "boolean"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextBackground / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextBorder / $ref
        Added value: +"#/$defs/RichTextBorder"
      • removedInput schema / properties / payload / $defs / RichTextBorder / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextBorder / description
        Removed value: -"Border styling properties for the text bounding box."
      • removedInput schema / properties / payload / $defs / RichTextBorder / properties
        Removed value: -{
        -  "color": {
        -    "default": "#000000",
        -    "description": "The border color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the border where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "radius": {
        -    "default": 0,
        -    "description": "The border radius in pixels for rounded corners. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "width": {
        -    "default": 0,
        -    "description": "The width of the border in pixels. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextBorder / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextFont / $ref
        Added value: +"#/$defs/RichTextFont"
      • removedInput schema / properties / payload / $defs / RichTextFont / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextFont / description
        Removed value: -"Font properties for rich text."
      • removedInput schema / properties / payload / $defs / RichTextFont / properties
        Removed value: -{
        -  "background": {
        -    "description": "The background color behind the text using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "color": {
        -    "default": "#000000",
        -    "description": "The text color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "family": {
        -    "default": "Open Sans",
        -    "description": "The font family name. This must be the Family name embedded in the font, i.e. \"Open Sans\".",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the text where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "size": {
        -    "default": 24,
        -    "description": "The size of the font in pixels (px). Must be between 1 and 500.",
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  "stroke": {
        -    "$ref": "#/$defs/RichTextStroke",
        -    "description": "Text stroke (outline) properties."
        -  },
        -  "style": {
        -    "default": "normal",
        -    "description": "The font style.",
        -    "enum": [
        -      "normal",
        -      "italic"
        -    ],
        -    "type": "string"
        -  },
        -  "weight": {
        -    "default": "400",
        -    "description": "The weight of the font. Can be a number (100-900) or a string ('normal', 'bold', etc.). 100 is lightest, 900 is heaviest (boldest)."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextFont / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextGradient / $ref
        Added value: +"#/$defs/RichTextGradient"
      • removedInput schema / properties / payload / $defs / RichTextGradient / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextGradient / description
        Removed value: -"Gradient properties for text fill."
      • removedInput schema / properties / payload / $defs / RichTextGradient / properties
        Removed value: -{
        -  "angle": {
        -    "default": 0,
        -    "description": "The angle of the gradient in degrees (for linear gradients). Must be between 0 and 360.",
        -    "maximum": 360,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "stops": {
        -    "description": "Gradient color stops. Must have at least 2 stops.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "color": {
        -          "description": "Color at this stop using hexadecimal color notation.",
        -          "pattern": "^#[A-Fa-f0-9]{6}$",
        -          "type": "string"
        -        },
        -        "offset": {
        -          "description": "Position of the color stop between 0 (start) and 1 (end).",
        -          "maximum": 1,
        -          "minimum": 0,
        -          "type": "number"
        -        }
        -      },
        -      "required": [
        -        "offset",
        -        "color"
        -      ],
        -      "type": "object"
        -    },
        -    "minItems": 2,
        -    "type": "array"
        -  },
        -  "type": {
        -    "default": "linear",
        -    "description": "The type of gradient.",
        -    "enum": [
        -      "linear",
        -      "radial"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextGradient / required
        Removed value: -[
        -  "stops"
        -]
      • removedInput schema / properties / payload / $defs / RichTextGradient / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextPadding / $ref
        Added value: +"#/$defs/RichTextPadding"
      • removedInput schema / properties / payload / $defs / RichTextPadding / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextPadding / description
        Removed value: -"Padding properties for individual sides of the text bounding box."
      • removedInput schema / properties / payload / $defs / RichTextPadding / properties
        Removed value: -{
        -  "bottom": {
        -    "default": 0,
        -    "description": "Bottom padding in pixels.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "left": {
        -    "default": 0,
        -    "description": "Left padding in pixels.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "right": {
        -    "default": 0,
        -    "description": "Right padding in pixels.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "top": {
        -    "default": 0,
        -    "description": "Top padding in pixels.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextPadding / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextShadow / $ref
        Added value: +"#/$defs/RichTextShadow"
      • removedInput schema / properties / payload / $defs / RichTextShadow / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextShadow / description
        Removed value: -"Text shadow properties."
      • removedInput schema / properties / payload / $defs / RichTextShadow / properties
        Removed value: -{
        -  "blur": {
        -    "default": 0,
        -    "description": "The blur radius of the shadow in pixels. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "color": {
        -    "default": "#000000",
        -    "description": "The shadow color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "offsetX": {
        -    "default": 0,
        -    "description": "Horizontal offset of the shadow in pixels. Positive values move right, negative left.",
        -    "type": "number"
        -  },
        -  "offsetY": {
        -    "default": 0,
        -    "description": "Vertical offset of the shadow in pixels. Positive values move down, negative up.",
        -    "type": "number"
        -  },
        -  "opacity": {
        -    "default": 0.5,
        -    "description": "The opacity of the shadow where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextShadow / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextStroke / $ref
        Added value: +"#/$defs/RichTextStroke"
      • removedInput schema / properties / payload / $defs / RichTextStroke / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextStroke / description
        Removed value: -"Text stroke (outline) properties."
      • removedInput schema / properties / payload / $defs / RichTextStroke / properties
        Removed value: -{
        -  "color": {
        -    "default": "#000000",
        -    "description": "The stroke color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the stroke where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "width": {
        -    "default": 0,
        -    "description": "The width of the stroke in pixels. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextStroke / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextStyle / $ref
        Added value: +"#/$defs/RichTextStyle"
      • removedInput schema / properties / payload / $defs / RichTextStyle / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextStyle / description
        Removed value: -"Text style properties including spacing, line height, and transformations."
      • removedInput schema / properties / payload / $defs / RichTextStyle / properties
        Removed value: -{
        -  "gradient": {
        -    "$ref": "#/$defs/RichTextGradient",
        -    "description": "Gradient fill for text instead of solid color."
        -  },
        -  "letterSpacing": {
        -    "default": 0,
        -    "description": "Additional spacing between letters in pixels. Can be negative for tighter spacing.",
        -    "type": "number"
        -  },
        -  "lineHeight": {
        -    "default": 1.2,
        -    "description": "The line height as a multiplier of the font size. Must be between 0 and 10.",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "textDecoration": {
        -    "default": "none",
        -    "description": "Text decoration to apply.",
        -    "enum": [
        -      "none",
        -      "underline",
        -      "line-through"
        -    ],
        -    "type": "string"
        -  },
        -  "textTransform": {
        -    "default": "none",
        -    "description": "Text transformation to apply.",
        -    "enum": [
        -      "none",
        -      "uppercase",
        -      "lowercase",
        -      "capitalize"
        -    ],
        -    "type": "string"
        -  },
        -  "wordSpacing": {
        -    "default": 0,
        -    "description": "Additional spacing between words in pixels. A value of 0 uses the font's natural space width.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextStyle / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RotateTransformation / $ref
        Added value: +"#/$defs/RotateTransformation"
      • removedInput schema / properties / payload / $defs / RotateTransformation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RotateTransformation / description
        Removed value: -"Rotate a clip by the specified angle in degrees. Rotation origin is set based on the clips `position`."
      • removedInput schema / properties / payload / $defs / RotateTransformation / properties
        Removed value: -{
        -  "angle": {
        -    "description": "Rotate a clip by the specified angle in degrees. Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "The angle to rotate the clip. Can be 0 to 360, or 0 to -360. Using a positive number rotates the clip clockwise, negative numbers counter-clockwise.",
        -        "format": "float",
        -        "maximum": 360,
        -        "minimum": -360,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the rotation of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RotateTransformation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / S3Destination / $ref
        Added value: +"#/$defs/S3Destination"
      • removedInput schema / properties / payload / $defs / S3Destination / description
        Removed value: -"Send videos and assets to an [Amazon S3](https://shotstack.io/docs/guide/serving-assets/destinations/s3/) bucket. Send files to any region with your own prefix and filename. AWS credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/s3), not in the request."
      • removedInput schema / properties / payload / $defs / S3Destination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/S3DestinationOptions",
        -    "description": "Additional S3 configuration options."
        -  },
        -  "provider": {
        -    "default": "s3",
        -    "description": "The destination to send assets to - set to `s3` for S3.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / S3Destination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / S3Destination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / S3DestinationOptions / $ref
        Added value: +"#/$defs/S3DestinationOptions"
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / description
        Removed value: -"Pass additional options to control how files are stored in S3."
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / properties
        Removed value: -{
        -  "acl": {
        -    "description": "Sets the S3 Access Control List (acl) permissions. Default is `private`. Must use a valid  S3 [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl).",
        -    "type": "string"
        -  },
        -  "bucket": {
        -    "description": "The bucket name to send files to. The bucket must exist in the AWS account before files can be sent.",
        -    "type": "string"
        -  },
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "prefix": {
        -    "description": "A prefix for the file being sent. This is typically a folder name, i.e. `videos` or `customerId/videos`.",
        -    "type": "string"
        -  },
        -  "region": {
        -    "description": "Choose the region to send the file to. Must be a valid  [AWS region](https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_region) string like `us-east-1` or `ap-southeast-2`.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / required
        Removed value: -[
        -  "region",
        -  "bucket"
        -]
      • addedInput schema / properties / payload / $defs / ShapeAsset / $ref
        Added value: +"#/$defs/ShapeAsset"
      • removedInput schema / properties / payload / $defs / ShapeAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / ShapeAsset / description
        Removed value: -"The ShapeAsset is used to add shapes to a video. The shape can be styled with a fill and a stroke.\nYou can manipulate properties such as rotation to create dynamic effects like a diamond shape or stripes.\n"
      • removedInput schema / properties / payload / $defs / ShapeAsset / properties
        Removed value: -{
        -  "circle": {
        -    "additionalProperties": false,
        -    "description": "Configuration settings for the circle shape. Required when `shape` is set to `circle`.",
        -    "properties": {
        -      "radius": {
        -        "description": "Set the radius of the circle shape in pixels.",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "radius"
        -    ],
        -    "type": "object"
        -  },
        -  "fill": {
        -    "additionalProperties": false,
        -    "description": "Specifies the fill style of the shape.",
        -    "properties": {
        -      "color": {
        -        "description": "The color of the fill using hexadecimal color notation.",
        -        "type": "string"
        -      },
        -      "opacity": {
        -        "description": "The opacity of the fill where 1 is opaque and 0 is transparent.",
        -        "type": "number"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "height": {
        -    "description": "Sets the height of the bounding box in pixels. This value should be larger than the shape's height. If omitted, the entire viewport width and height will be used.",
        -    "type": "integer"
        -  },
        -  "line": {
        -    "additionalProperties": false,
        -    "description": "Configuration settings for the line shape. Required when `shape` is set to `line`.",
        -    "properties": {
        -      "length": {
        -        "description": "Set the length of the line shape in pixels.",
        -        "type": "integer"
        -      },
        -      "thickness": {
        -        "description": "Set the thickness of the line in pixels.",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "length",
        -      "thickness"
        -    ],
        -    "type": "object"
        -  },
        -  "rectangle": {
        -    "additionalProperties": false,
        -    "description": "Configuration settings for the rectangle shape. Required when `shape` is set to `rectangle`.",
        -    "properties": {
        -      "cornerRadius": {
        -        "description": "Set the corner radius of the rectangle shape.",
        -        "type": "integer"
        -      },
        -      "height": {
        -        "description": "Set the height of the rectangle shape in pixels.",
        -        "type": "integer"
        -      },
        -      "width": {
        -        "description": "Set the width of the rectangle shape in pixels.",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "width",
        -      "height"
        -    ],
        -    "type": "object"
        -  },
        -  "shape": {
        -    "description": "The shape to display.",
        -    "enum": [
        -      "rectangle",
        -      "circle",
        -      "line"
        -    ],
        -    "type": "string"
        -  },
        -  "stroke": {
        -    "additionalProperties": false,
        -    "description": "Specifies the stroke style of the shape.",
        -    "properties": {
        -      "color": {
        -        "description": "The stroke color of the font using hexadecimal color notation.",
        -        "type": "string"
        -      },
        -      "width": {
        -        "description": "The width of the stroke in pixels.",
        -        "type": "number"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "type": {
        -    "default": "shape",
        -    "description": "The type of asset - set to `shape` for shape.",
        -    "enum": [
        -      "shape"
        -    ],
        -    "type": "string"
        -  },
        -  "width": {
        -    "description": "Sets the width of the bounding box in pixels. This value should be larger than the shape's width. If omitted, the entire viewport width and height will be used.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ShapeAsset / required
        Removed value: -[
        -  "type",
        -  "shape"
        -]
      • removedInput schema / properties / payload / $defs / ShapeAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / ShotstackDestination / $ref
        Added value: +"#/$defs/ShotstackDestination"
      • removedInput schema / properties / payload / $defs / ShotstackDestination / description
        Removed value: -"Send videos and assets to the  [Shotstack hosting and CDN](https://shotstack.io/docs/guide/serving-assets/destinations/shotstack/) service.  This destination is enabled by default."
      • removedInput schema / properties / payload / $defs / ShotstackDestination / properties
        Removed value: -{
        -  "exclude": {
        -    "description": "Set to `true` to [opt-out](https://shotstack.io/docs/guide/serving-assets/self-host/) from the Shotstack hosting and CDN service. All files must be downloaded within 24 hours of rendering.",
        -    "type": "boolean"
        -  },
        -  "provider": {
        -    "default": "shotstack",
        -    "description": "The destination to send assets to - set to `shotstack` for Shotstack hosting and CDN.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ShotstackDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / ShotstackDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Size / $ref
        Added value: +"#/$defs/Size"
      • removedInput schema / properties / payload / $defs / Size / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Size / description
        Removed value: -"Set a custom size for a video or image in pixels. When using a custom size omit the `resolution` and `aspectRatio`. Custom sizes must be divisible by 2 based on the encoder specifications."
      • removedInput schema / properties / payload / $defs / Size / properties
        Removed value: -{
        -  "height": {
        -    "description": "Set a custom height for the video or image file in pixels. Value must be divisible by 2. Maximum video height is 1920px, maximum image height is 4096px.",
        -    "maximum": 4096,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  "width": {
        -    "description": "Set a custom width for the video or image file in pixels. Value must be divisible by 2. Maximum video width is 1920px, maximum image width is 4096px.",
        -    "maximum": 4096,
        -    "minimum": 1,
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Size / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / SkewTransformation / $ref
        Added value: +"#/$defs/SkewTransformation"
      • removedInput schema / properties / payload / $defs / SkewTransformation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / SkewTransformation / description
        Removed value: -"Skew a clip so its edges are sheared at an angle. Use values between -100 and 100. Values over 3 or under -3 will skew the clip almost flat."
      • removedInput schema / properties / payload / $defs / SkewTransformation / properties
        Removed value: -{
        -  "x": {
        -    "description": "Skew the clip along it's x axis.",
        -    "oneOf": [
        -      {
        -        "description": "Range varies from -100 to 100. Positive numbers skew the asset right, negative left. The distance moved is relative to the width of the viewport - i.e. an X skew of 0.5 will skew the asset half the screen width to the right.",
        -        "format": "float",
        -        "maximum": 100,
        -        "minimum": -100,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the X skew of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "y": {
        -    "description": "Skew the clip along it's y axis.",
        -    "oneOf": [
        -      {
        -        "description": "Range varies from -100 to 100. Positive numbers skew the asset up, negative down. The distance moved is relative to the height of the viewport - i.e. an Y skew of 0.5 will skew the asset half the screen height up.",
        -        "format": "float",
        -        "maximum": 100,
        -        "minimum": -100,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the Y skew of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / SkewTransformation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Soundtrack / $ref
        Added value: +"#/$defs/Soundtrack"
      • removedInput schema / properties / payload / $defs / Soundtrack / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Soundtrack / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / Soundtrack / description
        Removed value: -"**Notice: The Soundtrack is deprecated, use an [AudioAsset](#tocs_audioasset) clip on its own track instead.** This type continues to function; no behaviour change for existing integrations.\nA music or audio file in mp3 format that plays for the duration of the rendered video or the length of the audio file, which ever is shortest."
      • removedInput schema / properties / payload / $defs / Soundtrack / properties
        Removed value: -{
        -  "effect": {
        -    "description": "The effect to apply to the audio file <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        -    "enum": [
        -      "fadeIn",
        -      "fadeOut",
        -      "fadeInFadeOut"
        -    ],
        -    "type": "string"
        -  },
        -  "src": {
        -    "description": "The URL of the mp3 audio file. The URL must be publicly accessible or include credentials.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Set the volume for the soundtrack between 0 and 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Soundtrack / required
        Removed value: -[
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / Soundtrack / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / SvgAsset / $ref
        Added value: +"#/$defs/SvgAsset"
      • removedInput schema / properties / payload / $defs / SvgAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / SvgAsset / description
        Removed value: -"The SvgAsset is used to add scalable vector graphics (SVG) to a video using raw SVG markup.\n\n**Supported elements:** `<path>`, `<rect>`, `<circle>`, `<ellipse>`,\n`<line>`, `<polygon>`, `<polyline>`\n\n**Automatically extracted from SVG markup:**\n- Path data (converted to a single combined path)\n- Fill color (from `fill` attribute or `style`)\n- Stroke color and width (from attributes or `style`)\n- Dimensions (from `width`/`height` or `viewBox`)\n- Opacity (from `opacity` attribute)\n\nSee [W3C SVG 2 Specification](https://www.w3.org/TR/SVG2/) for path data syntax.\n"
      • removedInput schema / properties / payload / $defs / SvgAsset / properties
        Removed value: -{
        -  "src": {
        -    "description": "Raw SVG markup string. The SVG must contain valid SVG elements. The shape,\nfill, stroke, dimensions and opacity are automatically extracted from the\nSVG content.\n",
        -    "maxLength": 500000,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "svg",
        -    "description": "The asset type - set to `svg` for SVG assets.",
        -    "enum": [
        -      "svg"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / SvgAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / SvgAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextAlignment / $ref
        Added value: +"#/$defs/TextAlignment"
      • removedInput schema / properties / payload / $defs / TextAlignment / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextAlignment / description
        Removed value: -"Horizontal and vertical alignment properties for text."
      • removedInput schema / properties / payload / $defs / TextAlignment / properties
        Removed value: -{
        -  "horizontal": {
        -    "description": "The horizontal alignment of the text. Value must be one of: <ul>\n  <li>`left`</li>\n  <li>`center`</li>\n  <li>`right`</li>\n</ul>",
        -    "enum": [
        -      "left",
        -      "center",
        -      "right"
        -    ],
        -    "type": "string"
        -  },
        -  "vertical": {
        -    "description": "The vertical alignment of the text. Value must be one of: <ul>\n  <li>`top`</li>\n  <li>`center`</li>\n  <li>`bottom`</li>\n</ul>",
        -    "enum": [
        -      "top",
        -      "center",
        -      "bottom"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextAlignment / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextAsset / $ref
        Added value: +"#/$defs/TextAsset"
      • removedInput schema / properties / payload / $defs / TextAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / TextAsset / description
        Removed value: -"**Notice: The TextAsset is deprecated, use the [RichTextAsset](#tocs_richtextasset) instead.** This type\ncontinues to function; no behaviour change for existing integrations.\n\nThe TextAsset is used to add text and titles to a video. The text can be styled with built in and custom\n[Fonts](#tocs_font). You can also add a background bounding box used to control wrapping and overflow. Emoticons are also supported.\n"
      • removedInput schema / properties / payload / $defs / TextAsset / properties
        Removed value: -{
        -  "alignment": {
        -    "$ref": "#/$defs/TextAlignment",
        -    "description": "Alignment properties."
        -  },
        -  "animation": {
        -    "additionalProperties": false,
        -    "description": "Animation properties for text entrance effects.",
        -    "properties": {
        -      "duration": {
        -        "description": "The duration of the animation in seconds.",
        -        "maximum": 30,
        -        "minimum": 0.1,
        -        "type": "number"
        -      },
        -      "preset": {
        -        "description": "The animation preset to apply. <ul>\n  <li>`typewriter` - typewriter effect where characters appear one at a time</li>\n</ul>",
        -        "enum": [
        -          "typewriter"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "preset"
        -    ],
        -    "type": "object"
        -  },
        -  "background": {
        -    "$ref": "#/$defs/TextBackground",
        -    "description": "Background styling properties."
        -  },
        -  "ellipsis": {
        -    "description": "The string to display when text overflows its bounding box. Set to an ellipsis character or custom string to indicate truncated text.",
        -    "type": "string"
        -  },
        -  "font": {
        -    "$ref": "#/$defs/TextFont",
        -    "description": "Font styling properties."
        -  },
        -  "height": {
        -    "description": "Set the width of the HTML asset bounding box in pixels. Text and elements will be masked if they exceed the  height of the bounding box.",
        -    "type": "integer"
        -  },
        -  "stroke": {
        -    "additionalProperties": false,
        -    "description": "Text stroke (outline) properties.",
        -    "properties": {
        -      "color": {
        -        "description": "The stroke color using hexadecimal color notation.",
        -        "pattern": "^#[A-Fa-f0-9]{6}$",
        -        "type": "string"
        -      },
        -      "width": {
        -        "description": "The width of the stroke in pixels.",
        -        "maximum": 10,
        -        "minimum": 0,
        -        "type": "number"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "text": {
        -    "description": "The text string to display.",
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "text",
        -    "description": "The type of asset - set to `text` for text.",
        -    "enum": [
        -      "text"
        -    ],
        -    "type": "string"
        -  },
        -  "width": {
        -    "description": "Set the width of the HTML asset bounding box in pixels. Text will wrap to fill the bounding box.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextAsset / required
        Removed value: -[
        -  "type",
        -  "text"
        -]
      • removedInput schema / properties / payload / $defs / TextAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextBackground / $ref
        Added value: +"#/$defs/TextBackground"
      • removedInput schema / properties / payload / $defs / TextBackground / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextBackground / description
        Removed value: -"Displays a background box behind the text."
      • removedInput schema / properties / payload / $defs / TextBackground / properties
        Removed value: -{
        -  "borderRadius": {
        -    "description": "The border radius of the background box in pixels for rounded corners.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "color": {
        -    "description": "The background color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "description": "The opacity of the background where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "padding": {
        -    "description": "Padding inside the background box in pixels.",
        -    "maximum": 100,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "wrap": {
        -    "description": "Not supported on legacy `text` assets. Accepted here only so validators can emit a clear migration error pointing users to `rich-text` or `rich-caption`, which support background wrapping natively.",
        -    "type": "boolean"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextBackground / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextFont / $ref
        Added value: +"#/$defs/TextFont"
      • removedInput schema / properties / payload / $defs / TextFont / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextFont / description
        Removed value: -"Font properties for text."
      • removedInput schema / properties / payload / $defs / TextFont / properties
        Removed value: -{
        -  "color": {
        -    "description": "The text color using hexadecimal color notation.",
        -    "type": "string"
        -  },
        -  "family": {
        -    "description": "The font family name. This must be Family name embedded in the font, i.e. \"Open Sans\".",
        -    "type": "string"
        -  },
        -  "lineHeight": {
        -    "description": "The line height of the font as a ratio of the font size.",
        -    "type": "number"
        -  },
        -  "opacity": {
        -    "description": "The opacity of the text where 1 is opaque and 0 is transparent.",
        -    "type": "number"
        -  },
        -  "size": {
        -    "description": "The size of the font in pixels (px).",
        -    "type": "integer"
        -  },
        -  "weight": {
        -    "description": "The weight of the font. 100 is lightest, 900 is heaviest (boldest).",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextFont / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextToImageAsset / $ref
        Added value: +"#/$defs/TextToImageAsset"
      • removedInput schema / properties / payload / $defs / TextToImageAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextToImageAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / TextToImageAsset / description
        Removed value: -"**Notice: TextToImageAsset is deprecated. Use [ImageAsset](#tocs_imageasset)\nwith `prompt` instead.** This type continues to function and is internally\nrewritten to ImageAsset; no behaviour change for existing integrations.\n\nThe TextToImageAsset lets you create a dynamic image from a text prompt.\n"
      • removedInput schema / properties / payload / $defs / TextToImageAsset / properties
        Removed value: -{
        -  "crop": {
        -    "$ref": "#/$defs/Crop"
        -  },
        -  "height": {
        -    "description": "The height of the image in pixels.",
        -    "type": "integer"
        -  },
        -  "prompt": {
        -    "description": "The text prompt to generate an image from.",
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "text-to-image",
        -    "description": "The type of asset to generate - set to `text-to-image` for text-to-image.",
        -    "enum": [
        -      "text-to-image"
        -    ],
        -    "type": "string"
        -  },
        -  "width": {
        -    "description": "The width of the image in pixels.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextToImageAsset / required
        Removed value: -[
        -  "type",
        -  "prompt"
        -]
      • removedInput schema / properties / payload / $defs / TextToImageAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextToSpeechAsset / $ref
        Added value: +"#/$defs/TextToSpeechAsset"
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / description
        Removed value: -"**Notice: TextToSpeechAsset is deprecated. Use [AudioAsset](#tocs_audioasset)\nwith `prompt` (the spoken text) and `voice` instead.** This type continues to\nfunction and is internally rewritten to AudioAsset; no behaviour change for\nexisting integrations.\n\nThe TextToSpeechAsset lets you generate a voice over from text using a text-to-speech service.\nThe generated audio can be trimmed, faded and have its volume and speed adjusted using the\nsame properties available on the AudioAsset.\n"
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / properties
        Removed value: -{
        -  "effect": {
        -    "description": "The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        -    "enum": [
        -      "none",
        -      "fadeIn",
        -      "fadeOut",
        -      "fadeInFadeOut"
        -    ],
        -    "type": "string"
        -  },
        -  "language": {
        -    "description": "The language code for the text-to-speech conversion.",
        -    "type": "string"
        -  },
        -  "newscaster": {
        -    "default": false,
        -    "description": "Set the voice to newscaster mode.",
        -    "type": "boolean"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the audio clip between 0 (paused) and 10 (10x normal speed), where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length.",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "text": {
        -    "description": "The text to convert to speech.",
        -    "type": "string"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the audio clip, in seconds (defaults to 0). Audio will start from the trim point. The audio will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "text-to-speech",
        -    "description": "The type of asset - set to `text-to-speech` for text-to-speech.",
        -    "enum": [
        -      "text-to-speech"
        -    ],
        -    "type": "string"
        -  },
        -  "voice": {
        -    "description": "The voice to use for the text-to-speech conversion.",
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions.",
        -    "oneOf": [
        -      {
        -        "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -        "format": "float",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / required
        Removed value: -[
        -  "type",
        -  "text",
        -  "voice"
        -]
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Thumbnail / $ref
        Added value: +"#/$defs/Thumbnail"
      • removedInput schema / properties / payload / $defs / Thumbnail / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Thumbnail / description
        Removed value: -"Generate a thumbnail image for the video or image at a specific point from the timeline."
      • removedInput schema / properties / payload / $defs / Thumbnail / properties
        Removed value: -{
        -  "capture": {
        -    "description": "The point on the timeline in seconds to capture a single frame to use as the thumbnail image.",
        -    "type": "number"
        -  },
        -  "scale": {
        -    "description": "Scale the thumbnail size to a fraction of the viewport size - i.e. setting the scale to 0.5 will scale  the thumbnail to half the size of the viewport.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Thumbnail / required
        Removed value: -[
        -  "capture",
        -  "scale"
        -]
      • removedInput schema / properties / payload / $defs / Thumbnail / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Timeline / $ref
        Added value: +"#/$defs/Timeline"
      • removedInput schema / properties / payload / $defs / Timeline / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Timeline / description
        Removed value: -"A timeline represents the contents of a video edit over time, an audio edit over time, in seconds, or an image layout. A timeline consists of layers called tracks. Tracks are composed of titles, images, audio, html or video segments referred to as clips which are placed along the track at specific starting point and lasting for a specific amount of time."
      • removedInput schema / properties / payload / $defs / Timeline / properties
        Removed value: -{
        -  "background": {
        -    "description": "A hexadecimal value for the timeline background colour. Defaults to #000000 (black).",
        -    "type": "string"
        -  },
        -  "cache": {
        -    "description": "Disable the caching of ingested source footage and assets. See  [caching](https://shotstack.io/docs/guide/architecting-an-application/caching/) for more details.",
        -    "type": "boolean"
        -  },
        -  "fonts": {
        -    "description": "An array of custom fonts to be downloaded for use by the HTML assets.",
        -    "items": {
        -      "$ref": "#/$defs/Font"
        -    },
        -    "type": "array"
        -  },
        -  "soundtrack": {
        -    "$ref": "#/$defs/Soundtrack",
        -    "deprecated": true,
        -    "description": "A music or audio soundtrack file in mp3 format. Deprecated - use an [AudioAsset](#tocs_audioasset) clip on its own track instead."
        -  },
        -  "tracks": {
        -    "description": "A timeline consists of an array of tracks, each track containing clips. Tracks are layered on top of each other in the same order they are added to the array with the top most track layered over the top of those below it. Ensure that a track containing titles is the top most track so that it is displayed above videos and images.",
        -    "items": {
        -      "$ref": "#/$defs/Track"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Timeline / required
        Removed value: -[
        -  "tracks"
        -]
      • removedInput schema / properties / payload / $defs / Timeline / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TitleAsset / $ref
        Added value: +"#/$defs/TitleAsset"
      • removedInput schema / properties / payload / $defs / TitleAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TitleAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / TitleAsset / description
        Removed value: -"**Notice: The TitleAsset is deprecated, use the [RichTextAsset](#tocs_richtextasset) instead.**\n\nThe TitleAsset clip type lets you create video titles from a text string and apply styling and positioning.\n"
      • removedInput schema / properties / payload / $defs / TitleAsset / properties
        Removed value: -{
        -  "background": {
        -    "description": "Apply a background color behind the text. Set the text color using hexadecimal color notation. Transparency is supported by setting the first two characters of the hex string (opposite to HTML),  i.e. #80ffffff will be white with 50% transparency. Omit to use transparent background.",
        -    "type": "string"
        -  },
        -  "color": {
        -    "description": "Set the text color using hexadecimal color notation. Transparency is supported by setting the first two characters of the hex string (opposite to HTML),  i.e. #80ffffff will be white with  50% transparency.",
        -    "type": "string"
        -  },
        -  "offset": {
        -    "$ref": "#/$defs/Offset",
        -    "description": "Offset the location of the title relative to its position on the screen."
        -  },
        -  "position": {
        -    "description": "Place the title in one of nine predefined positions of the viewport. <ul>\n  <li>`top` - top (center)</li>\n  <li>`topRight` - top right</li>\n  <li>`right` - right (center)</li>\n  <li>`bottomRight` - bottom right</li>\n  <li>`bottom` - bottom (center)</li>\n  <li>`bottomLeft` - bottom left</li>\n  <li>`left` - left (center)</li>\n  <li>`topLeft` - top left</li>\n  <li>`center` - center</li>\n</ul>",
        -    "enum": [
        -      "top",
        -      "topRight",
        -      "right",
        -      "bottomRight",
        -      "bottom",
        -      "bottomLeft",
        -      "left",
        -      "topLeft",
        -      "center"
        -    ],
        -    "type": "string"
        -  },
        -  "size": {
        -    "description": "Set the relative size of the text using predefined sizes from xx-small to xx-large. <ul>\n  <li>`xx-small`</li>\n  <li>`x-small`</li>\n  <li>`small`</li>\n  <li>`medium`</li>\n  <li>`large`</li>\n  <li>`x-large`</li>\n  <li>`xx-large`</li>\n</ul>",
        -    "enum": [
        -      "xx-small",
        -      "x-small",
        -      "small",
        -      "medium",
        -      "large",
        -      "x-large",
        -      "xx-large"
        -    ],
        -    "type": "string"
        -  },
        -  "style": {
        -    "description": "Uses a preset to apply font properties and styling to the title. <ul>\n  <li>`minimal`</li>\n  <li>`blockbuster`</li>\n  <li>`vogue`</li>\n  <li>`sketchy`</li>\n  <li>`skinny`</li>\n  <li>`chunk`</li>\n  <li>`chunkLight`</li>\n  <li>`marker`</li>\n  <li>`future`</li>\n  <li>`subtitle`</li>\n</ul>",
        -    "enum": [
        -      "minimal",
        -      "blockbuster",
        -      "vogue",
        -      "sketchy",
        -      "skinny",
        -      "chunk",
        -      "chunkLight",
        -      "marker",
        -      "future",
        -      "subtitle"
        -    ],
        -    "type": "string"
        -  },
        -  "text": {
        -    "description": "The title text string - i.e. \"My Title\".",
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "title",
        -    "description": "The type of asset - set to `title` for titles.",
        -    "enum": [
        -      "title"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TitleAsset / required
        Removed value: -[
        -  "type",
        -  "text"
        -]
      • removedInput schema / properties / payload / $defs / TitleAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Track / $ref
        Added value: +"#/$defs/Track"
      • removedInput schema / properties / payload / $defs / Track / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Track / description
        Removed value: -"A track contains an array of clips. Tracks are layered on top of each other in the order in the array. The top most track will render on top of those below it."
      • removedInput schema / properties / payload / $defs / Track / properties
        Removed value: -{
        -  "clips": {
        -    "description": "An array of Clips comprising of TitleClip, ImageClip or VideoClip.",
        -    "items": {
        -      "$ref": "#/$defs/Clip"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Track / required
        Removed value: -[
        -  "clips"
        -]
      • removedInput schema / properties / payload / $defs / Track / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Transformation / $ref
        Added value: +"#/$defs/Transformation"
      • removedInput schema / properties / payload / $defs / Transformation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Transformation / description
        Removed value: -"Apply one or more transformations to a clip. Transformations alter the visual properties of a clip and can be combined to create new shapes and effects."
      • removedInput schema / properties / payload / $defs / Transformation / properties
        Removed value: -{
        -  "flip": {
        -    "$ref": "#/$defs/FlipTransformation"
        -  },
        -  "rotate": {
        -    "$ref": "#/$defs/RotateTransformation"
        -  },
        -  "skew": {
        -    "$ref": "#/$defs/SkewTransformation"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Transformation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Transition / $ref
        Added value: +"#/$defs/Transition"
      • removedInput schema / properties / payload / $defs / Transition / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Transition / description
        Removed value: -"In and out transitions for a clip - i.e. fade in and fade out"
      • removedInput schema / properties / payload / $defs / Transition / properties
        Removed value: -{
        -  "in": {
        -    "description": "The transition in. Available transitions are:\n  <ul>\n    <li>`fade` - fade in</li>\n    <li>`reveal` - reveal from left to right</li>\n    <li>`wipeLeft` - fade across screen to the left</li>\n    <li>`wipeRight` - fade across screen to the right</li>\n    <li>`slideLeft` - move slightly left and fade in</li>\n    <li>`slideRight` - move slightly right and fade in</li>\n    <li>`slideUp` - move slightly up and fade in</li>\n    <li>`slideDown` - move slightly down and fade in</li>\n    <li>`carouselLeft` - slide in from right to left</li>\n    <li>`carouselRight` - slide in from left to right</li>\n    <li>`carouselUp` - slide in from bottom to top</li>\n    <li>`carouselDown` - slide in from top to bottom</li>\n    <li>`shuffleTopRight` - rotate in from top right</li>\n    <li>`shuffleRightTop` - rotate in from right top</li>\n    <li>`shuffleRightBottom` - rotate in from right bottom</li>\n    <li>`shuffleBottomRight` - rotate in from bottom right</li>\n    <li>`shuffleBottomLeft` - rotate in from bottom left</li>\n    <li>`shuffleLeftBottom` - rotate in from left bottom</li>\n    <li>`shuffleLeftTop` - rotate in from left top</li>\n    <li>`shuffleTopLeft` - rotate in from top left</li>\n    <li>`zoom` - fast zoom in</li>\n  </ul>\nThe transition speed can also be controlled by appending `Fast` or `Slow` to the transition, e.g. `fadeFast` or `CarouselLeftSlow`.",
        -    "enum": [
        -      "none",
        -      "fade",
        -      "fadeSlow",
        -      "fadeFast",
        -      "reveal",
        -      "revealSlow",
        -      "revealFast",
        -      "wipeLeft",
        -      "wipeLeftSlow",
        -      "wipeLeftFast",
        -      "wipeRight",
        -      "wipeRightSlow",
        -      "wipeRightFast",
        -      "slideLeft",
        -      "slideLeftSlow",
        -      "slideLeftFast",
        -      "slideRight",
        -      "slideRightSlow",
        -      "slideRightFast",
        -      "slideUp",
        -      "slideUpSlow",
        -      "slideUpFast",
        -      "slideDown",
        -      "slideDownSlow",
        -      "slideDownFast",
        -      "carouselLeft",
        -      "carouselLeftSlow",
        -      "carouselLeftFast",
        -      "carouselRight",
        -      "carouselRightSlow",
        -      "carouselRightFast",
        -      "carouselUp",
        -      "carouselUpSlow",
        -      "carouselUpFast",
        -      "carouselDown",
        -      "carouselDownSlow",
        -      "carouselDownFast",
        -      "shuffleTopRight",
        -      "shuffleTopRightSlow",
        -      "shuffleTopRightFast",
        -      "shuffleRightTop",
        -      "shuffleRightTopSlow",
        -      "shuffleRightTopFast",
        -      "shuffleRightBottom",
        -      "shuffleRightBottomSlow",
        -      "shuffleRightBottomFast",
        -      "shuffleBottomRight",
        -      "shuffleBottomRightSlow",
        -      "shuffleBottomRightFast",
        -      "shuffleBottomLeft",
        -      "shuffleBottomLeftSlow",
        -      "shuffleBottomLeftFast",
        -      "shuffleLeftBottom",
        -      "shuffleLeftBottomSlow",
        -      "shuffleLeftBottomFast",
        -      "shuffleLeftTop",
        -      "shuffleLeftTopSlow",
        -      "shuffleLeftTopFast",
        -      "shuffleTopLeft",
        -      "shuffleTopLeftSlow",
        -      "shuffleTopLeftFast",
        -      "zoom"
        -    ],
        -    "type": "string"
        -  },
        -  "out": {
        -    "description": "The transition out. Available transitions are:\n  <ul>\n    <li>`fade` - fade out</li>\n    <li>`reveal` - reveal from right to left</li>\n    <li>`wipeLeft` - fade across screen to the left</li>\n    <li>`wipeRight` - fade across screen to the right</li>\n    <li>`slideLeft` - move slightly left and fade out</li>\n    <li>`slideRight` - move slightly right and fade out</li>\n    <li>`slideUp` - move slightly up and fade out</li>\n    <li>`slideDown` - move slightly down and fade out</li>\n    <li>`carouselLeft` - slide out from right to left</li>\n    <li>`carouselRight` - slide out from left to right</li>\n    <li>`carouselUp` - slide out from bottom to top</li>\n    <li>`carouselDown` - slide out from top  to bottom</li>\n    <li>`shuffleTopRight` - rotate out from top right</li>\n    <li>`shuffleRightTop` - rotate out from right top</li>\n    <li>`shuffleRightBottom` - rotate out from right bottom</li>\n    <li>`shuffleBottomRight` - rotate out from bottom right</li>\n    <li>`shuffleBottomLeft` - rotate out from bottom left</li>\n    <li>`shuffleLeftBottom` - rotate out from left bottom</li>\n    <li>`shuffleLeftTop` - rotate out from left top</li>\n    <li>`shuffleTopLeft` - rotate out from top left</li>\n    <li>`zoom` - fast zoom out</li>\n  </ul>\nThe transition speed can also be controlled by appending `Fast` or `Slow` to the transition, e.g. `fadeFast` or `CarouselLeftSlow`.",
        -    "enum": [
        -      "none",
        -      "fade",
        -      "fadeSlow",
        -      "fadeFast",
        -      "reveal",
        -      "revealSlow",
        -      "revealFast",
        -      "wipeLeft",
        -      "wipeLeftSlow",
        -      "wipeLeftFast",
        -      "wipeRight",
        -      "wipeRightSlow",
        -      "wipeRightFast",
        -      "slideLeft",
        -      "slideLeftSlow",
        -      "slideLeftFast",
        -      "slideRight",
        -      "slideRightSlow",
        -      "slideRightFast",
        -      "slideUp",
        -      "slideUpSlow",
        -      "slideUpFast",
        -      "slideDown",
        -      "slideDownSlow",
        -      "slideDownFast",
        -      "carouselLeft",
        -      "carouselLeftSlow",
        -      "carouselLeftFast",
        -      "carouselRight",
        -      "carouselRightSlow",
        -      "carouselRightFast",
        -      "carouselUp",
        -      "carouselUpSlow",
        -      "carouselUpFast",
        -      "carouselDown",
        -      "carouselDownSlow",
        -      "carouselDownFast",
        -      "shuffleTopRight",
        -      "shuffleTopRightSlow",
        -      "shuffleTopRightFast",
        -      "shuffleRightTop",
        -      "shuffleRightTopSlow",
        -      "shuffleRightTopFast",
        -      "shuffleRightBottom",
        -      "shuffleRightBottomSlow",
        -      "shuffleRightBottomFast",
        -      "shuffleBottomRight",
        -      "shuffleBottomRightSlow",
        -      "shuffleBottomRightFast",
        -      "shuffleBottomLeft",
        -      "shuffleBottomLeftSlow",
        -      "shuffleBottomLeftFast",
        -      "shuffleLeftBottom",
        -      "shuffleLeftBottomSlow",
        -      "shuffleLeftBottomFast",
        -      "shuffleLeftTop",
        -      "shuffleLeftTopSlow",
        -      "shuffleLeftTopFast",
        -      "shuffleTopLeft",
        -      "shuffleTopLeftSlow",
        -      "shuffleTopLeftFast",
        -      "zoom"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Transition / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Tween / $ref
        Added value: +"#/$defs/Tween"
      • removedInput schema / properties / payload / $defs / Tween / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Tween / description
        Removed value: -"Use a Tween to [animate properties over time](/docs/guide/architecting-an-application/animations/). The following properties are currently supported and can be animated:\n  <ul>\n    <li>Opacity - animate the transparency of a clip.</li>\n    <li>Offset - animate the x and y position of a clip.</li>\n    <li>Rotation - animate the rotation of a clip.</li>\n    <li>Skew - animate the horizontal and vertical shearing effect.</li>\n    <li>Volume - animate the audio volume of a clip.</li>\n  </ul>"
      • removedInput schema / properties / payload / $defs / Tween / properties
        Removed value: -{
        -  "easing": {
        -    "description": "The easing function to use for the animation. Easing controls the rate of change of the animated value, allowing for more natural motion by speeding up or slowing down the animation at different points. Only applicable if interpolation is set to `bezier`.",
        -    "enum": [
        -      "ease",
        -      "easeIn",
        -      "easeOut",
        -      "easeInOut",
        -      "easeInQuad",
        -      "easeInCubic",
        -      "easeInQuart",
        -      "easeInQuint",
        -      "easeInSine",
        -      "easeInExpo",
        -      "easeInCirc",
        -      "easeInBack",
        -      "easeOutQuad",
        -      "easeOutCubic",
        -      "easeOutQuart",
        -      "easeOutQuint",
        -      "easeOutSine",
        -      "easeOutExpo",
        -      "easeOutCirc",
        -      "easeOutBack",
        -      "easeInOutQuad",
        -      "easeInOutCubic",
        -      "easeInOutQuart",
        -      "easeInOutQuint",
        -      "easeInOutSine",
        -      "easeInOutExpo",
        -      "easeInOutCirc",
        -      "easeInOutBack"
        -    ],
        -    "type": "string"
        -  },
        -  "from": {
        -    "description": "The initial property value at the start of the animation."
        -  },
        -  "interpolation": {
        -    "description": "The interpolation method to use for the animation. Available options are: <ul>\n  <li>`linear` - a linear interpolation between the start and end values.</li>\n  <li>`bezier` - a bezier curve interpolation between the start and end values.</li>\n  <li>`constant` - an interpolation where the property instantly jumps from the start to the end value, without any gradual transition.</li>\n</ul>",
        -    "enum": [
        -      "linear",
        -      "bezier",
        -      "constant"
        -    ],
        -    "type": "string"
        -  },
        -  "length": {
        -    "description": "The duration of the animation in seconds.",
        -    "type": "number"
        -  },
        -  "start": {
        -    "description": "The time in seconds when the animation starts, relative to the clip, not the timeline.",
        -    "type": "number"
        -  },
        -  "to": {
        -    "description": "The final property value at the end of the animation."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Tween / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VideoAsset / $ref
        Added value: +"#/$defs/VideoAsset"
      • removedInput schema / properties / payload / $defs / VideoAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / VideoAsset / description
        Removed value: -"The VideoAsset adds a video to a Clip. The video can be sourced from a URL\n(`src`), generated from a text prompt (`prompt`), or both. At least one of\n`src` or `prompt` must be provided.\n\n- **Source URL:** set `src` to the URL of an mp4 (or compatible) video file.\n- **Generated:** set `prompt` to describe the motion. Choose a generator\n  with `model` and configure it with model-specific `options`. Models that\n  animate an image take it as `options.startSrc` (the original\n  image-to-video models use `options.inputSrc`); the default model\n  generates from the prompt alone. The generated `src` is filled in\n  automatically.\n- **Both:** `src` acts as a preview placeholder while `prompt` drives\n  generation — the video is regenerated from the prompt at render time.\n  Unchanged prompts and options resolve from the generation cache.\n"
      • removedInput schema / properties / payload / $defs / VideoAsset / properties
        Removed value: -{
        -  "chromaKey": {
        -    "$ref": "#/$defs/ChromaKey"
        -  },
        -  "crop": {
        -    "$ref": "#/$defs/Crop"
        -  },
        -  "model": {
        -    "description": "The generation model to use when `prompt` is set (e.g. `seedance-2.0-text-to-video`). Defaults to `seedance-2.0-text-to-video` if omitted. `GET /models` lists what is available and the options each accepts.",
        -    "type": "string"
        -  },
        -  "options": {
        -    "additionalProperties": true,
        -    "description": "Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.",
        -    "type": "object"
        -  },
        -  "prompt": {
        -    "description": "A text prompt to generate the video from. The engine generates a video at render time and fills `src` automatically; an existing `src` is treated as a preview placeholder and replaced. Use `model` to choose the generator and `options` to configure it. A starting image goes in `options.startSrc` — or `options.inputSrc` on the original image-to-video models — on the models that accept one.",
        -    "maxLength": 4000,
        -    "type": "string"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the video clip. Use a number for a constant speed or an array of [Tween](./#tocs_tween) objects to change speed over time, for example easing from normal speed up to 3x.",
        -    "oneOf": [
        -      {
        -        "description": "The playback speed between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire video (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire video (i.e. original length / 2).",
        -        "format": "float",
        -        "maximum": 10,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects that change the playback speed over time. A speed of 0 holds the current frame. The clip length is not adjusted, so set it to cover the footage you want to play.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "src": {
        -    "description": "The video source URL. The URL must be publicly accessible or include credentials. When `prompt` is also set, `src` serves as a preview placeholder and the video is regenerated from the prompt at render time.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "transcode": {
        -    "description": "Set to `true` to force re-encoding of the video during preprocessing. This can help resolve compatibility issues, fix rotation problems, synchronize audio, or convert formats. The video will be processed to ensure optimal compatibility with the rendering engine.",
        -    "type": "boolean"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the video clip, in seconds (defaults to 0). Videos will start from the in trim point. The video will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "video",
        -    "description": "The type of asset - set to `video` for videos.",
        -    "enum": [
        -      "video"
        -    ],
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Set the volume of the video clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions.",
        -    "oneOf": [
        -      {
        -        "description": "The volume level for the video clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -        "format": "float",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "volumeEffect": {
        -    "description": "Preset volume effects to apply to the video asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        -    "enum": [
        -      "none",
        -      "fadeIn",
        -      "fadeOut",
        -      "fadeInFadeOut"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VideoAsset / required
        Removed value: -[
        -  "type"
        -]
      • removedInput schema / properties / payload / $defs / VideoAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VimeoDestination / $ref
        Added value: +"#/$defs/VimeoDestination"
      • removedInput schema / properties / payload / $defs / VimeoDestination / description
        Removed value: -"Send videos to [Vimeo](https://shotstack.io/docs/guide/serving-assets/destinations/vimeo/) video hosting and streaming service. Vimeo credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/vimeo), not in the request."
      • removedInput schema / properties / payload / $defs / VimeoDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/VimeoDestinationOptions",
        -    "description": "Additional Vimeo configuration and features."
        -  },
        -  "provider": {
        -    "default": "vimeo",
        -    "description": "The destination to send video to - set to `vimeo` for Vimeo.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VimeoDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / VimeoDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VimeoDestinationOptions / $ref
        Added value: +"#/$defs/VimeoDestinationOptions"
      • removedInput schema / properties / payload / $defs / VimeoDestinationOptions / description
        Removed value: -"Pass additional options to control how Vimeo publishes video, including name, description and privacy settings."
      • removedInput schema / properties / payload / $defs / VimeoDestinationOptions / properties
        Removed value: -{
        -  "description": {
        -    "description": "A description of the video that will be displayed on the Vimeo website.",
        -    "type": "string"
        -  },
        -  "folderUri": {
        -    "description": "The Vimeo folder URI to upload the video to. The folder must already exist in your Vimeo account.",
        -    "type": "string"
        -  },
        -  "name": {
        -    "description": "A name or title for the video that will be displayed on the Vimeo website.",
        -    "type": "string"
        -  },
        -  "privacy": {
        -    "$ref": "#/$defs/VimeoDestinationPrivacyOptions",
        -    "description": "Options to control the visibility of videos and privacy features."
        -  }
        -}
      • addedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / $ref
        Added value: +"#/$defs/VimeoDestinationPrivacyOptions"
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / description
        Removed value: -"Options to control the visibility of videos and privacy features."
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / properties
        Removed value: -{
        -  "add": {
        -    "description": "Set whether other users can add the video to their collections.",
        -    "type": "boolean"
        -  },
        -  "comments": {
        -    "description": "Set who can comment on the video. Available options are: <ul>\n  <li>`anybody` - Anyone can comment on the video.</li>\n  <li>`nobody` - Only the video owner can comment on the video.</li>\n  <li>`contacts` - Only contacts can comment on the video.</li>\n</ul>",
        -    "enum": [
        -      "anybody",
        -      "nobody",
        -      "contacts"
        -    ],
        -    "type": "string"
        -  },
        -  "download": {
        -    "description": "Set whether the video can be downloaded.",
        -    "type": "boolean"
        -  },
        -  "embed": {
        -    "description": "Set who can embed the video. Available options are: <ul>\n  <li>`public` - Anyone can embed the video.</li>\n  <li>`private` - Only the video owner can embed the video.</li>\n  <li>`whitelist` - Only whitelisted domains can embed the video.</li>\n</ul>",
        -    "enum": [
        -      "public",
        -      "private",
        -      "whitelist"
        -    ],
        -    "type": "string"
        -  },
        -  "view": {
        -    "description": "Set who can view the videos. Available options are: <ul>\n  <li>`anybody` - Anyone can view the video.</li>\n  <li>`nobody` - Only the video owner can view the video.</li>\n  <li>`contacts` - Only contacts can view the video.</li>\n  <li>`password` - A password is required to view the video.</li>\n  <li>`unlisted` - The video is not listed on Vimeo.</li>\n</ul>",
        -    "enum": [
        -      "anybody",
        -      "nobody",
        -      "contacts",
        -      "password",
        -      "unlisted"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / type
        Removed value: -"object"
    • Changedcreate_upload_url_file1 field changed
      • changedInput schema / properties / confirm / description
        Previous value: -"Must be true for this exact requested render, generation, mutation, upload URL or deletion."New value: +"Set true only when the user asked for exactly this action."
    • Changeddelete_asset1 field changed
      • changedInput schema / properties / confirm / description
        Previous value: -"Must be true for this exact requested render, generation, mutation, upload URL or deletion."New value: +"Set true only when the user asked for exactly this action."
    • Changeddelete_source1 field changed
      • changedInput schema / properties / confirm / description
        Previous value: -"Must be true for this exact requested render, generation, mutation, upload URL or deletion."New value: +"Set true only when the user asked for exactly this action."
    • Changeddelete_template1 field changed
      • changedInput schema / properties / confirm / description
        Previous value: -"Must be true for this exact requested render, generation, mutation, upload URL or deletion."New value: +"Set true only when the user asked for exactly this action."
    • Changedgenerate_asset16 fields changed
      • addedInput schema / $defs / length
        Added value: +{
        +  "description": "The length, in seconds, of the clip the asset fills. A model that generates to a duration takes it from this value in place of its own duration option. Other models ignore it.",
        +  "exclusiveMinimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / confirm / description
        Previous value: -"Must be true for this exact requested render, generation, mutation, upload URL or deletion."New value: +"Set true only when the user asked for exactly this action."
      • addedInput schema / properties / length / $ref
        Added value: +"#/$defs/length"
      • removedInput schema / properties / length / description
        Removed value: -"The length, in seconds, of the clip the asset fills. A model that generates to a duration takes it from this value in place of its own duration option. Other models ignore it."
      • removedInput schema / properties / length / exclusiveMinimum
        Removed value: -0
      • removedInput schema / properties / length / type
        Removed value: -"number"
      • addedInput schema / properties / payload / $defs / GenerationAsset / $ref
        Added value: +"#/$defs/GenerationAsset"
      • removedInput schema / properties / payload / $defs / GenerationAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / GenerationAsset / description
        Removed value: -"An image, video or audio asset to generate from a text prompt."
      • removedInput schema / properties / payload / $defs / GenerationAsset / properties
        Removed value: -{
        -  "model": {
        -    "description": "The generation model. Defaults to `nano-banana-2` for images, `seedance-2.0-text-to-video` for video and `elevenlabs-multilingual-v2` for audio. `GET /models` lists the models for each type.",
        -    "type": "string"
        -  },
        -  "options": {
        -    "additionalProperties": true,
        -    "description": "Settings for the chosen `model`. `GET /models` lists the options each model accepts; omitted options use the model's defaults and unknown or invalid options are rejected. A starting image for video goes in `startSrc` (`inputSrc` on the original image-to-video models) and a speech voice in `voice`.",
        -    "type": "object"
        -  },
        -  "prompt": {
        -    "description": "A description of the asset to generate. For text-to-speech models it is the text spoken.",
        -    "maxLength": 4000,
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "type": {
        -    "description": "The kind of asset to generate.",
        -    "enum": [
        -      "image",
        -      "video",
        -      "audio"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GenerationAsset / required
        Removed value: -[
        -  "type",
        -  "prompt"
        -]
      • removedInput schema / properties / payload / $defs / GenerationAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / properties / length / $ref
        Added value: +"#/$defs/length"
      • removedInput schema / properties / payload / properties / length / description
        Removed value: -"The length, in seconds, of the clip the asset fills. A model that generates to a duration takes it from this value in place of its own duration option. Other models ignore it."
      • removedInput schema / properties / payload / properties / length / exclusiveMinimum
        Removed value: -0
      • removedInput schema / properties / payload / properties / length / type
        Removed value: -"number"
    • Changedingest_source110 fields changed
      • changedInput schema / $defs / Destinations / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/ShotstackDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/MuxDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/S3Destination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleCloudStorageDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleDriveDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/VimeoDestination"
        -  },
        -  {
        -    "deprecated": true,
        -    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        -    "properties": {
        -      "options": {
        -        "deprecated": true,
        -        "description": "Additional TikTok configuration options.",
        -        "properties": {
        -          "disableComment": {
        -            "default": false,
        -            "description": "Disable comments on this video.",
        -            "type": "boolean"
        -          },
        -          "disableDuet": {
        -            "default": false,
        -            "description": "Disable the Duet feature for this video.",
        -            "type": "boolean"
        -          },
        -          "disableStitch": {
        -            "default": false,
        -            "description": "Disable the Stitch feature for this video.",
        -            "type": "boolean"
        -          },
        -          "privacyLevel": {
        -            "default": "private",
        -            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        -            "enum": [
        -              "public",
        -              "friends",
        -              "private"
        -            ],
        -            "type": "string"
        -          },
        -          "title": {
        -            "description": "A title for the video that will be displayed on TikTok.",
        -            "maxLength": 150,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "provider": {
        -        "default": "tiktok",
        -        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Akamai NetStorage configuration options.",
        -        "properties": {
        -          "cpCode": {
        -            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "host": {
        -            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        -            "type": "string"
        -          },
        -          "path": {
        -            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "host",
        -          "cpCode"
        -        ]
        -      },
        -      "provider": {
        -        "default": "akamai-netstorage",
        -        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Azure Blob Storage configuration options.",
        -        "properties": {
        -          "accountName": {
        -            "description": "The Azure Storage account name.",
        -            "type": "string"
        -          },
        -          "container": {
        -            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "prefix": {
        -            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "accountName",
        -          "container"
        -        ]
        -      },
        -      "provider": {
        -        "default": "azure-blob-storage",
        -        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/ShotstackDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/MuxDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/S3Destination"
        +  },
        +  {
        +    "$ref": "#/$defs/GoogleCloudStorageDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/GoogleDriveDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/VimeoDestination"
        +  },
        +  {
        +    "deprecated": true,
        +    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        +    "properties": {
        +      "options": {
        +        "deprecated": true,
        +        "description": "Additional TikTok configuration options.",
        +        "properties": {
        +          "disableComment": {
        +            "default": false,
        +            "description": "Disable comments on this video.",
        +            "type": "boolean"
        +          },
        +          "disableDuet": {
        +            "default": false,
        +            "description": "Disable the Duet feature for this video.",
        +            "type": "boolean"
        +          },
        +          "disableStitch": {
        +            "default": false,
        +            "description": "Disable the Stitch feature for this video.",
        +            "type": "boolean"
        +          },
        +          "privacyLevel": {
        +            "default": "private",
        +            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        +            "enum": [
        +              "public",
        +              "friends",
        +              "private"
        +            ],
        +            "type": "string"
        +          },
        +          "title": {
        +            "description": "A title for the video that will be displayed on TikTok.",
        +            "maxLength": 150,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "provider": {
        +        "default": "tiktok",
        +        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        +    "properties": {
        +      "options": {
        +        "description": "Additional Akamai NetStorage configuration options.",
        +        "properties": {
        +          "cpCode": {
        +            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        +            "type": "string"
        +          },
        +          "filename": {
        +            "$ref": "#/$defs/filename"
        +          },
        +          "host": {
        +            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        +            "type": "string"
        +          },
        +          "path": {
        +            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "host",
        +          "cpCode"
        +        ]
        +      },
        +      "provider": {
        +        "default": "akamai-netstorage",
        +        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        +    "properties": {
        +      "options": {
        +        "description": "Additional Azure Blob Storage configuration options.",
        +        "properties": {
        +          "accountName": {
        +            "description": "The Azure Storage account name.",
        +            "type": "string"
        +          },
        +          "container": {
        +            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        +            "type": "string"
        +          },
        +          "filename": {
        +            "$ref": "#/$defs/filename"
        +          },
        +          "prefix": {
        +            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "accountName",
        +          "container"
        +        ]
        +      },
        +      "provider": {
        +        "default": "azure-blob-storage",
        +        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / S3DestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / S3DestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / S3DestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / filename
        Added value: +{
        +  "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / $defs / filename_2
        Added value: +{
        +  "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        +  "type": "string"
        +}
      • changedInput schema / properties / confirm / description
        Previous value: -"Must be true for this exact requested render, generation, mutation, upload URL or deletion."New value: +"Set true only when the user asked for exactly this action."
      • addedInput schema / properties / payload / $defs / AudioEnhancement / $ref
        Added value: +"#/$defs/AudioEnhancement"
      • removedInput schema / properties / payload / $defs / AudioEnhancement / description
        Removed value: -"An audio enhancement that can be applied to the audio content of a rendition.\nThe following providers are available: <ul>\n  <li><a href=\"#tocs_dolbyenhancement\">DolbyEnhancement</a></li>\n</ul>"
      • removedInput schema / properties / payload / $defs / AudioEnhancement / oneOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/DolbyEnhancement"
        -  }
        -]
      • removedInput schema / properties / payload / $defs / AudioEnhancement / type
        Removed value: -"object"
      • removedInput schema / properties / payload / $defs / AudioEnhancement / unevaluatedProperties
        Removed value: -false
      • addedInput schema / properties / payload / $defs / Destinations / $ref
        Added value: +"#/$defs/Destinations"
      • removedInput schema / properties / payload / $defs / Destinations / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Destinations / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/ShotstackDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/MuxDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/S3Destination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleCloudStorageDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleDriveDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/VimeoDestination"
        -  },
        -  {
        -    "deprecated": true,
        -    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        -    "properties": {
        -      "options": {
        -        "deprecated": true,
        -        "description": "Additional TikTok configuration options.",
        -        "properties": {
        -          "disableComment": {
        -            "default": false,
        -            "description": "Disable comments on this video.",
        -            "type": "boolean"
        -          },
        -          "disableDuet": {
        -            "default": false,
        -            "description": "Disable the Duet feature for this video.",
        -            "type": "boolean"
        -          },
        -          "disableStitch": {
        -            "default": false,
        -            "description": "Disable the Stitch feature for this video.",
        -            "type": "boolean"
        -          },
        -          "privacyLevel": {
        -            "default": "private",
        -            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        -            "enum": [
        -              "public",
        -              "friends",
        -              "private"
        -            ],
        -            "type": "string"
        -          },
        -          "title": {
        -            "description": "A title for the video that will be displayed on TikTok.",
        -            "maxLength": 150,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "provider": {
        -        "default": "tiktok",
        -        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Akamai NetStorage configuration options.",
        -        "properties": {
        -          "cpCode": {
        -            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "host": {
        -            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        -            "type": "string"
        -          },
        -          "path": {
        -            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "host",
        -          "cpCode"
        -        ]
        -      },
        -      "provider": {
        -        "default": "akamai-netstorage",
        -        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Azure Blob Storage configuration options.",
        -        "properties": {
        -          "accountName": {
        -            "description": "The Azure Storage account name.",
        -            "type": "string"
        -          },
        -          "container": {
        -            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "prefix": {
        -            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "accountName",
        -          "container"
        -        ]
        -      },
        -      "provider": {
        -        "default": "azure-blob-storage",
        -        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / payload / $defs / Destinations / description
        Removed value: -"A destination is a location where assets can be sent to for serving or hosting. Videos, images and audio files that are rendered by the [Edit API](#shotstack-edit) and [source](#tocs_source) and [rendition](#tocs_rendition) files generated by the [Ingest API](#shotstack-ingest) can be sent to destinations. You can also fetch a file from any public URL and [transfer](#transfer-asset) it to a destination. A file can be sent to one or more destinations including 3rd party destinations.\n\nBy default all ingested and generated assets are automatically sent to the [Shotstack hosting destination](https://shotstack.io/docs/guide/serving-assets/hosting/). You can [opt-out](https://shotstack.io/docs/guide/serving-assets/self-host/) from by setting the Shotstack destination **exclude** property to **true**."
      • removedInput schema / properties / payload / $defs / Destinations / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / DolbyEnhancement / $ref
        Added value: +"#/$defs/DolbyEnhancement"
      • removedInput schema / properties / payload / $defs / DolbyEnhancement / description
        Removed value: -"Dolby.io audio enhancement provider. Credentials are required and must be added via the  [dashboard](https://dashboard.shotstack.io/integrations/dolby), not in the request."
      • removedInput schema / properties / payload / $defs / DolbyEnhancement / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/DolbyEnhancementOptions",
        -    "description": "Additional Dolby configuration and features."
        -  },
        -  "provider": {
        -    "default": "dolby",
        -    "description": "The enhancement provider to use - set to `dolby` for Dolby.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / DolbyEnhancement / required
        Removed value: -[
        -  "provider",
        -  "options"
        -]
      • removedInput schema / properties / payload / $defs / DolbyEnhancement / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / DolbyEnhancementOptions / $ref
        Added value: +"#/$defs/DolbyEnhancementOptions"
      • removedInput schema / properties / payload / $defs / DolbyEnhancementOptions / description
        Removed value: -"Options for the Dolby.io audio enhancement provider."
      • removedInput schema / properties / payload / $defs / DolbyEnhancementOptions / properties
        Removed value: -{
        -  "preset": {
        -    "description": "The preset to use for the audio enhancement. The following presets are available: <ul>\n  <li>`conference` - Conference</li>\n  <li>`interview` - Interview</li>\n  <li>`lecture` - Lecture</li>\n  <li>`meeting` - Meeting</li>\n  <li>`mobile_phone` - Mobile Phone</li>\n  <li>`music` - Music</li>\n  <li>`podcast` - Podcast</li>\n  <li>`studio` - Studio</li>\n  <li>`voice_over` - Voice Over</li>\n</ul>",
        -    "enum": [
        -      "conference",
        -      "interview",
        -      "lecture",
        -      "meeting",
        -      "mobile_phone",
        -      "music",
        -      "podcast",
        -      "studio",
        -      "voice_over"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / DolbyEnhancementOptions / required
        Removed value: -[
        -  "preset"
        -]
      • addedInput schema / properties / payload / $defs / Enhancements / $ref
        Added value: +"#/$defs/Enhancements"
      • removedInput schema / properties / payload / $defs / Enhancements / description
        Removed value: -"Enhancements that can be applied to a rendition. Currently only supports the Dolby audio enhancement."
      • removedInput schema / properties / payload / $defs / Enhancements / properties
        Removed value: -{
        -  "audio": {
        -    "$ref": "#/$defs/AudioEnhancement",
        -    "description": "An audio enhancement that can be applied to the audio content of the rendition."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Enhancements / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / $ref
        Added value: +"#/$defs/GoogleCloudStorageDestination"
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / description
        Removed value: -"Send videos and assets to a [Google Cloud Storage](https://cloud.google.com/storage) bucket. Send files with your own prefix and filename. Google Cloud credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/google-cloud-storage), not in the request."
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/GoogleCloudStorageDestinationOptions",
        -    "description": "Additional Google Cloud Storage configuration options."
        -  },
        -  "provider": {
        -    "default": "google-cloud-storage",
        -    "description": "The destination to send assets to - set to `google-cloud-storage` for Google Cloud Storage.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / $ref
        Added value: +"#/$defs/GoogleCloudStorageDestinationOptions"
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / description
        Removed value: -"Pass additional options to control how files are stored in Google Cloud Storage."
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / properties
        Removed value: -{
        -  "bucket": {
        -    "description": "The bucket name to send files to. The bucket must exist in the Google Cloud Storage account before files can be sent.",
        -    "type": "string"
        -  },
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "prefix": {
        -    "description": "A prefix for the file being sent. This is typically a folder name, i.e. `videos` or `customerId/videos`.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / required
        Removed value: -[
        -  "bucket"
        -]
      • addedInput schema / properties / payload / $defs / GoogleDriveDestination / $ref
        Added value: +"#/$defs/GoogleDriveDestination"
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / description
        Removed value: -"Send rendered videos and assets to the [Google Drive](https://shotstack.io/docs/guide/serving-assets/destinations/google-drive/) cloud storage service. Google Drive uses OAuth and you must authenticate and link your Google account via  [dashboard](https://dashboard.shotstack.io/integrations/google-drive), not in the request."
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/GoogleDriveDestinationOptions",
        -    "description": "Additional Google Drive configuration and features. If omitted, files are saved to the root of My Drive using the default Shotstack filename."
        -  },
        -  "provider": {
        -    "default": "google-drive",
        -    "description": "The destination to send assets to - set to `google-drive` for Google Drive.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / $ref
        Added value: +"#/$defs/GoogleDriveDestinationOptions"
      • removedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / description
        Removed value: -"Pass the folder ID and options to configure how assets are stored in Google Drive."
      • removedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / properties
        Removed value: -{
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "folderId": {
        -    "description": "The Google Drive folder ID where the asset will be stored. If omitted, the asset is saved to the root of My Drive. The folder ID can be retrieved from the URL when logged in to Google Drive, e.g. <a href=\"#\">https://drive.google.com/drive/u/0/folders/1r-eTY6OLO8tzQRKwMyq-fIrQ_7AJEI6A</a>.",
        -    "type": "string"
        -  }
        -}
      • addedInput schema / properties / payload / $defs / MuxDestination / $ref
        Added value: +"#/$defs/MuxDestination"
      • removedInput schema / properties / payload / $defs / MuxDestination / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / MuxDestination / description
        Removed value: -"**Notice: The Mux destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to the [Mux](https://www.mux.com/docs) video hosting and streaming service. Mux credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/mux), not in the request."
      • removedInput schema / properties / payload / $defs / MuxDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/MuxDestinationOptions",
        -    "description": "Additional Mux configuration and features."
        -  },
        -  "provider": {
        -    "default": "mux",
        -    "description": "The destination to send video to - set to `mux` for Mux.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / MuxDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / MuxDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / MuxDestinationOptions / $ref
        Added value: +"#/$defs/MuxDestinationOptions"
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / description
        Removed value: -"**Notice: MuxDestinationOptions, like the Mux destination, is deprecated.** It continues to work, with no behaviour change for existing integrations.\nPass additional options to control how Mux processes video. Currently supports playback_policy and passthrough options."
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / properties
        Removed value: -{
        -  "passthrough": {
        -    "description": "Sets the Mux `passthrough` option. Max 255 characters.",
        -    "maxLength": 255,
        -    "type": "string"
        -  },
        -  "playbackPolicy": {
        -    "description": "Sets the Mux `playback_policy` option. Value is an array of strings - use `public`, `signed`, or both.",
        -    "items": {
        -      "enum": [
        -        "public",
        -        "signed"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  }
        -}
      • addedInput schema / properties / payload / $defs / Outputs / $ref
        Added value: +"#/$defs/Outputs"
      • removedInput schema / properties / payload / $defs / Outputs / description
        Removed value: -"The output renditions and transformations that should be generated from the source file."
      • removedInput schema / properties / payload / $defs / Outputs / properties
        Removed value: -{
        -  "renditions": {
        -    "description": "The output renditions and transformations that should be generated from the source file.",
        -    "items": {
        -      "$ref": "#/$defs/Rendition"
        -    },
        -    "type": "array"
        -  },
        -  "transcription": {
        -    "$ref": "#/$defs/Transcription",
        -    "description": "The transcription settings for the output file."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Outputs / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Rendition / $ref
        Added value: +"#/$defs/Rendition"
      • removedInput schema / properties / payload / $defs / Rendition / description
        Removed value: -"A rendition is a new output file that is generated from the source. The rendition can be encoded to a different format and have transformations applied to it such as resizing, cropping, etc..."
      • removedInput schema / properties / payload / $defs / Rendition / properties
        Removed value: -{
        -  "enhance": {
        -    "$ref": "#/$defs/Enhancements",
        -    "description": "Apply media processing enhancements to the rendition using a third party provider. Currently only Dolby.io audio enhancement is available.",
        -    "type": "object"
        -  },
        -  "filename": {
        -    "description": "A custom name for the generated rendition file. The file extension will be automatically added based on the format of the rendition. If no filename is provided, the rendition ID will be used.",
        -    "type": "string"
        -  },
        -  "fit": {
        -    "description": "Set how the rendition should be scaled and cropped when using a size with an aspect ratio that is different from the source. Fit applies to both videos and images. <ul>\n  <li>`crop` <b>(default)</b> - scale the rendition to fill the output area while maintaining the aspect ratio. The rendition will be cropped if it exceeds the bounds of the output.</li>\n  <li>`cover` - stretch the rendition to fill the output without maintaining the aspect ratio.</li>\n  <li>`contain` - fit the entire rendition within the output while maintaining the original aspect ratio.</li>\n</ul>",
        -    "enum": [
        -      "cover",
        -      "contain",
        -      "crop"
        -    ],
        -    "type": "string"
        -  },
        -  "fixOffset": {
        -    "description": "Attempt to fix audio and video sync issues. This can occur when recording devices, such as smartphones and\n web cams use compression techniques like [Variable Frame Rate](https://en.wikipedia.org/wiki/Variable_frame_rate)\n (VFR) which can cause audio and video to go out of sync. This option will attempt to fix the sync issues.",
        -    "type": "boolean"
        -  },
        -  "fixRotation": {
        -    "description": "Automatically reset the rotation of the video based on the orientation metadata in the video file. This is useful for videos recorded on smartphones that have orientation metadata that may not work correctly with certain video editing software, including the Shotstack Edit API.",
        -    "type": "boolean"
        -  },
        -  "format": {
        -    "description": "The output format to encode the file to. You can only encode a file to the same type, i.e. a video to a video or an image to an image. You can't encode a video as an image. The following formats are available: <ul>\n  <li>`mp4` - mp4 video file (video only)</li>\n  <li>`webm` - webm video file (video only)</li>\n  <li>`mov` - mov video file (video only)</li>\n  <li>`avi` - avi video file (video only)</li>\n  <li>`mkv` - mkv video file (video only)</li>\n  <li>`ogv` - ogv video file (video only)</li>\n  <li>`wmv` - wmv video file (video only)</li>\n  <li>`avif` - avif video file (video only)</li>\n  <li>`gif` - animated gif file (video only)</li>\n  <li>`jpg` - jpg image file (image only)</li>\n  <li>`png` - png image file (image only)</li>\n  <li>`webp` - webp image file (image only)</li>\n  <li>`tif` - tif image file (image only)</li>\n  <li>`mp3` - mp3 audio file (audio only)</li>\n  <li>`wav` - wav audio file (audio only)</li>\n</ul>",
        -    "enum": [
        -      "mp4",
        -      "webm",
        -      "mov",
        -      "avi",
        -      "mkv",
        -      "ogv",
        -      "wmv",
        -      "avif",
        -      "gif",
        -      "mp3",
        -      "wav",
        -      "jpg",
        -      "png",
        -      "webp",
        -      "tif"
        -    ],
        -    "type": "string"
        -  },
        -  "fps": {
        -    "description": "Change the frame rate of a video asset. <ul>\n  <li>`12` - 12fps</li>\n  <li>`15` - 15fps</li>\n  <li>`24` - 24fps</li>\n  <li>`23.976` - 23.976fps</li>\n  <li>`25` (default) - 25fps</li>\n  <li>`29.97` - 29.97fps</li>\n  <li>`30` - 30fps</li>\n  <li>`48` - 48fps</li>\n  <li>`50` - 50fps</li>\n  <li>`59.94` - 59.94fps</li>\n  <li>`60` - 60fps</li>\n</ul>",
        -    "enum": [
        -      12,
        -      15,
        -      23.976,
        -      24,
        -      25,
        -      29.97,
        -      30,
        -      48,
        -      50,
        -      59.94,
        -      60
        -    ],
        -    "type": "number"
        -  },
        -  "keyframeInterval": {
        -    "description": "The keyframe interval is useful to optimize playback, seeking and smoother scrubbing in browsers. The value sets the number of frames between a keyframe. The lower the number, the larger the file. Try a value between 10 and 25 for smooth scrubbing.",
        -    "maximum": 300,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  "quality": {
        -    "description": "Adjust the visual quality of the video or image. The higher the value, the sharper the image quality but the larger file size and slower the encoding process. When specifying quality, the goal is to balance file size vs visual quality.\nQuality is a value between 1 and 100 where 1 is fully compressed with low image quality and 100 is close to lossless with high image quality and large file size. Sane values are between 50 and 75. Omitting the quality parameter will result in an asset optimised for encoding speed, file size and visual quality.",
        -    "maximum": 100,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  "resolution": {
        -    "description": "The preset output resolution of the video or image. This is a convenience property that sets the width and height based on industry standard resolutions. The following resolutions are available: <ul>\n  <li>`preview` - 512px x 288px</li>\n  <li>`mobile` - 640px x 360px</li>\n  <li>`sd` - 1024px x 576px</li>\n  <li>`hd` - 1280px x 720px</li>\n  <li>`fhd` - 1920px x 1080px</li>\n</ul>",
        -    "enum": [
        -      "preview",
        -      "mobile",
        -      "sd",
        -      "hd",
        -      "fhd"
        -    ]
        -  },
        -  "size": {
        -    "$ref": "#/$defs/Size"
        -  },
        -  "speed": {
        -    "$ref": "#/$defs/Speed"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Rendition / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / S3Destination / $ref
        Added value: +"#/$defs/S3Destination"
      • removedInput schema / properties / payload / $defs / S3Destination / description
        Removed value: -"Send videos and assets to an [Amazon S3](https://shotstack.io/docs/guide/serving-assets/destinations/s3/) bucket. Send files to any region with your own prefix and filename. AWS credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/s3), not in the request."
      • removedInput schema / properties / payload / $defs / S3Destination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/S3DestinationOptions",
        -    "description": "Additional S3 configuration options."
        -  },
        -  "provider": {
        -    "default": "s3",
        -    "description": "The destination to send assets to - set to `s3` for S3.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / S3Destination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / S3Destination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / S3DestinationOptions / $ref
        Added value: +"#/$defs/S3DestinationOptions"
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / description
        Removed value: -"Pass additional options to control how files are stored in S3."
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / properties
        Removed value: -{
        -  "acl": {
        -    "description": "Sets the S3 Access Control List (acl) permissions. Default is `private`. Must use a valid  S3 [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl).",
        -    "type": "string"
        -  },
        -  "bucket": {
        -    "description": "The bucket name to send files to. The bucket must exist in the AWS account before files can be sent.",
        -    "type": "string"
        -  },
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "prefix": {
        -    "description": "A prefix for the file being sent. This is typically a folder name, i.e. `videos` or `customerId/videos`.",
        -    "type": "string"
        -  },
        -  "region": {
        -    "description": "Choose the region to send the file to. Must be a valid  [AWS region](https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_region) string like `us-east-1` or `ap-southeast-2`.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / required
        Removed value: -[
        -  "region",
        -  "bucket"
        -]
      • addedInput schema / properties / payload / $defs / ShotstackDestination / $ref
        Added value: +"#/$defs/ShotstackDestination"
      • removedInput schema / properties / payload / $defs / ShotstackDestination / description
        Removed value: -"Send videos and assets to the  [Shotstack hosting and CDN](https://shotstack.io/docs/guide/serving-assets/destinations/shotstack/) service.  This destination is enabled by default."
      • removedInput schema / properties / payload / $defs / ShotstackDestination / properties
        Removed value: -{
        -  "exclude": {
        -    "description": "Set to `true` to [opt-out](https://shotstack.io/docs/guide/serving-assets/self-host/) from the Shotstack hosting and CDN service. All files must be downloaded within 24 hours of rendering.",
        -    "type": "boolean"
        -  },
        -  "provider": {
        -    "default": "shotstack",
        -    "description": "The destination to send assets to - set to `shotstack` for Shotstack hosting and CDN.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ShotstackDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / ShotstackDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Size / $ref
        Added value: +"#/$defs/Size"
      • removedInput schema / properties / payload / $defs / Size / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Size / description
        Removed value: -"Set a custom size for a video or image in pixels. When using a custom size omit the `resolution` and `aspectRatio`. Custom sizes must be divisible by 2 based on the encoder specifications."
      • removedInput schema / properties / payload / $defs / Size / properties
        Removed value: -{
        -  "height": {
        -    "description": "Set a custom height for the video or image file in pixels. Value must be divisible by 2. Maximum video height is 1920px, maximum image height is 4096px.",
        -    "maximum": 4096,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  "width": {
        -    "description": "Set a custom width for the video or image file in pixels. Value must be divisible by 2. Maximum video width is 1920px, maximum image width is 4096px.",
        -    "maximum": 4096,
        -    "minimum": 1,
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Size / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Speed / $ref
        Added value: +"#/$defs/Speed"
      • removedInput schema / properties / payload / $defs / Speed / description
        Removed value: -"Set the playback speed of a video or audio file. Allows you to preserve the pitch of the audio so that it is sped up without sounding too high pitched or too low."
      • removedInput schema / properties / payload / $defs / Speed / properties
        Removed value: -{
        -  "preservePitch": {
        -    "description": "Set whether to adjust the audio pitch or not. Set to false to make the audio sound higher or lower pitched. By default the pitch is preserved.",
        -    "type": "boolean"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the video clip between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Set values less than 1 to slow down the playback speed, i.e. set speed to 0.5 to play back at half speed. Set values greater than 1 to speed up the playback speed, i.e. set speed to 2 to play back at double speed.",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Speed / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Transcription / $ref
        Added value: +"#/$defs/Transcription"
      • removedInput schema / properties / payload / $defs / Transcription / description
        Removed value: -"Generate a transcription of the audio in the video. The transcription can be output as a file in SRT or VTT format."
      • removedInput schema / properties / payload / $defs / Transcription / properties
        Removed value: -{
        -  "format": {
        -    "description": "The output format of the transcription file. The following formats are available: <ul>\n  <li>`srt` - SRT captions format</li>\n  <li>`vtt` - VTT captions format</li>\n</ul>",
        -    "enum": [
        -      "srt",
        -      "vtt"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Transcription / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VimeoDestination / $ref
        Added value: +"#/$defs/VimeoDestination"
      • removedInput schema / properties / payload / $defs / VimeoDestination / description
        Removed value: -"Send videos to [Vimeo](https://shotstack.io/docs/guide/serving-assets/destinations/vimeo/) video hosting and streaming service. Vimeo credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/vimeo), not in the request."
      • removedInput schema / properties / payload / $defs / VimeoDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/VimeoDestinationOptions",
        -    "description": "Additional Vimeo configuration and features."
        -  },
        -  "provider": {
        -    "default": "vimeo",
        -    "description": "The destination to send video to - set to `vimeo` for Vimeo.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VimeoDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / VimeoDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VimeoDestinationOptions / $ref
        Added value: +"#/$defs/VimeoDestinationOptions"
      • removedInput schema / properties / payload / $defs / VimeoDestinationOptions / description
        Removed value: -"Pass additional options to control how Vimeo publishes video, including name, description and privacy settings."
      • removedInput schema / properties / payload / $defs / VimeoDestinationOptions / properties
        Removed value: -{
        -  "description": {
        -    "description": "A description of the video that will be displayed on the Vimeo website.",
        -    "type": "string"
        -  },
        -  "folderUri": {
        -    "description": "The Vimeo folder URI to upload the video to. The folder must already exist in your Vimeo account.",
        -    "type": "string"
        -  },
        -  "name": {
        -    "description": "A name or title for the video that will be displayed on the Vimeo website.",
        -    "type": "string"
        -  },
        -  "privacy": {
        -    "$ref": "#/$defs/VimeoDestinationPrivacyOptions",
        -    "description": "Options to control the visibility of videos and privacy features."
        -  }
        -}
      • addedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / $ref
        Added value: +"#/$defs/VimeoDestinationPrivacyOptions"
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / description
        Removed value: -"Options to control the visibility of videos and privacy features."
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / properties
        Removed value: -{
        -  "add": {
        -    "description": "Set whether other users can add the video to their collections.",
        -    "type": "boolean"
        -  },
        -  "comments": {
        -    "description": "Set who can comment on the video. Available options are: <ul>\n  <li>`anybody` - Anyone can comment on the video.</li>\n  <li>`nobody` - Only the video owner can comment on the video.</li>\n  <li>`contacts` - Only contacts can comment on the video.</li>\n</ul>",
        -    "enum": [
        -      "anybody",
        -      "nobody",
        -      "contacts"
        -    ],
        -    "type": "string"
        -  },
        -  "download": {
        -    "description": "Set whether the video can be downloaded.",
        -    "type": "boolean"
        -  },
        -  "embed": {
        -    "description": "Set who can embed the video. Available options are: <ul>\n  <li>`public` - Anyone can embed the video.</li>\n  <li>`private` - Only the video owner can embed the video.</li>\n  <li>`whitelist` - Only whitelisted domains can embed the video.</li>\n</ul>",
        -    "enum": [
        -      "public",
        -      "private",
        -      "whitelist"
        -    ],
        -    "type": "string"
        -  },
        -  "view": {
        -    "description": "Set who can view the videos. Available options are: <ul>\n  <li>`anybody` - Anyone can view the video.</li>\n  <li>`nobody` - Only the video owner can view the video.</li>\n  <li>`contacts` - Only contacts can view the video.</li>\n  <li>`password` - A password is required to view the video.</li>\n  <li>`unlisted` - The video is not listed on Vimeo.</li>\n</ul>",
        -    "enum": [
        -      "anybody",
        -      "nobody",
        -      "contacts",
        -      "password",
        -      "unlisted"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / type
        Removed value: -"object"
    • Changedrender455 fields changed
      • addedInput schema / $defs / AudioAsset / properties / effect / $ref
        Added value: +"#/$defs/effect"
      • removedInput schema / $defs / AudioAsset / properties / effect / description
        Removed value: -"The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>"
      • removedInput schema / $defs / AudioAsset / properties / effect / enum
        Removed value: -[
        -  "none",
        -  "fadeIn",
        -  "fadeOut",
        -  "fadeInFadeOut"
        -]
      • removedInput schema / $defs / AudioAsset / properties / effect / type
        Removed value: -"string"
      • addedInput schema / $defs / AudioAsset / properties / options / $ref
        Added value: +"#/$defs/options"
      • removedInput schema / $defs / AudioAsset / properties / options / additionalProperties
        Removed value: -true
      • removedInput schema / $defs / AudioAsset / properties / options / description
        Removed value: -"Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected."
      • removedInput schema / $defs / AudioAsset / properties / options / type
        Removed value: -"object"
      • addedInput schema / $defs / AudioAsset / properties / volume / $ref
        Added value: +"#/$defs/volume"
      • removedInput schema / $defs / AudioAsset / properties / volume / description
        Removed value: -"Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions."
      • removedInput schema / $defs / AudioAsset / properties / volume / oneOf
        Removed value: -[
        -  {
        -    "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  {
        -    "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -    "items": {
        -      "$ref": "#/$defs/Tween"
        -    },
        -    "type": "array"
        -  }
        -]
      • changedInput schema / $defs / Destinations / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/ShotstackDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/MuxDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/S3Destination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleCloudStorageDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleDriveDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/VimeoDestination"
        -  },
        -  {
        -    "deprecated": true,
        -    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        -    "properties": {
        -      "options": {
        -        "deprecated": true,
        -        "description": "Additional TikTok configuration options.",
        -        "properties": {
        -          "disableComment": {
        -            "default": false,
        -            "description": "Disable comments on this video.",
        -            "type": "boolean"
        -          },
        -          "disableDuet": {
        -            "default": false,
        -            "description": "Disable the Duet feature for this video.",
        -            "type": "boolean"
        -          },
        -          "disableStitch": {
        -            "default": false,
        -            "description": "Disable the Stitch feature for this video.",
        -            "type": "boolean"
        -          },
        -          "privacyLevel": {
        -            "default": "private",
        -            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        -            "enum": [
        -              "public",
        -              "friends",
        -              "private"
        -            ],
        -            "type": "string"
        -          },
        -          "title": {
        -            "description": "A title for the video that will be displayed on TikTok.",
        -            "maxLength": 150,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "provider": {
        -        "default": "tiktok",
        -        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Akamai NetStorage configuration options.",
        -        "properties": {
        -          "cpCode": {
        -            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "host": {
        -            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        -            "type": "string"
        -          },
        -          "path": {
        -            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "host",
        -          "cpCode"
        -        ]
        -      },
        -      "provider": {
        -        "default": "akamai-netstorage",
        -        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Azure Blob Storage configuration options.",
        -        "properties": {
        -          "accountName": {
        -            "description": "The Azure Storage account name.",
        -            "type": "string"
        -          },
        -          "container": {
        -            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "prefix": {
        -            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "accountName",
        -          "container"
        -        ]
        -      },
        -      "provider": {
        -        "default": "azure-blob-storage",
        -        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/ShotstackDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/MuxDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/S3Destination"
        +  },
        +  {
        +    "$ref": "#/$defs/GoogleCloudStorageDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/GoogleDriveDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/VimeoDestination"
        +  },
        +  {
        +    "deprecated": true,
        +    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        +    "properties": {
        +      "options": {
        +        "deprecated": true,
        +        "description": "Additional TikTok configuration options.",
        +        "properties": {
        +          "disableComment": {
        +            "default": false,
        +            "description": "Disable comments on this video.",
        +            "type": "boolean"
        +          },
        +          "disableDuet": {
        +            "default": false,
        +            "description": "Disable the Duet feature for this video.",
        +            "type": "boolean"
        +          },
        +          "disableStitch": {
        +            "default": false,
        +            "description": "Disable the Stitch feature for this video.",
        +            "type": "boolean"
        +          },
        +          "privacyLevel": {
        +            "default": "private",
        +            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        +            "enum": [
        +              "public",
        +              "friends",
        +              "private"
        +            ],
        +            "type": "string"
        +          },
        +          "title": {
        +            "description": "A title for the video that will be displayed on TikTok.",
        +            "maxLength": 150,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "provider": {
        +        "default": "tiktok",
        +        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        +    "properties": {
        +      "options": {
        +        "description": "Additional Akamai NetStorage configuration options.",
        +        "properties": {
        +          "cpCode": {
        +            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        +            "type": "string"
        +          },
        +          "filename": {
        +            "$ref": "#/$defs/filename"
        +          },
        +          "host": {
        +            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        +            "type": "string"
        +          },
        +          "path": {
        +            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "host",
        +          "cpCode"
        +        ]
        +      },
        +      "provider": {
        +        "default": "akamai-netstorage",
        +        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        +    "properties": {
        +      "options": {
        +        "description": "Additional Azure Blob Storage configuration options.",
        +        "properties": {
        +          "accountName": {
        +            "description": "The Azure Storage account name.",
        +            "type": "string"
        +          },
        +          "container": {
        +            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        +            "type": "string"
        +          },
        +          "filename": {
        +            "$ref": "#/$defs/filename"
        +          },
        +          "prefix": {
        +            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "accountName",
        +          "container"
        +        ]
        +      },
        +      "provider": {
        +        "default": "azure-blob-storage",
        +        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / ImageAsset / properties / options / $ref
        Added value: +"#/$defs/options"
      • removedInput schema / $defs / ImageAsset / properties / options / additionalProperties
        Removed value: -true
      • removedInput schema / $defs / ImageAsset / properties / options / description
        Removed value: -"Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected."
      • removedInput schema / $defs / ImageAsset / properties / options / type
        Removed value: -"object"
      • addedInput schema / $defs / S3DestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / S3DestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / S3DestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / TextToSpeechAsset / properties / effect / $ref
        Added value: +"#/$defs/effect"
      • removedInput schema / $defs / TextToSpeechAsset / properties / effect / description
        Removed value: -"The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>"
      • removedInput schema / $defs / TextToSpeechAsset / properties / effect / enum
        Removed value: -[
        -  "none",
        -  "fadeIn",
        -  "fadeOut",
        -  "fadeInFadeOut"
        -]
      • removedInput schema / $defs / TextToSpeechAsset / properties / effect / type
        Removed value: -"string"
      • addedInput schema / $defs / TextToSpeechAsset / properties / volume / $ref
        Added value: +"#/$defs/volume"
      • removedInput schema / $defs / TextToSpeechAsset / properties / volume / description
        Removed value: -"Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions."
      • removedInput schema / $defs / TextToSpeechAsset / properties / volume / oneOf
        Removed value: -[
        -  {
        -    "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  {
        -    "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -    "items": {
        -      "$ref": "#/$defs/Tween"
        -    },
        -    "type": "array"
        -  }
        -]
      • addedInput schema / $defs / VideoAsset / properties / options / $ref
        Added value: +"#/$defs/options"
      • removedInput schema / $defs / VideoAsset / properties / options / additionalProperties
        Removed value: -true
      • removedInput schema / $defs / VideoAsset / properties / options / description
        Removed value: -"Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected."
      • removedInput schema / $defs / VideoAsset / properties / options / type
        Removed value: -"object"
      • addedInput schema / $defs / callback
        Added value: +{
        +  "description": "An optional webhook callback URL used to receive status notifications when a render completes or fails. Notifications are also sent when a rendered video is sent to an output  [destination](https://shotstack.io/docs/guide/serving-assets/destinations/).\nSee [webhooks](https://shotstack.io/docs/guide/architecting-an-application/webhooks/) for more details.",
        +  "type": "string"
        +}
      • addedInput schema / $defs / disk
        Added value: +{
        +  "deprecated": true,
        +  "description": "**Notice: This option is now deprecated and will be removed. Disk types are handled automatically. Setting a disk type has no effect.**\n\nThe disk type to use for storing footage and assets for each render.\n<ul>\n  <li>`local` - optimized for high speed rendering with up to 512MB storage</li>\n  <li>`mount` - optimized for larger file sizes and longer videos with 5GB for source footage and 512MB for output render</li>\n</ul>\n",
        +  "enum": [
        +    "local",
        +    "mount"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / $defs / effect
        Added value: +{
        +  "description": "The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        +  "enum": [
        +    "none",
        +    "fadeIn",
        +    "fadeOut",
        +    "fadeInFadeOut"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / $defs / filename
        Added value: +{
        +  "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / $defs / filename_2
        Added value: +{
        +  "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        +  "type": "string"
        +}
      • addedInput schema / $defs / instance
        Added value: +{
        +  "default": "s1",
        +  "description": "The render instance type to use for processing the edit. <ul>\n  <li>`s1` - standard instance (default)</li>\n  <li>`s2` - standard instance with more resources</li>\n  <li>`a1` - accelerated instance for faster rendering</li>\n</ul>",
        +  "enum": [
        +    "s1",
        +    "s2",
        +    "a1"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / $defs / merge
        Added value: +{
        +  "description": "An array of key/value pairs that provides an easy way to create templates with placeholders. The placeholders can be used to find and replace keys with values. For example you can search for the placeholder `{{NAME}}` and replace it with the value `Jane`. ",
        +  "items": {
        +    "$ref": "#/$defs/MergeField"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / $defs / options
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.",
        +  "type": "object"
        +}
      • addedInput schema / $defs / volume
        Added value: +{
        +  "description": "Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions.",
        +  "oneOf": [
        +    {
        +      "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        +      "format": "float",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        +      "items": {
        +        "$ref": "#/$defs/Tween"
        +      },
        +      "type": "array"
        +    }
        +  ]
        +}
      • addedInput schema / properties / callback / $ref
        Added value: +"#/$defs/callback"
      • removedInput schema / properties / callback / description
        Removed value: -"An optional webhook callback URL used to receive status notifications when a render completes or fails. Notifications are also sent when a rendered video is sent to an output  [destination](https://shotstack.io/docs/guide/serving-assets/destinations/).\nSee [webhooks](https://shotstack.io/docs/guide/architecting-an-application/webhooks/) for more details."
      • removedInput schema / properties / callback / type
        Removed value: -"string"
      • changedInput schema / properties / confirm / description
        Previous value: -"Must be true for this exact requested render, generation, mutation, upload URL or deletion."New value: +"Set true only when the user asked for exactly this action."
      • addedInput schema / properties / disk / $ref
        Added value: +"#/$defs/disk"
      • removedInput schema / properties / disk / deprecated
        Removed value: -true
      • removedInput schema / properties / disk / description
        Removed value: -"**Notice: This option is now deprecated and will be removed. Disk types are handled automatically. Setting a disk type has no effect.**\n\nThe disk type to use for storing footage and assets for each render.\n<ul>\n  <li>`local` - optimized for high speed rendering with up to 512MB storage</li>\n  <li>`mount` - optimized for larger file sizes and longer videos with 5GB for source footage and 512MB for output render</li>\n</ul>\n"
      • removedInput schema / properties / disk / enum
        Removed value: -[
        -  "local",
        -  "mount"
        -]
      • removedInput schema / properties / disk / type
        Removed value: -"string"
      • addedInput schema / properties / instance / $ref
        Added value: +"#/$defs/instance"
      • removedInput schema / properties / instance / default
        Removed value: -"s1"
      • removedInput schema / properties / instance / description
        Removed value: -"The render instance type to use for processing the edit. <ul>\n  <li>`s1` - standard instance (default)</li>\n  <li>`s2` - standard instance with more resources</li>\n  <li>`a1` - accelerated instance for faster rendering</li>\n</ul>"
      • removedInput schema / properties / instance / enum
        Removed value: -[
        -  "s1",
        -  "s2",
        -  "a1"
        -]
      • removedInput schema / properties / instance / type
        Removed value: -"string"
      • addedInput schema / properties / merge / $ref
        Added value: +"#/$defs/merge"
      • removedInput schema / properties / merge / description
        Removed value: -"An array of key/value pairs that provides an easy way to create templates with placeholders. The placeholders can be used to find and replace keys with values. For example you can search for the placeholder `{{NAME}}` and replace it with the value `Jane`. "
      • removedInput schema / properties / merge / items
        Removed value: -{
        -  "$ref": "#/$defs/MergeField"
        -}
      • removedInput schema / properties / merge / type
        Removed value: -"array"
      • addedInput schema / properties / payload / $defs / Asset / $ref
        Added value: +"#/$defs/Asset"
      • removedInput schema / properties / payload / $defs / Asset / description
        Removed value: -"The type of asset to display for the duration of the Clip, i.e. a video clip or an image. Choose from one of the available asset types below."
      • removedInput schema / properties / payload / $defs / Asset / oneOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/VideoAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/ImageAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/TextAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/RichTextAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/AudioAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/LumaAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/CaptionAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/RichCaptionAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/HtmlAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/Html5Asset"
        -  },
        -  {
        -    "$ref": "#/$defs/TitleAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/ShapeAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/SvgAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/TextToImageAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/ImageToVideoAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/TextToSpeechAsset"
        -  }
        -]
      • removedInput schema / properties / payload / $defs / Asset / type
        Removed value: -"object"
      • removedInput schema / properties / payload / $defs / Asset / unevaluatedProperties
        Removed value: -false
      • addedInput schema / properties / payload / $defs / AudioAsset / $ref
        Added value: +"#/$defs/AudioAsset"
      • removedInput schema / properties / payload / $defs / AudioAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / AudioAsset / description
        Removed value: -"The AudioAsset adds audio to a Clip. The audio can be sourced from a URL\n(`src`), generated from a text prompt (`prompt`), or both. At least one of\n`src` or `prompt` must be provided.\n\n- **Source URL:** set `src` to a publicly accessible audio URL (e.g. mp3).\n- **Generated speech:** set `prompt` to the spoken text and choose a\n  text-to-speech `model`; set the voice via `options`.\n- **Generated music or SFX:** set `prompt` describing the sound and choose\n  a music generation `model`.\n- **Both:** `src` acts as a preview placeholder while `prompt` drives\n  generation — the audio is regenerated from the prompt at render time.\n  Unchanged prompts and options resolve from the generation cache.\n- Use `model` to choose the generator and `options` to configure it. The\n  generated `src` is filled in automatically.\n"
      • removedInput schema / properties / payload / $defs / AudioAsset / properties
        Removed value: -{
        -  "effect": {
        -    "description": "The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        -    "enum": [
        -      "none",
        -      "fadeIn",
        -      "fadeOut",
        -      "fadeInFadeOut"
        -    ],
        -    "type": "string"
        -  },
        -  "model": {
        -    "description": "The generation model to use when `prompt` is set (e.g. `polly-neural`, `elevenlabs-tts`, `elevenlabs-music`). Defaults to `elevenlabs-tts` (with a default voice) if omitted. Each model's available options are defined by the model registry.",
        -    "type": "string"
        -  },
        -  "options": {
        -    "additionalProperties": true,
        -    "description": "Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.",
        -    "type": "object"
        -  },
        -  "prompt": {
        -    "description": "A text prompt. For text-to-speech models the prompt is the spoken text; for music models it describes the sound to generate. The generated `src` is filled in automatically; an existing `src` is treated as a preview placeholder and replaced.",
        -    "maxLength": 4000,
        -    "type": "string"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the audio clip between 0 (paused) and 10 (10x normal speed), where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire audio (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire audio (i.e. original length / 2).",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "src": {
        -    "description": "The audio source URL. The URL must be publicly accessible or include credentials. When `prompt` is also set, `src` serves as a preview placeholder and the audio is regenerated from the prompt at render time.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the audio clip, in seconds (defaults to 0). Audio will start from the in trim point. The audio will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "audio",
        -    "description": "The type of asset - set to `audio` for audio assets.",
        -    "enum": [
        -      "audio"
        -    ],
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions.",
        -    "oneOf": [
        -      {
        -        "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -        "format": "float",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / AudioAsset / required
        Removed value: -[
        -  "type"
        -]
      • removedInput schema / properties / payload / $defs / AudioAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / CaptionAsset / $ref
        Added value: +"#/$defs/CaptionAsset"
      • removedInput schema / properties / payload / $defs / CaptionAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / CaptionAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / CaptionAsset / description
        Removed value: -"**Notice: The CaptionAsset is deprecated, use the [RichCaptionAsset](#tocs_richcaptionasset) instead.**\n\nThe CaptionAsset is used to add captions (subtitles) to a video. It uses a supplied SRT or VTT file which will\nbe read and burnt to the video.\n\nCaptions can be applied independently from a video or audio file for greater\nflexibility with styling and layout. For example you can scale, position or crop a video without modifying the\ncaptions.\n\nTo sync captions with a video or audio file use a [Video](#tocs_videoasset) or [Audio](#tocs_audioasset) with\nmatching start and end time.\n"
      • removedInput schema / properties / payload / $defs / CaptionAsset / properties
        Removed value: -{
        -  "background": {
        -    "$ref": "#/$defs/CaptionBackground",
        -    "description": "Background styling properties."
        -  },
        -  "font": {
        -    "$ref": "#/$defs/CaptionFont",
        -    "description": "Font styling properties."
        -  },
        -  "margin": {
        -    "$ref": "#/$defs/CaptionMargin",
        -    "description": "Margin properties."
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the captions between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to  adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire captions (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire captions (i.e. original length / 2).",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "src": {
        -    "description": "The URL to an SRT or VTT subtitles file, or an alias reference to auto-generate captions from an audio or video clip. For file URLs, the URL must be publicly accessible or include credentials. For auto-captioning, use the format `alias://clip-name` where clip-name is the alias of an audio, video, or text-to-speech clip. The system will automatically transcribe the audio and detect the language.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the captions, in seconds (defaults to 0). Remove the trim length from the start of the captions and allow it to be synced with video or audio. The captions will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "caption",
        -    "description": "The type of asset - set to `caption` for captions.",
        -    "enum": [
        -      "caption"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / CaptionAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / CaptionAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / CaptionBackground / $ref
        Added value: +"#/$defs/CaptionBackground"
      • removedInput schema / properties / payload / $defs / CaptionBackground / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / CaptionBackground / description
        Removed value: -"Displays a background box behind the caption text."
      • removedInput schema / properties / payload / $defs / CaptionBackground / properties
        Removed value: -{
        -  "borderRadius": {
        -    "description": "The border radius of the background box in pixels.",
        -    "type": "integer"
        -  },
        -  "color": {
        -    "description": "The background color using hexadecimal color notation.",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "description": "The opacity of the background color.",
        -    "type": "number"
        -  },
        -  "padding": {
        -    "description": "The padding inside the background box in pixels.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / CaptionBackground / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / CaptionFont / $ref
        Added value: +"#/$defs/CaptionFont"
      • removedInput schema / properties / payload / $defs / CaptionFont / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / CaptionFont / description
        Removed value: -"Font properties for captions text."
      • removedInput schema / properties / payload / $defs / CaptionFont / properties
        Removed value: -{
        -  "color": {
        -    "description": "The text color using hexadecimal color notation.",
        -    "type": "string"
        -  },
        -  "family": {
        -    "description": "The font family name. This must be Family name embedded in the font, i.e. \"Open Sans\".",
        -    "type": "string"
        -  },
        -  "lineHeight": {
        -    "description": "The line height of the font as a ratio of the font size.",
        -    "type": "number"
        -  },
        -  "opacity": {
        -    "description": "The opacity of the text where 1 is opaque and 0 is transparent.",
        -    "type": "number"
        -  },
        -  "size": {
        -    "description": "The size of the font in pixels (px).",
        -    "type": "integer"
        -  },
        -  "stroke": {
        -    "description": "The stroke color of the font using hexadecimal color notation.",
        -    "type": "string"
        -  },
        -  "strokeWidth": {
        -    "description": "The width of the stroke in pixels.",
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / CaptionFont / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / CaptionMargin / $ref
        Added value: +"#/$defs/CaptionMargin"
      • removedInput schema / properties / payload / $defs / CaptionMargin / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / CaptionMargin / description
        Removed value: -"The margin properties for captions. Margins are used to position the caption text and background on the screen."
      • removedInput schema / properties / payload / $defs / CaptionMargin / properties
        Removed value: -{
        -  "left": {
        -    "description": "The margin to the left of the text. Pushes captions to the right.",
        -    "type": "number"
        -  },
        -  "right": {
        -    "description": "The margin to the right of the text. Pushes captions to the left.",
        -    "type": "number"
        -  },
        -  "top": {
        -    "description": "The margin above the text. Pushes captions down the screen.",
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / CaptionMargin / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / ChromaKey / $ref
        Added value: +"#/$defs/ChromaKey"
      • removedInput schema / properties / payload / $defs / ChromaKey / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / ChromaKey / description
        Removed value: -"Chroma key is a technique that replaces a specific color in a video with a different background image or video, enabling seamless integration of diverse environments. Commonly used for green screen and blue screen effects."
      • removedInput schema / properties / payload / $defs / ChromaKey / properties
        Removed value: -{
        -  "color": {
        -    "description": "The chroma key color as a hex value. Use green (#00b140) for green screens or blue (#0000FF) for blue screens. Any valid hex color can be used as the key color.",
        -    "pattern": "^#[0-9a-fA-F]{6}$",
        -    "type": "string"
        -  },
        -  "halo": {
        -    "description": "Pixels within the halo distance from the threshold boundary are given an increasing alpha value based on their distance from the threshold.",
        -    "maximum": 250,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  "threshold": {
        -    "description": "Pixels within this distance from the key color are eliminated by setting their alpha values to zero.",
        -    "maximum": 250,
        -    "minimum": 0,
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ChromaKey / required
        Removed value: -[
        -  "color"
        -]
      • removedInput schema / properties / payload / $defs / ChromaKey / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Clip / $ref
        Added value: +"#/$defs/Clip"
      • removedInput schema / properties / payload / $defs / Clip / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Clip / description
        Removed value: -"A clip is a container for a specific type of asset, i.e. a title, image, video, audio or html. You use a Clip to define when an asset will display on the timeline, how long it will play for and transitions, filters and effects to apply to it."
      • removedInput schema / properties / payload / $defs / Clip / properties
        Removed value: -{
        -  "alias": {
        -    "description": "A unique identifier for this clip that can be used to reference it from other clips using the `alias://` protocol in asset sources. This is useful for features like auto-captioning where a caption asset needs to reference the audio from another clip.",
        -    "pattern": "^[A-Za-z0-9_-]+$",
        -    "type": "string"
        -  },
        -  "asset": {
        -    "$ref": "#/$defs/Asset"
        -  },
        -  "effect": {
        -    "description": "A motion effect to apply to the Clip. <ul>\n  <li>`zoomIn` - slow zoom in</li>\n  <li>`zoomOut` - slow zoom out</li>\n  <li>`slideLeft` - slow slide (pan) left</li>\n  <li>`slideRight` - slow slide (pan) right</li>\n  <li>`slideUp` - slow slide (pan) up</li>\n  <li>`slideDown` - slow slide (pan) down</li>\n</ul> The motion effect speed can also be controlled by appending `Fast` or `Slow` to the effect, e.g. `zoomInFast` or `slideRightSlow`.",
        -    "enum": [
        -      "zoomIn",
        -      "zoomInSlow",
        -      "zoomInFast",
        -      "zoomOut",
        -      "zoomOutSlow",
        -      "zoomOutFast",
        -      "slideLeft",
        -      "slideLeftSlow",
        -      "slideLeftFast",
        -      "slideRight",
        -      "slideRightSlow",
        -      "slideRightFast",
        -      "slideUp",
        -      "slideUpSlow",
        -      "slideUpFast",
        -      "slideDown",
        -      "slideDownSlow",
        -      "slideDownFast"
        -    ],
        -    "type": "string"
        -  },
        -  "filter": {
        -    "description": "A filter effect to apply to the Clip. <ul>\n  <li>`none` - no filter applied</li>\n  <li>`blur` - blur the scene</li>\n  <li>`boost` - boost contrast and saturation</li>\n  <li>`contrast` - increase contrast</li>\n  <li>`darken` - darken the scene</li>\n  <li>`greyscale` - remove colour</li>\n  <li>`lighten` - lighten the scene</li>\n  <li>`muted` - reduce saturation and contrast</li>\n  <li>`negative` - negative colors</li>\n</ul>",
        -    "enum": [
        -      "none",
        -      "blur",
        -      "boost",
        -      "contrast",
        -      "darken",
        -      "greyscale",
        -      "lighten",
        -      "muted",
        -      "negative"
        -    ],
        -    "type": "string"
        -  },
        -  "fit": {
        -    "description": "Set how the asset should be scaled to fit the viewport using one of the following options: \n  <ul>\n    <li>`crop` <b>(default)</b> - scale the asset to fill the viewport while maintaining the aspect ratio. The asset will be cropped if it exceeds the bounds of the viewport.</li>\n    <li>`cover` - stretch the asset to fill the viewport without maintaining the aspect ratio.</li>\n    <li>`contain` - fit the entire asset within the viewport while maintaining the original aspect ratio.</li>\n    <li>`none` - preserves the original asset dimensions and does not apply any scaling.</li>\n  </ul>",
        -    "enum": [
        -      "cover",
        -      "contain",
        -      "crop",
        -      "none"
        -    ],
        -    "type": "string"
        -  },
        -  "height": {
        -    "description": "Set the height of the clip bounding box in pixels. This constrains the height of the clip, overriding the default behavior where clips fill the viewport height.",
        -    "format": "float",
        -    "maximum": 2160,
        -    "minimum": 1,
        -    "type": "number"
        -  },
        -  "id": {
        -    "description": "Optional client-generated identifier. Used by client SDKs (e.g. the Shotstack Studio SDK) to reference a clip across edits without relying on its position in the timeline. The render API does not use this field and it does not appear in render output.",
        -    "type": "string"
        -  },
        -  "length": {
        -    "description": "The duration the Clip should play for.",
        -    "oneOf": [
        -      {
        -        "description": "The duration the Clip should play for, in seconds. For example, to play the Clip for 5 seconds, set the length value to 5.",
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "The duration the Clip should play for using a [smart clip property](/docs/guide/architecting-an-application/smart-clips/). Set to `auto` to play the Clip for the duration of the asset. Set to `end` to display or play the clip to the end of the timeline. Use `alias://clip-name` to inherit the length from the referenced clip.",
        -        "pattern": "^(auto|end|alias://[A-Za-z0-9_-]+)$",
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  "offset": {
        -    "$ref": "#/$defs/Offset",
        -    "description": "Offset the location of the asset relative to its position on the viewport. The offset distance is relative to the width of the viewport - for example an x offset of 0.5 will move the asset half the viewport width to the right."
        -  },
        -  "opacity": {
        -    "description": "Offset an asset on the horizontal axis (left or right). Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "Sets the opacity of the Clip where 1 is opaque and 0 is transparent.",
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the opacity of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "position": {
        -    "description": "Place the asset in one of nine predefined positions of the viewport. This is most effective for when the asset is scaled and you want to position the element to a specific position. <ul>\n  <li>`top` - top (center)</li>\n  <li>`topRight` - top right</li>\n  <li>`right` - right (center)</li>\n  <li>`bottomRight` - bottom right</li>\n  <li>`bottom` - bottom (center)</li>\n  <li>`bottomLeft` - bottom left</li>\n  <li>`left` - left (center)</li>\n  <li>`topLeft` - top left</li>\n  <li>`center` - center</li>\n</ul>",
        -    "enum": [
        -      "top",
        -      "topRight",
        -      "right",
        -      "bottomRight",
        -      "bottom",
        -      "bottomLeft",
        -      "left",
        -      "topLeft",
        -      "center"
        -    ],
        -    "type": "string"
        -  },
        -  "scale": {
        -    "description": "Scale the asset to a fraction of the viewport size - i.e. setting the scale to 0.5 will scale asset to half the size of the viewport. This is useful for picture-in-picture video and scaling images such as logos and watermarks. Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "Scale the asset to a fraction of the viewport size. For example, 0.5 will scale the asset to half the size of the viewport.",
        -        "format": "float",
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the scale of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "start": {
        -    "description": "The start position of the Clip on the timeline.",
        -    "oneOf": [
        -      {
        -        "description": "The start position of the Clip on the timeline, in seconds. For example, to start the Clip at 2 seconds, set the start value to 2.",
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "The start position using a [smart clip property](/docs/guide/architecting-an-application/smart-clips/). Set to `auto` to automatically play the clip after the previous clip finishes. Use `alias://clip-name` to inherit the start time from the referenced clip.",
        -        "pattern": "^(auto|alias://[A-Za-z0-9_-]+)$",
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  "transform": {
        -    "$ref": "#/$defs/Transformation",
        -    "description": "A transformation lets you modify the visual properties of a clip. Available transformations are <b>rotate</b>, <b>skew</b> and <b>flip</b>. Transformations can be combined to create interesting new shapes and effects."
        -  },
        -  "transition": {
        -    "$ref": "#/$defs/Transition"
        -  },
        -  "width": {
        -    "description": "Set the width of the clip bounding box in pixels. This constrains the width of the clip, overriding the default behavior where clips fill the viewport width.",
        -    "format": "float",
        -    "maximum": 3840,
        -    "minimum": 1,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Clip / required
        Removed value: -[
        -  "asset",
        -  "start",
        -  "length"
        -]
      • removedInput schema / properties / payload / $defs / Clip / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Crop / $ref
        Added value: +"#/$defs/Crop"
      • removedInput schema / properties / payload / $defs / Crop / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Crop / description
        Removed value: -"Crop the sides of an asset by a relative amount. The size of the crop is specified using a scale between 0 and 1, relative to the screen width - i.e a left crop of 0.5 will crop half of the asset from the left, a top crop  of 0.25 will crop the top by quarter of the asset."
      • removedInput schema / properties / payload / $defs / Crop / properties
        Removed value: -{
        -  "bottom": {
        -    "description": "Crop from the bottom of the asset",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "left": {
        -    "description": "Crop from the left of the asset",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "right": {
        -    "description": "Crop from the left of the asset",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "top": {
        -    "description": "Crop from the top of the asset",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Crop / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Destinations / $ref
        Added value: +"#/$defs/Destinations"
      • removedInput schema / properties / payload / $defs / Destinations / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Destinations / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/ShotstackDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/MuxDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/S3Destination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleCloudStorageDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleDriveDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/VimeoDestination"
        -  },
        -  {
        -    "deprecated": true,
        -    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        -    "properties": {
        -      "options": {
        -        "deprecated": true,
        -        "description": "Additional TikTok configuration options.",
        -        "properties": {
        -          "disableComment": {
        -            "default": false,
        -            "description": "Disable comments on this video.",
        -            "type": "boolean"
        -          },
        -          "disableDuet": {
        -            "default": false,
        -            "description": "Disable the Duet feature for this video.",
        -            "type": "boolean"
        -          },
        -          "disableStitch": {
        -            "default": false,
        -            "description": "Disable the Stitch feature for this video.",
        -            "type": "boolean"
        -          },
        -          "privacyLevel": {
        -            "default": "private",
        -            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        -            "enum": [
        -              "public",
        -              "friends",
        -              "private"
        -            ],
        -            "type": "string"
        -          },
        -          "title": {
        -            "description": "A title for the video that will be displayed on TikTok.",
        -            "maxLength": 150,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "provider": {
        -        "default": "tiktok",
        -        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Akamai NetStorage configuration options.",
        -        "properties": {
        -          "cpCode": {
        -            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "host": {
        -            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        -            "type": "string"
        -          },
        -          "path": {
        -            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "host",
        -          "cpCode"
        -        ]
        -      },
        -      "provider": {
        -        "default": "akamai-netstorage",
        -        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Azure Blob Storage configuration options.",
        -        "properties": {
        -          "accountName": {
        -            "description": "The Azure Storage account name.",
        -            "type": "string"
        -          },
        -          "container": {
        -            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "prefix": {
        -            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "accountName",
        -          "container"
        -        ]
        -      },
        -      "provider": {
        -        "default": "azure-blob-storage",
        -        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / payload / $defs / Destinations / description
        Removed value: -"A destination is a location where assets can be sent to for serving or hosting. Videos, images and audio files that are rendered by the [Edit API](#shotstack-edit) and [source](#tocs_source) and [rendition](#tocs_rendition) files generated by the [Ingest API](#shotstack-ingest) can be sent to destinations. You can also fetch a file from any public URL and [transfer](#transfer-asset) it to a destination. A file can be sent to one or more destinations including 3rd party destinations.\n\nBy default all ingested and generated assets are automatically sent to the [Shotstack hosting destination](https://shotstack.io/docs/guide/serving-assets/hosting/). You can [opt-out](https://shotstack.io/docs/guide/serving-assets/self-host/) from by setting the Shotstack destination **exclude** property to **true**."
      • removedInput schema / properties / payload / $defs / Destinations / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / FlipTransformation / $ref
        Added value: +"#/$defs/FlipTransformation"
      • removedInput schema / properties / payload / $defs / FlipTransformation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / FlipTransformation / description
        Removed value: -"Flip a clip vertically or horizontally. Acts as a mirror effect of the clip along the selected plane."
      • removedInput schema / properties / payload / $defs / FlipTransformation / properties
        Removed value: -{
        -  "horizontal": {
        -    "description": "Flip a clip horizontally.",
        -    "type": "boolean"
        -  },
        -  "vertical": {
        -    "description": "Flip a clip vertically.",
        -    "type": "boolean"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / FlipTransformation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Font / $ref
        Added value: +"#/$defs/Font"
      • removedInput schema / properties / payload / $defs / Font / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Font / description
        Removed value: -"Download a custom font to use with the HTML asset type, using the font name in the CSS or font tag. See our [custom fonts](https://shotstack.io/learn/html-custom-fonts/) getting started guide for more details."
      • removedInput schema / properties / payload / $defs / Font / properties
        Removed value: -{
        -  "src": {
        -    "description": "The URL of the font file. The URL must be publicly accessible or include credentials.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Font / required
        Removed value: -[
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / Font / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / $ref
        Added value: +"#/$defs/GoogleCloudStorageDestination"
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / description
        Removed value: -"Send videos and assets to a [Google Cloud Storage](https://cloud.google.com/storage) bucket. Send files with your own prefix and filename. Google Cloud credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/google-cloud-storage), not in the request."
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/GoogleCloudStorageDestinationOptions",
        -    "description": "Additional Google Cloud Storage configuration options."
        -  },
        -  "provider": {
        -    "default": "google-cloud-storage",
        -    "description": "The destination to send assets to - set to `google-cloud-storage` for Google Cloud Storage.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / $ref
        Added value: +"#/$defs/GoogleCloudStorageDestinationOptions"
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / description
        Removed value: -"Pass additional options to control how files are stored in Google Cloud Storage."
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / properties
        Removed value: -{
        -  "bucket": {
        -    "description": "The bucket name to send files to. The bucket must exist in the Google Cloud Storage account before files can be sent.",
        -    "type": "string"
        -  },
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "prefix": {
        -    "description": "A prefix for the file being sent. This is typically a folder name, i.e. `videos` or `customerId/videos`.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / required
        Removed value: -[
        -  "bucket"
        -]
      • addedInput schema / properties / payload / $defs / GoogleDriveDestination / $ref
        Added value: +"#/$defs/GoogleDriveDestination"
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / description
        Removed value: -"Send rendered videos and assets to the [Google Drive](https://shotstack.io/docs/guide/serving-assets/destinations/google-drive/) cloud storage service. Google Drive uses OAuth and you must authenticate and link your Google account via  [dashboard](https://dashboard.shotstack.io/integrations/google-drive), not in the request."
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/GoogleDriveDestinationOptions",
        -    "description": "Additional Google Drive configuration and features. If omitted, files are saved to the root of My Drive using the default Shotstack filename."
        -  },
        -  "provider": {
        -    "default": "google-drive",
        -    "description": "The destination to send assets to - set to `google-drive` for Google Drive.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / $ref
        Added value: +"#/$defs/GoogleDriveDestinationOptions"
      • removedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / description
        Removed value: -"Pass the folder ID and options to configure how assets are stored in Google Drive."
      • removedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / properties
        Removed value: -{
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "folderId": {
        -    "description": "The Google Drive folder ID where the asset will be stored. If omitted, the asset is saved to the root of My Drive. The folder ID can be retrieved from the URL when logged in to Google Drive, e.g. <a href=\"#\">https://drive.google.com/drive/u/0/folders/1r-eTY6OLO8tzQRKwMyq-fIrQ_7AJEI6A</a>.",
        -    "type": "string"
        -  }
        -}
      • addedInput schema / properties / payload / $defs / Html5Asset / $ref
        Added value: +"#/$defs/Html5Asset"
      • removedInput schema / properties / payload / $defs / Html5Asset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Html5Asset / description
        Removed value: -"The Html5Asset renders full HTML5/CSS3/JS.\n"
      • removedInput schema / properties / payload / $defs / Html5Asset / properties
        Removed value: -{
        -  "css": {
        -    "description": "The CSS string applied to the HTML. Max 500,000 characters.",
        -    "maxLength": 500000,
        -    "type": "string"
        -  },
        -  "html": {
        -    "description": "The HTML markup for the asset. Max 1,000,000 characters.",
        -    "maxLength": 1000000,
        -    "type": "string"
        -  },
        -  "js": {
        -    "description": "Optional JavaScript. Use for chart libraries, animations, or DOM manipulation. `gsap`, `d3`, `anime` and `lottie` are always available. CSS animations, transitions, and `Element.animate()` are also captured automatically. Max 500,000 characters.\n",
        -    "maxLength": 500000,
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "html5",
        -    "description": "The type of asset - set to `html5` for HTML5/CSS3/JS.",
        -    "enum": [
        -      "html5"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Html5Asset / required
        Removed value: -[
        -  "type",
        -  "html"
        -]
      • removedInput schema / properties / payload / $defs / Html5Asset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / HtmlAsset / $ref
        Added value: +"#/$defs/HtmlAsset"
      • removedInput schema / properties / payload / $defs / HtmlAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / HtmlAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / HtmlAsset / description
        Removed value: -"**Notice: The HtmlAsset is deprecated, use the [RichTextAsset](#tocs_richtextasset) instead.**\n\nThe HtmlAsset clip type lets you create text based layout and formatting using\nHTML and CSS. You can also set the height and width of a bounding box for the HTML\ncontent to sit within. Text and elements will wrap within the bounding box.\n"
      • removedInput schema / properties / payload / $defs / HtmlAsset / properties
        Removed value: -{
        -  "background": {
        -    "description": "Apply a background color behind the HTML bounding box using. Set the text color using hexadecimal  color notation. Transparency is supported by setting the first two characters of the hex string  (opposite to HTML), i.e. #80ffffff will be white with 50% transparency.",
        -    "type": "string"
        -  },
        -  "css": {
        -    "description": "The CSS text string to apply styling to the HTML. See list of  [support CSS properties](https://shotstack.io/docs/guide/architecting-an-application/html-support/#supported-css-properties).",
        -    "type": "string"
        -  },
        -  "height": {
        -    "description": "Set the width of the HTML asset bounding box in pixels. Text and elements will be masked if they exceed the  height of the bounding box.",
        -    "type": "integer"
        -  },
        -  "html": {
        -    "description": "The HTML text string. See list of [supported HTML tags](https://shotstack.io/docs/guide/architecting-an-application/html-support/#supported-html-tags).",
        -    "type": "string"
        -  },
        -  "position": {
        -    "description": "Place the HTML in one of nine predefined positions within the HTML area. <ul>\n  <li>`top` - top (center)</li>\n  <li>`topRight` - top right</li>\n  <li>`right` - right (center)</li>\n  <li>`bottomRight` - bottom right</li>\n  <li>`bottom` - bottom (center)</li>\n  <li>`bottomLeft` - bottom left</li>\n  <li>`left` - left (center)</li>\n  <li>`topLeft` - top left</li>\n  <li>`center` - center</li>\n</ul>",
        -    "enum": [
        -      "top",
        -      "topRight",
        -      "right",
        -      "bottomRight",
        -      "bottom",
        -      "bottomLeft",
        -      "left",
        -      "topLeft",
        -      "center"
        -    ],
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "html",
        -    "description": "The type of asset - set to `html` for HTML.",
        -    "enum": [
        -      "html"
        -    ],
        -    "type": "string"
        -  },
        -  "width": {
        -    "description": "Set the width of the HTML asset bounding box in pixels. Text will wrap to fill the bounding box.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / HtmlAsset / required
        Removed value: -[
        -  "type",
        -  "html"
        -]
      • removedInput schema / properties / payload / $defs / HtmlAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / ImageAsset / $ref
        Added value: +"#/$defs/ImageAsset"
      • removedInput schema / properties / payload / $defs / ImageAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / ImageAsset / description
        Removed value: -"The ImageAsset adds an image to a Clip. The image can be sourced from a URL\n(`src`), generated from a text prompt (`prompt`), or both. At least one of\n`src` or `prompt` must be provided.\n\n- **Source URL:** set `src` to the publicly accessible URL of a jpg or png file.\n- **Generated:** set `prompt` to describe the image. Choose a generator with\n  `model` and configure it with model-specific `options`; the engine fills\n  `src` in automatically.\n- **Both:** `src` acts as a preview placeholder while `prompt` drives\n  generation — the image is regenerated from the prompt at render time.\n  Unchanged prompts and options resolve from the generation cache.\n"
      • removedInput schema / properties / payload / $defs / ImageAsset / properties
        Removed value: -{
        -  "crop": {
        -    "$ref": "#/$defs/Crop"
        -  },
        -  "model": {
        -    "description": "The generation model to use when `prompt` is set (e.g. `flux-schnell`, `nano-banana-2`). Defaults to `nano-banana-2` if omitted. Each model's available options are defined by the model registry.",
        -    "type": "string"
        -  },
        -  "options": {
        -    "additionalProperties": true,
        -    "description": "Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.",
        -    "type": "object"
        -  },
        -  "prompt": {
        -    "description": "A text prompt to generate the image from. The engine generates an image at render time and fills `src` automatically; an existing `src` is treated as a preview placeholder and replaced. Use `model` to choose the generator and `options` to configure it.",
        -    "maxLength": 4000,
        -    "type": "string"
        -  },
        -  "src": {
        -    "description": "The image source URL. The URL must be publicly accessible or include credentials. When `prompt` is also set, `src` serves as a preview placeholder and the image is regenerated from the prompt at render time.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "image",
        -    "description": "The type of asset - set to `image` for images.",
        -    "enum": [
        -      "image"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ImageAsset / required
        Removed value: -[
        -  "type"
        -]
      • removedInput schema / properties / payload / $defs / ImageAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / ImageToVideoAsset / $ref
        Added value: +"#/$defs/ImageToVideoAsset"
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / description
        Removed value: -"**Notice: ImageToVideoAsset is deprecated. Use [VideoAsset](#tocs_videoasset)\nwith `prompt`, a `model` that accepts a starting image, and that image in\n`options.startSrc` — for example `seedance-2.0-image-to-video`.** This type continues to\nfunction and is internally rewritten to VideoAsset; no behaviour change for\nexisting integrations.\n\nThe ImageToVideoAsset lets you create a video from an image and a text prompt.\n"
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / properties
        Removed value: -{
        -  "aspectRatio": {
        -    "description": "The aspect ratio (shape) of the video output.",
        -    "enum": [
        -      "1:1",
        -      "4:3",
        -      "16:9",
        -      "9:16",
        -      "3:4",
        -      "21:9",
        -      "9:21"
        -    ],
        -    "type": "string"
        -  },
        -  "crop": {
        -    "$ref": "#/$defs/Crop"
        -  },
        -  "prompt": {
        -    "description": "The instructions for modifying the image into a video sequence.",
        -    "type": "string"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the video clip between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to  adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire video (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire video (i.e. original length / 2).",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "src": {
        -    "description": "The image source URL. The URL must be publicly accessible or include credentials.",
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "image-to-video",
        -    "description": "The type of asset to generate - set to `image-to-video` for image-to-video.",
        -    "enum": [
        -      "image-to-video"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / LumaAsset / $ref
        Added value: +"#/$defs/LumaAsset"
      • removedInput schema / properties / payload / $defs / LumaAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / LumaAsset / description
        Removed value: -"The LumaAsset is used to create luma matte masks, transitions and effects between other assets. A luma matte is a grey scale image or animated video where the black areas are transparent and the white areas solid. The luma matte animation should be provided as an mp4 video file. The src must be a publicly accessible URL to the file."
      • removedInput schema / properties / payload / $defs / LumaAsset / properties
        Removed value: -{
        -  "src": {
        -    "description": "The luma matte source URL. The URL must be publicly accessible or include credentials.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the luma matte clip, in seconds (defaults to 0). Videos will start from the in trim point. A luma matte video will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "luma",
        -    "description": "The type of asset - set to `luma` for luma mattes.",
        -    "enum": [
        -      "luma"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / LumaAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / LumaAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / MergeField / $ref
        Added value: +"#/$defs/MergeField"
      • removedInput schema / properties / payload / $defs / MergeField / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / MergeField / description
        Removed value: -"A merge field consists of a key; `find`, and a value; `replace`. Merge fields can be used to replace placeholders within the JSON edit to create re-usable templates. Placeholders should be a string with double brace delimiters, i.e. `\"{{NAME}}\"`. A placeholder can be used for any value within the JSON edit."
      • removedInput schema / properties / payload / $defs / MergeField / properties
        Removed value: -{
        -  "find": {
        -    "description": "The string to find <u>without</u> delimiters.",
        -    "type": "string"
        -  },
        -  "replace": {
        -    "description": "The replacement value. The replacement can be any valid JSON type - string, boolean, number, etc..."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / MergeField / required
        Removed value: -[
        -  "find",
        -  "replace"
        -]
      • removedInput schema / properties / payload / $defs / MergeField / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / MuxDestination / $ref
        Added value: +"#/$defs/MuxDestination"
      • removedInput schema / properties / payload / $defs / MuxDestination / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / MuxDestination / description
        Removed value: -"**Notice: The Mux destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to the [Mux](https://www.mux.com/docs) video hosting and streaming service. Mux credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/mux), not in the request."
      • removedInput schema / properties / payload / $defs / MuxDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/MuxDestinationOptions",
        -    "description": "Additional Mux configuration and features."
        -  },
        -  "provider": {
        -    "default": "mux",
        -    "description": "The destination to send video to - set to `mux` for Mux.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / MuxDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / MuxDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / MuxDestinationOptions / $ref
        Added value: +"#/$defs/MuxDestinationOptions"
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / description
        Removed value: -"**Notice: MuxDestinationOptions, like the Mux destination, is deprecated.** It continues to work, with no behaviour change for existing integrations.\nPass additional options to control how Mux processes video. Currently supports playback_policy and passthrough options."
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / properties
        Removed value: -{
        -  "passthrough": {
        -    "description": "Sets the Mux `passthrough` option. Max 255 characters.",
        -    "maxLength": 255,
        -    "type": "string"
        -  },
        -  "playbackPolicy": {
        -    "description": "Sets the Mux `playback_policy` option. Value is an array of strings - use `public`, `signed`, or both.",
        -    "items": {
        -      "enum": [
        -        "public",
        -        "signed"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  }
        -}
      • addedInput schema / properties / payload / $defs / Offset / $ref
        Added value: +"#/$defs/Offset"
      • removedInput schema / properties / payload / $defs / Offset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Offset / description
        Removed value: -"Offsets the position of an asset horizontally or vertically by a relative distance."
      • removedInput schema / properties / payload / $defs / Offset / properties
        Removed value: -{
        -  "x": {
        -    "description": "Offset an asset on the horizontal axis (left or right). Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "Range varies from -10 to 10. Positive numbers move the asset right, negative left. The distance moved is relative to the width  of the viewport - i.e. an X offset of 0.5 will move the asset half the screen width to the right.",
        -        "format": "float",
        -        "maximum": 10,
        -        "minimum": -10,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the X offset of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "y": {
        -    "description": "Offset an asset on the vertical axis (up or down). Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "Range varies from -10 to 10. Positive numbers move the asset up, negative down. The distance moved is relative to the height of the viewport - i.e. an Y offset of 0.5 will move the asset half the screen height up.",
        -        "format": "float",
        -        "maximum": 10,
        -        "minimum": -10,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the Y offset of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Offset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Output / $ref
        Added value: +"#/$defs/Output"
      • removedInput schema / properties / payload / $defs / Output / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Output / description
        Removed value: -"The output format, render range and type of media to generate. For all formats except `mp3`, either `resolution` or `size` (with both `width` and `height`) must be specified."
      • removedInput schema / properties / payload / $defs / Output / properties
        Removed value: -{
        -  "aspectRatio": {
        -    "description": "The aspect ratio (shape) of the video or image. Useful for social media output formats. Options are: <ul>\n  <li>`16:9` (default) - regular landscape/horizontal aspect ratio</li>\n  <li>`9:16` - vertical/portrait aspect ratio</li>\n  <li>`1:1` - square aspect ratio</li>\n  <li>`4:5` - short vertical/portrait aspect ratio</li>\n  <li>`4:3` - legacy TV aspect ratio</li>\n</ul>",
        -    "enum": [
        -      "16:9",
        -      "9:16",
        -      "1:1",
        -      "4:5",
        -      "4:3"
        -    ],
        -    "type": "string"
        -  },
        -  "destinations": {
        -    "description": "Specify the storage locations and hosting services to send rendered videos to.",
        -    "items": {
        -      "$ref": "#/$defs/Destinations"
        -    },
        -    "type": "array"
        -  },
        -  "format": {
        -    "description": "The output format and type of media file to generate. <ul>\n  <li>`mp4` - mp4 video file</li>\n  <li>`gif` - animated gif</li>\n  <li>`jpg` - jpg image file</li>\n  <li>`png` - png image file</li>\n  <li>`bmp` - bmp image file</li>\n  <li>`mp3` - mp3 audio file (audio only)</li>\n</ul>",
        -    "enum": [
        -      "mp4",
        -      "gif",
        -      "mp3",
        -      "jpg",
        -      "png",
        -      "bmp"
        -    ],
        -    "type": "string"
        -  },
        -  "fps": {
        -    "description": "Override the default frames per second. Useful for when the source footage is recorded at 30fps, i.e. on  mobile devices. Lower frame rates can be used to add cinematic quality (24fps) or to create smaller file size/faster render times or animated gifs (12 or 15fps). Default is 25fps. <ul>\n  <li>`12` - 12fps</li>\n  <li>`15` - 15fps</li>\n  <li>`24` - 24fps</li>\n  <li>`23.976` - 23.976fps</li>\n  <li>`25` (default) - 25fps</li>\n  <li>`29.97` - 29.97fps</li>\n  <li>`30` - 30fps</li>\n  <li>`48` - 48fps</li>\n  <li>`50` - 50fps</li>\n  <li>`59.94` - 59.94fps</li>\n  <li>`60` - 60fps</li>\n</ul>",
        -    "enum": [
        -      12,
        -      15,
        -      23.976,
        -      24,
        -      25,
        -      29.97,
        -      30,
        -      48,
        -      50,
        -      59.94,
        -      60
        -    ],
        -    "type": "number"
        -  },
        -  "mute": {
        -    "description": "Mute the audio track of the output video. Set to `true` to mute, `false` to un-mute.",
        -    "type": "boolean"
        -  },
        -  "poster": {
        -    "$ref": "#/$defs/Poster",
        -    "description": "Generate a poster image from a specific point on the timeline."
        -  },
        -  "quality": {
        -    "description": "Adjust the output quality of the video, image or audio. Adjusting quality affects  render speed, download speeds and storage requirements due to file size. The default `medium` provides the most optimized choice for all three  factors. <ul>\n  <li>`verylow` - reduced quality, smallest file size</li>\n  <li>`low` - slightly reduced quality, smaller file size</li>\n  <li>`medium` (default) - optimized quality, render speeds and file size</li>\n  <li>`high` - slightly increased quality, larger file size</li>\n  <li>`veryhigh` - highest quality, largest file size</li>\n</ul>",
        -    "enum": [
        -      "verylow",
        -      "low",
        -      "medium",
        -      "high",
        -      "veryhigh"
        -    ],
        -    "type": "string"
        -  },
        -  "range": {
        -    "$ref": "#/$defs/Range"
        -  },
        -  "repeat": {
        -    "description": "Loop settings for gif files. Set to `true` to loop, `false` to play only once.",
        -    "type": "boolean"
        -  },
        -  "resolution": {
        -    "description": "The preset output resolution of the video or image. For custom sizes use the `size` property. Either `resolution` or `size` (with both `width` and `height`) must be specified for all formats except `mp3`. <ul>\n  <li>`preview` - 512px x 288px @ 15fps</li>\n  <li>`mobile` - 640px x 360px @ 25fps</li>\n  <li>`sd` - 1024px x 576px @ 25fps</li>\n  <li>`hd` - 1280px x 720px @ 25fps</li>\n  <li>`1080` - 1920px x 1080px @ 25fps</li>\n  <li>`4k` - 3840px x 2160px @ 25fps</li>\n</ul>",
        -    "enum": [
        -      "preview",
        -      "mobile",
        -      "sd",
        -      "hd",
        -      "1080",
        -      "4k"
        -    ],
        -    "type": "string"
        -  },
        -  "scaleTo": {
        -    "description": "Override the resolution and scale the video or image to render at a different size. When using scaleTo the asset should be edited at the resolution dimensions, i.e. use font sizes that look best at HD, then use scaleTo to output the file at SD and the text will be scaled to the correct size. This is useful if you want to create multiple asset sizes. <ul>\n  <li>`preview` - 512px x 288px @ 15fps</li>\n  <li>`mobile` - 640px x 360px @ 25fps</li>\n  <li>`sd` - 1024px x 576px @25fps</li>\n  <li>`hd` - 1280px x 720px @25fps</li>\n  <li>`1080` - 1920px x 1080px @25fps</li>\n</ul>",
        -    "enum": [
        -      "preview",
        -      "mobile",
        -      "sd",
        -      "hd",
        -      "1080",
        -      "4k"
        -    ],
        -    "type": "string"
        -  },
        -  "size": {
        -    "$ref": "#/$defs/Size"
        -  },
        -  "thumbnail": {
        -    "$ref": "#/$defs/Thumbnail",
        -    "description": "Generate a thumbnail image from a specific point on the timeline."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Output / required
        Removed value: -[
        -  "format"
        -]
      • removedInput schema / properties / payload / $defs / Output / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Poster / $ref
        Added value: +"#/$defs/Poster"
      • removedInput schema / properties / payload / $defs / Poster / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Poster / description
        Removed value: -"Generate a poster image for the video at a specific point from the timeline. The poster image size will match the size of the output video."
      • removedInput schema / properties / payload / $defs / Poster / properties
        Removed value: -{
        -  "capture": {
        -    "description": "The point on the timeline in seconds to capture a single frame to use as the poster image.",
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Poster / required
        Removed value: -[
        -  "capture"
        -]
      • removedInput schema / properties / payload / $defs / Poster / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Range / $ref
        Added value: +"#/$defs/Range"
      • removedInput schema / properties / payload / $defs / Range / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Range / description
        Removed value: -"Specify a time range to render, i.e. to render only a portion of a video or audio file. Omit this setting to  export the entire video. Range can also be used to render a frame at a specific time point - setting a range and output format as `jpg` will output a single frame image at the range `start` point."
      • removedInput schema / properties / payload / $defs / Range / properties
        Removed value: -{
        -  "length": {
        -    "description": "The length of the portion of the video or audio to render - i.e. render 6 seconds of the video.",
        -    "format": "float",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "start": {
        -    "description": "The point on the timeline, in seconds, to start the render from - i.e. start at second 3.",
        -    "format": "float",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Range / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichCaptionActive / $ref
        Added value: +"#/$defs/RichCaptionActive"
      • removedInput schema / properties / payload / $defs / RichCaptionActive / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichCaptionActive / description
        Removed value: -"Styling properties for the active/highlighted word."
      • removedInput schema / properties / payload / $defs / RichCaptionActive / properties
        Removed value: -{
        -  "font": {
        -    "$ref": "#/$defs/RichCaptionActiveFont",
        -    "description": "Font properties for the active word."
        -  },
        -  "shadow": {
        -    "description": "Shadow properties for the active word. Set to \"none\" to explicitly remove the base shadow on the active word.",
        -    "oneOf": [
        -      {
        -        "$ref": "#/$defs/RichTextShadow"
        -      },
        -      {
        -        "enum": [
        -          "none"
        -        ],
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  "stroke": {
        -    "description": "Stroke properties for the active word. Set to \"none\" to explicitly remove the base stroke on the active word.",
        -    "oneOf": [
        -      {
        -        "$ref": "#/$defs/RichTextStroke"
        -      },
        -      {
        -        "enum": [
        -          "none"
        -        ],
        -        "type": "string"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichCaptionActive / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichCaptionActiveFont / $ref
        Added value: +"#/$defs/RichCaptionActiveFont"
      • removedInput schema / properties / payload / $defs / RichCaptionActiveFont / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichCaptionActiveFont / description
        Removed value: -"Font properties for the active/highlighted word."
      • removedInput schema / properties / payload / $defs / RichCaptionActiveFont / properties
        Removed value: -{
        -  "background": {
        -    "description": "The background color behind the active word using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "color": {
        -    "description": "The active word color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "family": {
        -    "description": "The font family for the active word. Inherits from the base font.family when not set.",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the active word where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "size": {
        -    "description": "The font size of the active word in pixels.",
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "number"
        -  },
        -  "textDecoration": {
        -    "default": "none",
        -    "description": "Text decoration to apply to the active word.",
        -    "enum": [
        -      "none",
        -      "underline",
        -      "line-through"
        -    ],
        -    "type": "string"
        -  },
        -  "weight": {
        -    "default": "400",
        -    "description": "The weight of the font for the active word. Can be a number (100-900) or a string. Inherits from the base font.weight when not set.\n"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichCaptionActiveFont / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichCaptionAnimation / $ref
        Added value: +"#/$defs/RichCaptionAnimation"
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / description
        Removed value: -"Word-level animation properties for caption effects."
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / properties
        Removed value: -{
        -  "direction": {
        -    "default": "up",
        -    "description": "Direction for directional animations (slide). Only applicable when style is `slide`.",
        -    "enum": [
        -      "left",
        -      "right",
        -      "up",
        -      "down"
        -    ],
        -    "type": "string"
        -  },
        -  "style": {
        -    "default": "highlight",
        -    "description": "The animation style to apply to words: <ul>\n  <li>`karaoke` - Word-by-word color fill as spoken (shows all words, highlights active)</li>\n  <li>`highlight` - Word changes to active color when spoken (shows all words)</li>\n  <li>`pop` - Each word scales up when active</li>\n  <li>`fade` - Gradual opacity transition per word</li>\n  <li>`slide` - Words slide in from a direction</li>\n  <li>`bounce` - Spring animation on word appearance</li>\n  <li>`typewriter` - Words appear one by one and stay visible</li>\n  <li>`none` - No animation, all words visible immediately</li>\n</ul>",
        -    "enum": [
        -      "karaoke",
        -      "highlight",
        -      "pop",
        -      "fade",
        -      "slide",
        -      "bounce",
        -      "typewriter",
        -      "none"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / required
        Removed value: -[
        -  "style"
        -]
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichCaptionAsset / $ref
        Added value: +"#/$defs/RichCaptionAsset"
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / description
        Removed value: -"The RichCaptionAsset provides word-level caption animations with rich-text styling. It supports\nkaraoke-style highlighting, word-by-word animations, and advanced typography. Captions can be\nsourced from SRT/VTT/TTML subtitle files, from audio/video media URLs (auto-transcribed), or\nfrom alias references to other clips in the same timeline.\n"
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / properties
        Removed value: -{
        -  "active": {
        -    "$ref": "#/$defs/RichCaptionActive",
        -    "description": "Styling properties for the active/highlighted word. These override the base styling when a word is being spoken."
        -  },
        -  "align": {
        -    "$ref": "#/$defs/RichTextAlignment",
        -    "description": "Text alignment properties (horizontal and vertical)."
        -  },
        -  "animation": {
        -    "$ref": "#/$defs/RichCaptionAnimation",
        -    "description": "Word-level animation properties controlling how words are highlighted or revealed."
        -  },
        -  "background": {
        -    "$ref": "#/$defs/RichTextBackground",
        -    "description": "Background styling properties for the caption bounding box."
        -  },
        -  "border": {
        -    "$ref": "#/$defs/RichTextBorder",
        -    "description": "Border styling properties for the caption bounding box."
        -  },
        -  "font": {
        -    "additionalProperties": false,
        -    "description": "Font styling properties for inactive words.",
        -    "properties": {
        -      "background": {
        -        "description": "The background color behind the text using hexadecimal color notation.",
        -        "pattern": "^#[A-Fa-f0-9]{6}$",
        -        "type": "string"
        -      },
        -      "color": {
        -        "default": "#ffffff",
        -        "description": "The text color using hexadecimal color notation.",
        -        "pattern": "^#[A-Fa-f0-9]{6}$",
        -        "type": "string"
        -      },
        -      "family": {
        -        "default": "Roboto",
        -        "description": "The font family name. This must be the Family name embedded in the font, i.e. \"Roboto\".",
        -        "type": "string"
        -      },
        -      "opacity": {
        -        "default": 1,
        -        "description": "The opacity of the text where 1 is opaque and 0 is transparent.",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "size": {
        -        "default": 24,
        -        "description": "The size of the font in pixels (px). Must be between 1 and 500.",
        -        "maximum": 500,
        -        "minimum": 1,
        -        "type": "integer"
        -      },
        -      "style": {
        -        "default": "normal",
        -        "description": "The font style.",
        -        "enum": [
        -          "normal",
        -          "italic"
        -        ],
        -        "type": "string"
        -      },
        -      "weight": {
        -        "default": "400",
        -        "description": "The weight of the font. Can be a number (100-900) or a string ('normal', 'bold', etc.). 100 is lightest, 900 is heaviest (boldest)."
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "padding": {
        -    "description": "Padding inside the caption bounding box. Can be a single number (applied to all sides) or an object with individual sides.",
        -    "oneOf": [
        -      {
        -        "description": "Padding in pixels applied to all sides.",
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "$ref": "#/$defs/RichTextPadding"
        -      }
        -    ]
        -  },
        -  "shadow": {
        -    "$ref": "#/$defs/RichTextShadow",
        -    "description": "Text shadow properties."
        -  },
        -  "src": {
        -    "description": "Source for the caption words. Accepts three formats: (1) the URL to a subtitle file (`.srt`, `.vtt`, `.ttml`, or `.dfxp`) which is parsed directly; (2) the URL to an audio or video media file (`.mp4`, `.mov`, `.webm`, `.mp3`, `.wav`, `.m4a`, `.flac`, `.aac`, `.ogg`, and related formats) which is auto-transcribed; (3) an alias reference in the form `alias://clip-name` where `clip-name` is the alias of another audio, video, or text-to-speech clip in the same timeline — the referenced clip's source is auto-transcribed. For file URLs, the URL must be publicly accessible or include credentials. Content is classified at runtime and unsupported content types (HTML, PDF, images, archives) are rejected with a structured error.",
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  "stroke": {
        -    "$ref": "#/$defs/RichTextStroke",
        -    "description": "Text stroke (outline) properties for inactive words."
        -  },
        -  "style": {
        -    "additionalProperties": false,
        -    "description": "Text style properties including spacing, line height, and transformations.",
        -    "properties": {
        -      "gradient": {
        -        "$ref": "#/$defs/RichTextGradient",
        -        "description": "Gradient fill for text instead of solid color."
        -      },
        -      "letterSpacing": {
        -        "default": 0,
        -        "description": "Additional spacing between letters in pixels. Can be negative for tighter spacing.",
        -        "type": "number"
        -      },
        -      "lineHeight": {
        -        "default": 1.2,
        -        "description": "The line height as a multiplier of the font size. Must be between 0 and 10.",
        -        "maximum": 10,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "size": {
        -        "description": "The font size in pixels. Can be used as an alternative to font.size.",
        -        "maximum": 500,
        -        "minimum": 1,
        -        "type": "number"
        -      },
        -      "textDecoration": {
        -        "default": "none",
        -        "description": "Text decoration to apply.",
        -        "enum": [
        -          "none",
        -          "underline",
        -          "line-through"
        -        ],
        -        "type": "string"
        -      },
        -      "textTransform": {
        -        "default": "none",
        -        "description": "Text transformation to apply.",
        -        "enum": [
        -          "none",
        -          "uppercase",
        -          "lowercase",
        -          "capitalize"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "type": {
        -    "default": "rich-caption",
        -    "description": "The type of asset - set to `rich-caption` for rich captions.",
        -    "enum": [
        -      "rich-caption"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextAlignment / $ref
        Added value: +"#/$defs/RichTextAlignment"
      • removedInput schema / properties / payload / $defs / RichTextAlignment / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextAlignment / description
        Removed value: -"Text alignment properties (horizontal and vertical)."
      • removedInput schema / properties / payload / $defs / RichTextAlignment / properties
        Removed value: -{
        -  "horizontal": {
        -    "default": "center",
        -    "description": "The horizontal alignment of the text.",
        -    "enum": [
        -      "left",
        -      "center",
        -      "right"
        -    ],
        -    "type": "string"
        -  },
        -  "vertical": {
        -    "default": "middle",
        -    "description": "The vertical alignment of the text within the bounding box.",
        -    "enum": [
        -      "top",
        -      "middle",
        -      "bottom"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextAlignment / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextAnimation / $ref
        Added value: +"#/$defs/RichTextAnimation"
      • removedInput schema / properties / payload / $defs / RichTextAnimation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextAnimation / description
        Removed value: -"Animation properties for text entrance effects."
      • removedInput schema / properties / payload / $defs / RichTextAnimation / properties
        Removed value: -{
        -  "direction": {
        -    "description": "Direction for directional animations. Required for slideIn, ascend, shift, and movingLetters presets. <ul>\n  <li>`ascend` - supports: up, down</li>\n  <li>`shift` - supports: left, right, up, down</li>\n  <li>`slideIn` - supports: left, right, up, down</li>\n  <li>`movingLetters` - supports: left, right, up, down</li>\n</ul>",
        -    "enum": [
        -      "left",
        -      "right",
        -      "up",
        -      "down"
        -    ],
        -    "type": "string"
        -  },
        -  "duration": {
        -    "description": "Override animation duration in seconds. Must be between 0.1 and 30 seconds.",
        -    "maximum": 30,
        -    "minimum": 0.1,
        -    "type": "number"
        -  },
        -  "preset": {
        -    "description": "The animation preset to apply. Available presets: <ul>\n  <li>`fadeIn` - fadeIn in animation</li>\n  <li>`slideIn` - slide in from a direction</li>\n  <li>`typewriter` - typewriter effect</li>\n  <li>`ascend` - ascend from a direction</li>\n  <li>`shift` - shift in from a direction</li>\n  <li>`movingLetters` - letters move in from a direction</li>\n</ul>",
        -    "enum": [
        -      "fadeIn",
        -      "slideIn",
        -      "typewriter",
        -      "ascend",
        -      "shift",
        -      "movingLetters"
        -    ],
        -    "type": "string"
        -  },
        -  "style": {
        -    "description": "Animation style - animate by character or by word. Only applicable for typewriter and shift animations.",
        -    "enum": [
        -      "character",
        -      "word"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextAnimation / required
        Removed value: -[
        -  "preset"
        -]
      • removedInput schema / properties / payload / $defs / RichTextAnimation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextAsset / $ref
        Added value: +"#/$defs/RichTextAsset"
      • removedInput schema / properties / payload / $defs / RichTextAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextAsset / description
        Removed value: -"The RichTextAsset provides advanced text rendering with support for custom fonts, gradients, shadows, strokes,\nanimations, and styling options. It offers more flexibility and visual effects than the basic TextAsset.\n"
      • removedInput schema / properties / payload / $defs / RichTextAsset / properties
        Removed value: -{
        -  "align": {
        -    "$ref": "#/$defs/RichTextAlignment",
        -    "description": "Text alignment properties (horizontal and vertical)."
        -  },
        -  "animation": {
        -    "$ref": "#/$defs/RichTextAnimation",
        -    "description": "Animation properties for text entrance effects."
        -  },
        -  "background": {
        -    "$ref": "#/$defs/RichTextBackground",
        -    "description": "Background styling properties for the text bounding box."
        -  },
        -  "border": {
        -    "$ref": "#/$defs/RichTextBorder",
        -    "description": "Border styling properties for the text bounding box."
        -  },
        -  "font": {
        -    "$ref": "#/$defs/RichTextFont",
        -    "description": "Font styling properties."
        -  },
        -  "padding": {
        -    "description": "Padding inside the text bounding box. Can be a single number (applied to all sides) or an object with individual sides.",
        -    "oneOf": [
        -      {
        -        "description": "Padding in pixels applied to all sides.",
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "$ref": "#/$defs/RichTextPadding"
        -      }
        -    ]
        -  },
        -  "shadow": {
        -    "$ref": "#/$defs/RichTextShadow",
        -    "description": "Text shadow properties."
        -  },
        -  "stroke": {
        -    "$ref": "#/$defs/RichTextStroke",
        -    "description": "Text stroke (outline) properties."
        -  },
        -  "style": {
        -    "$ref": "#/$defs/RichTextStyle",
        -    "description": "Text style properties including spacing, line height, and transformations."
        -  },
        -  "text": {
        -    "description": "The text string to display. Maximum 5000 characters.",
        -    "maxLength": 5000,
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "rich-text",
        -    "description": "The type of asset - set to `rich-text` for rich text.",
        -    "enum": [
        -      "rich-text"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextAsset / required
        Removed value: -[
        -  "type",
        -  "text"
        -]
      • removedInput schema / properties / payload / $defs / RichTextAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextBackground / $ref
        Added value: +"#/$defs/RichTextBackground"
      • removedInput schema / properties / payload / $defs / RichTextBackground / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextBackground / description
        Removed value: -"Background styling properties for the text bounding box."
      • removedInput schema / properties / payload / $defs / RichTextBackground / properties
        Removed value: -{
        -  "borderRadius": {
        -    "default": 0,
        -    "description": "The border radius of the background box in pixels. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "color": {
        -    "description": "The background color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the background where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "padding": {
        -    "description": "Inner padding in pixels between the wrap pill edge and the rendered text. Only takes\neffect when `wrap: true`. When omitted, the renderer applies a sensible default\nproportional to the font size (approximately 12% of the active page font size on\nrich-caption assets). Set to 0 for a pill that hugs the text exactly. Available on\nrich-text and rich-caption assets only.\n",
        -    "maximum": 200,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  "wrap": {
        -    "default": false,
        -    "description": "When true, the background pill shrinks to fit the rendered text bounding box plus the\nasset's padding (and stroke width, if present), producing a pill or badge effect. When\nfalse (default), the background fills the full asset content area. Available on\nrich-text and rich-caption assets only; not supported on legacy `type: text`.\n",
        -    "type": "boolean"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextBackground / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextBorder / $ref
        Added value: +"#/$defs/RichTextBorder"
      • removedInput schema / properties / payload / $defs / RichTextBorder / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextBorder / description
        Removed value: -"Border styling properties for the text bounding box."
      • removedInput schema / properties / payload / $defs / RichTextBorder / properties
        Removed value: -{
        -  "color": {
        -    "default": "#000000",
        -    "description": "The border color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the border where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "radius": {
        -    "default": 0,
        -    "description": "The border radius in pixels for rounded corners. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "width": {
        -    "default": 0,
        -    "description": "The width of the border in pixels. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextBorder / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextFont / $ref
        Added value: +"#/$defs/RichTextFont"
      • removedInput schema / properties / payload / $defs / RichTextFont / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextFont / description
        Removed value: -"Font properties for rich text."
      • removedInput schema / properties / payload / $defs / RichTextFont / properties
        Removed value: -{
        -  "background": {
        -    "description": "The background color behind the text using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "color": {
        -    "default": "#000000",
        -    "description": "The text color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "family": {
        -    "default": "Open Sans",
        -    "description": "The font family name. This must be the Family name embedded in the font, i.e. \"Open Sans\".",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the text where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "size": {
        -    "default": 24,
        -    "description": "The size of the font in pixels (px). Must be between 1 and 500.",
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  "stroke": {
        -    "$ref": "#/$defs/RichTextStroke",
        -    "description": "Text stroke (outline) properties."
        -  },
        -  "style": {
        -    "default": "normal",
        -    "description": "The font style.",
        -    "enum": [
        -      "normal",
        -      "italic"
        -    ],
        -    "type": "string"
        -  },
        -  "weight": {
        -    "default": "400",
        -    "description": "The weight of the font. Can be a number (100-900) or a string ('normal', 'bold', etc.). 100 is lightest, 900 is heaviest (boldest)."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextFont / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextGradient / $ref
        Added value: +"#/$defs/RichTextGradient"
      • removedInput schema / properties / payload / $defs / RichTextGradient / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextGradient / description
        Removed value: -"Gradient properties for text fill."
      • removedInput schema / properties / payload / $defs / RichTextGradient / properties
        Removed value: -{
        -  "angle": {
        -    "default": 0,
        -    "description": "The angle of the gradient in degrees (for linear gradients). Must be between 0 and 360.",
        -    "maximum": 360,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "stops": {
        -    "description": "Gradient color stops. Must have at least 2 stops.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "color": {
        -          "description": "Color at this stop using hexadecimal color notation.",
        -          "pattern": "^#[A-Fa-f0-9]{6}$",
        -          "type": "string"
        -        },
        -        "offset": {
        -          "description": "Position of the color stop between 0 (start) and 1 (end).",
        -          "maximum": 1,
        -          "minimum": 0,
        -          "type": "number"
        -        }
        -      },
        -      "required": [
        -        "offset",
        -        "color"
        -      ],
        -      "type": "object"
        -    },
        -    "minItems": 2,
        -    "type": "array"
        -  },
        -  "type": {
        -    "default": "linear",
        -    "description": "The type of gradient.",
        -    "enum": [
        -      "linear",
        -      "radial"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextGradient / required
        Removed value: -[
        -  "stops"
        -]
      • removedInput schema / properties / payload / $defs / RichTextGradient / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextPadding / $ref
        Added value: +"#/$defs/RichTextPadding"
      • removedInput schema / properties / payload / $defs / RichTextPadding / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextPadding / description
        Removed value: -"Padding properties for individual sides of the text bounding box."
      • removedInput schema / properties / payload / $defs / RichTextPadding / properties
        Removed value: -{
        -  "bottom": {
        -    "default": 0,
        -    "description": "Bottom padding in pixels.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "left": {
        -    "default": 0,
        -    "description": "Left padding in pixels.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "right": {
        -    "default": 0,
        -    "description": "Right padding in pixels.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "top": {
        -    "default": 0,
        -    "description": "Top padding in pixels.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextPadding / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextShadow / $ref
        Added value: +"#/$defs/RichTextShadow"
      • removedInput schema / properties / payload / $defs / RichTextShadow / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextShadow / description
        Removed value: -"Text shadow properties."
      • removedInput schema / properties / payload / $defs / RichTextShadow / properties
        Removed value: -{
        -  "blur": {
        -    "default": 0,
        -    "description": "The blur radius of the shadow in pixels. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "color": {
        -    "default": "#000000",
        -    "description": "The shadow color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "offsetX": {
        -    "default": 0,
        -    "description": "Horizontal offset of the shadow in pixels. Positive values move right, negative left.",
        -    "type": "number"
        -  },
        -  "offsetY": {
        -    "default": 0,
        -    "description": "Vertical offset of the shadow in pixels. Positive values move down, negative up.",
        -    "type": "number"
        -  },
        -  "opacity": {
        -    "default": 0.5,
        -    "description": "The opacity of the shadow where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextShadow / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextStroke / $ref
        Added value: +"#/$defs/RichTextStroke"
      • removedInput schema / properties / payload / $defs / RichTextStroke / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextStroke / description
        Removed value: -"Text stroke (outline) properties."
      • removedInput schema / properties / payload / $defs / RichTextStroke / properties
        Removed value: -{
        -  "color": {
        -    "default": "#000000",
        -    "description": "The stroke color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the stroke where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "width": {
        -    "default": 0,
        -    "description": "The width of the stroke in pixels. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextStroke / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextStyle / $ref
        Added value: +"#/$defs/RichTextStyle"
      • removedInput schema / properties / payload / $defs / RichTextStyle / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextStyle / description
        Removed value: -"Text style properties including spacing, line height, and transformations."
      • removedInput schema / properties / payload / $defs / RichTextStyle / properties
        Removed value: -{
        -  "gradient": {
        -    "$ref": "#/$defs/RichTextGradient",
        -    "description": "Gradient fill for text instead of solid color."
        -  },
        -  "letterSpacing": {
        -    "default": 0,
        -    "description": "Additional spacing between letters in pixels. Can be negative for tighter spacing.",
        -    "type": "number"
        -  },
        -  "lineHeight": {
        -    "default": 1.2,
        -    "description": "The line height as a multiplier of the font size. Must be between 0 and 10.",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "textDecoration": {
        -    "default": "none",
        -    "description": "Text decoration to apply.",
        -    "enum": [
        -      "none",
        -      "underline",
        -      "line-through"
        -    ],
        -    "type": "string"
        -  },
        -  "textTransform": {
        -    "default": "none",
        -    "description": "Text transformation to apply.",
        -    "enum": [
        -      "none",
        -      "uppercase",
        -      "lowercase",
        -      "capitalize"
        -    ],
        -    "type": "string"
        -  },
        -  "wordSpacing": {
        -    "default": 0,
        -    "description": "Additional spacing between words in pixels. A value of 0 uses the font's natural space width.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextStyle / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RotateTransformation / $ref
        Added value: +"#/$defs/RotateTransformation"
      • removedInput schema / properties / payload / $defs / RotateTransformation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RotateTransformation / description
        Removed value: -"Rotate a clip by the specified angle in degrees. Rotation origin is set based on the clips `position`."
      • removedInput schema / properties / payload / $defs / RotateTransformation / properties
        Removed value: -{
        -  "angle": {
        -    "description": "Rotate a clip by the specified angle in degrees. Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "The angle to rotate the clip. Can be 0 to 360, or 0 to -360. Using a positive number rotates the clip clockwise, negative numbers counter-clockwise.",
        -        "format": "float",
        -        "maximum": 360,
        -        "minimum": -360,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the rotation of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RotateTransformation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / S3Destination / $ref
        Added value: +"#/$defs/S3Destination"
      • removedInput schema / properties / payload / $defs / S3Destination / description
        Removed value: -"Send videos and assets to an [Amazon S3](https://shotstack.io/docs/guide/serving-assets/destinations/s3/) bucket. Send files to any region with your own prefix and filename. AWS credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/s3), not in the request."
      • removedInput schema / properties / payload / $defs / S3Destination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/S3DestinationOptions",
        -    "description": "Additional S3 configuration options."
        -  },
        -  "provider": {
        -    "default": "s3",
        -    "description": "The destination to send assets to - set to `s3` for S3.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / S3Destination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / S3Destination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / S3DestinationOptions / $ref
        Added value: +"#/$defs/S3DestinationOptions"
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / description
        Removed value: -"Pass additional options to control how files are stored in S3."
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / properties
        Removed value: -{
        -  "acl": {
        -    "description": "Sets the S3 Access Control List (acl) permissions. Default is `private`. Must use a valid  S3 [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl).",
        -    "type": "string"
        -  },
        -  "bucket": {
        -    "description": "The bucket name to send files to. The bucket must exist in the AWS account before files can be sent.",
        -    "type": "string"
        -  },
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "prefix": {
        -    "description": "A prefix for the file being sent. This is typically a folder name, i.e. `videos` or `customerId/videos`.",
        -    "type": "string"
        -  },
        -  "region": {
        -    "description": "Choose the region to send the file to. Must be a valid  [AWS region](https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_region) string like `us-east-1` or `ap-southeast-2`.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / required
        Removed value: -[
        -  "region",
        -  "bucket"
        -]
      • addedInput schema / properties / payload / $defs / ShapeAsset / $ref
        Added value: +"#/$defs/ShapeAsset"
      • removedInput schema / properties / payload / $defs / ShapeAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / ShapeAsset / description
        Removed value: -"The ShapeAsset is used to add shapes to a video. The shape can be styled with a fill and a stroke.\nYou can manipulate properties such as rotation to create dynamic effects like a diamond shape or stripes.\n"
      • removedInput schema / properties / payload / $defs / ShapeAsset / properties
        Removed value: -{
        -  "circle": {
        -    "additionalProperties": false,
        -    "description": "Configuration settings for the circle shape. Required when `shape` is set to `circle`.",
        -    "properties": {
        -      "radius": {
        -        "description": "Set the radius of the circle shape in pixels.",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "radius"
        -    ],
        -    "type": "object"
        -  },
        -  "fill": {
        -    "additionalProperties": false,
        -    "description": "Specifies the fill style of the shape.",
        -    "properties": {
        -      "color": {
        -        "description": "The color of the fill using hexadecimal color notation.",
        -        "type": "string"
        -      },
        -      "opacity": {
        -        "description": "The opacity of the fill where 1 is opaque and 0 is transparent.",
        -        "type": "number"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "height": {
        -    "description": "Sets the height of the bounding box in pixels. This value should be larger than the shape's height. If omitted, the entire viewport width and height will be used.",
        -    "type": "integer"
        -  },
        -  "line": {
        -    "additionalProperties": false,
        -    "description": "Configuration settings for the line shape. Required when `shape` is set to `line`.",
        -    "properties": {
        -      "length": {
        -        "description": "Set the length of the line shape in pixels.",
        -        "type": "integer"
        -      },
        -      "thickness": {
        -        "description": "Set the thickness of the line in pixels.",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "length",
        -      "thickness"
        -    ],
        -    "type": "object"
        -  },
        -  "rectangle": {
        -    "additionalProperties": false,
        -    "description": "Configuration settings for the rectangle shape. Required when `shape` is set to `rectangle`.",
        -    "properties": {
        -      "cornerRadius": {
        -        "description": "Set the corner radius of the rectangle shape.",
        -        "type": "integer"
        -      },
        -      "height": {
        -        "description": "Set the height of the rectangle shape in pixels.",
        -        "type": "integer"
        -      },
        -      "width": {
        -        "description": "Set the width of the rectangle shape in pixels.",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "width",
        -      "height"
        -    ],
        -    "type": "object"
        -  },
        -  "shape": {
        -    "description": "The shape to display.",
        -    "enum": [
        -      "rectangle",
        -      "circle",
        -      "line"
        -    ],
        -    "type": "string"
        -  },
        -  "stroke": {
        -    "additionalProperties": false,
        -    "description": "Specifies the stroke style of the shape.",
        -    "properties": {
        -      "color": {
        -        "description": "The stroke color of the font using hexadecimal color notation.",
        -        "type": "string"
        -      },
        -      "width": {
        -        "description": "The width of the stroke in pixels.",
        -        "type": "number"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "type": {
        -    "default": "shape",
        -    "description": "The type of asset - set to `shape` for shape.",
        -    "enum": [
        -      "shape"
        -    ],
        -    "type": "string"
        -  },
        -  "width": {
        -    "description": "Sets the width of the bounding box in pixels. This value should be larger than the shape's width. If omitted, the entire viewport width and height will be used.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ShapeAsset / required
        Removed value: -[
        -  "type",
        -  "shape"
        -]
      • removedInput schema / properties / payload / $defs / ShapeAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / ShotstackDestination / $ref
        Added value: +"#/$defs/ShotstackDestination"
      • removedInput schema / properties / payload / $defs / ShotstackDestination / description
        Removed value: -"Send videos and assets to the  [Shotstack hosting and CDN](https://shotstack.io/docs/guide/serving-assets/destinations/shotstack/) service.  This destination is enabled by default."
      • removedInput schema / properties / payload / $defs / ShotstackDestination / properties
        Removed value: -{
        -  "exclude": {
        -    "description": "Set to `true` to [opt-out](https://shotstack.io/docs/guide/serving-assets/self-host/) from the Shotstack hosting and CDN service. All files must be downloaded within 24 hours of rendering.",
        -    "type": "boolean"
        -  },
        -  "provider": {
        -    "default": "shotstack",
        -    "description": "The destination to send assets to - set to `shotstack` for Shotstack hosting and CDN.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ShotstackDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / ShotstackDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Size / $ref
        Added value: +"#/$defs/Size"
      • removedInput schema / properties / payload / $defs / Size / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Size / description
        Removed value: -"Set a custom size for a video or image in pixels. When using a custom size omit the `resolution` and `aspectRatio`. Custom sizes must be divisible by 2 based on the encoder specifications."
      • removedInput schema / properties / payload / $defs / Size / properties
        Removed value: -{
        -  "height": {
        -    "description": "Set a custom height for the video or image file in pixels. Value must be divisible by 2. Maximum video height is 1920px, maximum image height is 4096px.",
        -    "maximum": 4096,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  "width": {
        -    "description": "Set a custom width for the video or image file in pixels. Value must be divisible by 2. Maximum video width is 1920px, maximum image width is 4096px.",
        -    "maximum": 4096,
        -    "minimum": 1,
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Size / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / SkewTransformation / $ref
        Added value: +"#/$defs/SkewTransformation"
      • removedInput schema / properties / payload / $defs / SkewTransformation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / SkewTransformation / description
        Removed value: -"Skew a clip so its edges are sheared at an angle. Use values between -100 and 100. Values over 3 or under -3 will skew the clip almost flat."
      • removedInput schema / properties / payload / $defs / SkewTransformation / properties
        Removed value: -{
        -  "x": {
        -    "description": "Skew the clip along it's x axis.",
        -    "oneOf": [
        -      {
        -        "description": "Range varies from -100 to 100. Positive numbers skew the asset right, negative left. The distance moved is relative to the width of the viewport - i.e. an X skew of 0.5 will skew the asset half the screen width to the right.",
        -        "format": "float",
        -        "maximum": 100,
        -        "minimum": -100,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the X skew of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "y": {
        -    "description": "Skew the clip along it's y axis.",
        -    "oneOf": [
        -      {
        -        "description": "Range varies from -100 to 100. Positive numbers skew the asset up, negative down. The distance moved is relative to the height of the viewport - i.e. an Y skew of 0.5 will skew the asset half the screen height up.",
        -        "format": "float",
        -        "maximum": 100,
        -        "minimum": -100,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the Y skew of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / SkewTransformation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Soundtrack / $ref
        Added value: +"#/$defs/Soundtrack"
      • removedInput schema / properties / payload / $defs / Soundtrack / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Soundtrack / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / Soundtrack / description
        Removed value: -"**Notice: The Soundtrack is deprecated, use an [AudioAsset](#tocs_audioasset) clip on its own track instead.** This type continues to function; no behaviour change for existing integrations.\nA music or audio file in mp3 format that plays for the duration of the rendered video or the length of the audio file, which ever is shortest."
      • removedInput schema / properties / payload / $defs / Soundtrack / properties
        Removed value: -{
        -  "effect": {
        -    "description": "The effect to apply to the audio file <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        -    "enum": [
        -      "fadeIn",
        -      "fadeOut",
        -      "fadeInFadeOut"
        -    ],
        -    "type": "string"
        -  },
        -  "src": {
        -    "description": "The URL of the mp3 audio file. The URL must be publicly accessible or include credentials.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Set the volume for the soundtrack between 0 and 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Soundtrack / required
        Removed value: -[
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / Soundtrack / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / SvgAsset / $ref
        Added value: +"#/$defs/SvgAsset"
      • removedInput schema / properties / payload / $defs / SvgAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / SvgAsset / description
        Removed value: -"The SvgAsset is used to add scalable vector graphics (SVG) to a video using raw SVG markup.\n\n**Supported elements:** `<path>`, `<rect>`, `<circle>`, `<ellipse>`,\n`<line>`, `<polygon>`, `<polyline>`\n\n**Automatically extracted from SVG markup:**\n- Path data (converted to a single combined path)\n- Fill color (from `fill` attribute or `style`)\n- Stroke color and width (from attributes or `style`)\n- Dimensions (from `width`/`height` or `viewBox`)\n- Opacity (from `opacity` attribute)\n\nSee [W3C SVG 2 Specification](https://www.w3.org/TR/SVG2/) for path data syntax.\n"
      • removedInput schema / properties / payload / $defs / SvgAsset / properties
        Removed value: -{
        -  "src": {
        -    "description": "Raw SVG markup string. The SVG must contain valid SVG elements. The shape,\nfill, stroke, dimensions and opacity are automatically extracted from the\nSVG content.\n",
        -    "maxLength": 500000,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "svg",
        -    "description": "The asset type - set to `svg` for SVG assets.",
        -    "enum": [
        -      "svg"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / SvgAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / SvgAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextAlignment / $ref
        Added value: +"#/$defs/TextAlignment"
      • removedInput schema / properties / payload / $defs / TextAlignment / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextAlignment / description
        Removed value: -"Horizontal and vertical alignment properties for text."
      • removedInput schema / properties / payload / $defs / TextAlignment / properties
        Removed value: -{
        -  "horizontal": {
        -    "description": "The horizontal alignment of the text. Value must be one of: <ul>\n  <li>`left`</li>\n  <li>`center`</li>\n  <li>`right`</li>\n</ul>",
        -    "enum": [
        -      "left",
        -      "center",
        -      "right"
        -    ],
        -    "type": "string"
        -  },
        -  "vertical": {
        -    "description": "The vertical alignment of the text. Value must be one of: <ul>\n  <li>`top`</li>\n  <li>`center`</li>\n  <li>`bottom`</li>\n</ul>",
        -    "enum": [
        -      "top",
        -      "center",
        -      "bottom"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextAlignment / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextAsset / $ref
        Added value: +"#/$defs/TextAsset"
      • removedInput schema / properties / payload / $defs / TextAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / TextAsset / description
        Removed value: -"**Notice: The TextAsset is deprecated, use the [RichTextAsset](#tocs_richtextasset) instead.** This type\ncontinues to function; no behaviour change for existing integrations.\n\nThe TextAsset is used to add text and titles to a video. The text can be styled with built in and custom\n[Fonts](#tocs_font). You can also add a background bounding box used to control wrapping and overflow. Emoticons are also supported.\n"
      • removedInput schema / properties / payload / $defs / TextAsset / properties
        Removed value: -{
        -  "alignment": {
        -    "$ref": "#/$defs/TextAlignment",
        -    "description": "Alignment properties."
        -  },
        -  "animation": {
        -    "additionalProperties": false,
        -    "description": "Animation properties for text entrance effects.",
        -    "properties": {
        -      "duration": {
        -        "description": "The duration of the animation in seconds.",
        -        "maximum": 30,
        -        "minimum": 0.1,
        -        "type": "number"
        -      },
        -      "preset": {
        -        "description": "The animation preset to apply. <ul>\n  <li>`typewriter` - typewriter effect where characters appear one at a time</li>\n</ul>",
        -        "enum": [
        -          "typewriter"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "preset"
        -    ],
        -    "type": "object"
        -  },
        -  "background": {
        -    "$ref": "#/$defs/TextBackground",
        -    "description": "Background styling properties."
        -  },
        -  "ellipsis": {
        -    "description": "The string to display when text overflows its bounding box. Set to an ellipsis character or custom string to indicate truncated text.",
        -    "type": "string"
        -  },
        -  "font": {
        -    "$ref": "#/$defs/TextFont",
        -    "description": "Font styling properties."
        -  },
        -  "height": {
        -    "description": "Set the width of the HTML asset bounding box in pixels. Text and elements will be masked if they exceed the  height of the bounding box.",
        -    "type": "integer"
        -  },
        -  "stroke": {
        -    "additionalProperties": false,
        -    "description": "Text stroke (outline) properties.",
        -    "properties": {
        -      "color": {
        -        "description": "The stroke color using hexadecimal color notation.",
        -        "pattern": "^#[A-Fa-f0-9]{6}$",
        -        "type": "string"
        -      },
        -      "width": {
        -        "description": "The width of the stroke in pixels.",
        -        "maximum": 10,
        -        "minimum": 0,
        -        "type": "number"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "text": {
        -    "description": "The text string to display.",
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "text",
        -    "description": "The type of asset - set to `text` for text.",
        -    "enum": [
        -      "text"
        -    ],
        -    "type": "string"
        -  },
        -  "width": {
        -    "description": "Set the width of the HTML asset bounding box in pixels. Text will wrap to fill the bounding box.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextAsset / required
        Removed value: -[
        -  "type",
        -  "text"
        -]
      • removedInput schema / properties / payload / $defs / TextAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextBackground / $ref
        Added value: +"#/$defs/TextBackground"
      • removedInput schema / properties / payload / $defs / TextBackground / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextBackground / description
        Removed value: -"Displays a background box behind the text."
      • removedInput schema / properties / payload / $defs / TextBackground / properties
        Removed value: -{
        -  "borderRadius": {
        -    "description": "The border radius of the background box in pixels for rounded corners.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "color": {
        -    "description": "The background color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "description": "The opacity of the background where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "padding": {
        -    "description": "Padding inside the background box in pixels.",
        -    "maximum": 100,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "wrap": {
        -    "description": "Not supported on legacy `text` assets. Accepted here only so validators can emit a clear migration error pointing users to `rich-text` or `rich-caption`, which support background wrapping natively.",
        -    "type": "boolean"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextBackground / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextFont / $ref
        Added value: +"#/$defs/TextFont"
      • removedInput schema / properties / payload / $defs / TextFont / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextFont / description
        Removed value: -"Font properties for text."
      • removedInput schema / properties / payload / $defs / TextFont / properties
        Removed value: -{
        -  "color": {
        -    "description": "The text color using hexadecimal color notation.",
        -    "type": "string"
        -  },
        -  "family": {
        -    "description": "The font family name. This must be Family name embedded in the font, i.e. \"Open Sans\".",
        -    "type": "string"
        -  },
        -  "lineHeight": {
        -    "description": "The line height of the font as a ratio of the font size.",
        -    "type": "number"
        -  },
        -  "opacity": {
        -    "description": "The opacity of the text where 1 is opaque and 0 is transparent.",
        -    "type": "number"
        -  },
        -  "size": {
        -    "description": "The size of the font in pixels (px).",
        -    "type": "integer"
        -  },
        -  "weight": {
        -    "description": "The weight of the font. 100 is lightest, 900 is heaviest (boldest).",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextFont / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextToImageAsset / $ref
        Added value: +"#/$defs/TextToImageAsset"
      • removedInput schema / properties / payload / $defs / TextToImageAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextToImageAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / TextToImageAsset / description
        Removed value: -"**Notice: TextToImageAsset is deprecated. Use [ImageAsset](#tocs_imageasset)\nwith `prompt` instead.** This type continues to function and is internally\nrewritten to ImageAsset; no behaviour change for existing integrations.\n\nThe TextToImageAsset lets you create a dynamic image from a text prompt.\n"
      • removedInput schema / properties / payload / $defs / TextToImageAsset / properties
        Removed value: -{
        -  "crop": {
        -    "$ref": "#/$defs/Crop"
        -  },
        -  "height": {
        -    "description": "The height of the image in pixels.",
        -    "type": "integer"
        -  },
        -  "prompt": {
        -    "description": "The text prompt to generate an image from.",
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "text-to-image",
        -    "description": "The type of asset to generate - set to `text-to-image` for text-to-image.",
        -    "enum": [
        -      "text-to-image"
        -    ],
        -    "type": "string"
        -  },
        -  "width": {
        -    "description": "The width of the image in pixels.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextToImageAsset / required
        Removed value: -[
        -  "type",
        -  "prompt"
        -]
      • removedInput schema / properties / payload / $defs / TextToImageAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextToSpeechAsset / $ref
        Added value: +"#/$defs/TextToSpeechAsset"
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / description
        Removed value: -"**Notice: TextToSpeechAsset is deprecated. Use [AudioAsset](#tocs_audioasset)\nwith `prompt` (the spoken text) and `voice` instead.** This type continues to\nfunction and is internally rewritten to AudioAsset; no behaviour change for\nexisting integrations.\n\nThe TextToSpeechAsset lets you generate a voice over from text using a text-to-speech service.\nThe generated audio can be trimmed, faded and have its volume and speed adjusted using the\nsame properties available on the AudioAsset.\n"
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / properties
        Removed value: -{
        -  "effect": {
        -    "description": "The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        -    "enum": [
        -      "none",
        -      "fadeIn",
        -      "fadeOut",
        -      "fadeInFadeOut"
        -    ],
        -    "type": "string"
        -  },
        -  "language": {
        -    "description": "The language code for the text-to-speech conversion.",
        -    "type": "string"
        -  },
        -  "newscaster": {
        -    "default": false,
        -    "description": "Set the voice to newscaster mode.",
        -    "type": "boolean"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the audio clip between 0 (paused) and 10 (10x normal speed), where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length.",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "text": {
        -    "description": "The text to convert to speech.",
        -    "type": "string"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the audio clip, in seconds (defaults to 0). Audio will start from the trim point. The audio will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "text-to-speech",
        -    "description": "The type of asset - set to `text-to-speech` for text-to-speech.",
        -    "enum": [
        -      "text-to-speech"
        -    ],
        -    "type": "string"
        -  },
        -  "voice": {
        -    "description": "The voice to use for the text-to-speech conversion.",
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions.",
        -    "oneOf": [
        -      {
        -        "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -        "format": "float",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / required
        Removed value: -[
        -  "type",
        -  "text",
        -  "voice"
        -]
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Thumbnail / $ref
        Added value: +"#/$defs/Thumbnail"
      • removedInput schema / properties / payload / $defs / Thumbnail / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Thumbnail / description
        Removed value: -"Generate a thumbnail image for the video or image at a specific point from the timeline."
      • removedInput schema / properties / payload / $defs / Thumbnail / properties
        Removed value: -{
        -  "capture": {
        -    "description": "The point on the timeline in seconds to capture a single frame to use as the thumbnail image.",
        -    "type": "number"
        -  },
        -  "scale": {
        -    "description": "Scale the thumbnail size to a fraction of the viewport size - i.e. setting the scale to 0.5 will scale  the thumbnail to half the size of the viewport.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Thumbnail / required
        Removed value: -[
        -  "capture",
        -  "scale"
        -]
      • removedInput schema / properties / payload / $defs / Thumbnail / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Timeline / $ref
        Added value: +"#/$defs/Timeline"
      • removedInput schema / properties / payload / $defs / Timeline / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Timeline / description
        Removed value: -"A timeline represents the contents of a video edit over time, an audio edit over time, in seconds, or an image layout. A timeline consists of layers called tracks. Tracks are composed of titles, images, audio, html or video segments referred to as clips which are placed along the track at specific starting point and lasting for a specific amount of time."
      • removedInput schema / properties / payload / $defs / Timeline / properties
        Removed value: -{
        -  "background": {
        -    "description": "A hexadecimal value for the timeline background colour. Defaults to #000000 (black).",
        -    "type": "string"
        -  },
        -  "cache": {
        -    "description": "Disable the caching of ingested source footage and assets. See  [caching](https://shotstack.io/docs/guide/architecting-an-application/caching/) for more details.",
        -    "type": "boolean"
        -  },
        -  "fonts": {
        -    "description": "An array of custom fonts to be downloaded for use by the HTML assets.",
        -    "items": {
        -      "$ref": "#/$defs/Font"
        -    },
        -    "type": "array"
        -  },
        -  "soundtrack": {
        -    "$ref": "#/$defs/Soundtrack",
        -    "deprecated": true,
        -    "description": "A music or audio soundtrack file in mp3 format. Deprecated - use an [AudioAsset](#tocs_audioasset) clip on its own track instead."
        -  },
        -  "tracks": {
        -    "description": "A timeline consists of an array of tracks, each track containing clips. Tracks are layered on top of each other in the same order they are added to the array with the top most track layered over the top of those below it. Ensure that a track containing titles is the top most track so that it is displayed above videos and images.",
        -    "items": {
        -      "$ref": "#/$defs/Track"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Timeline / required
        Removed value: -[
        -  "tracks"
        -]
      • removedInput schema / properties / payload / $defs / Timeline / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TitleAsset / $ref
        Added value: +"#/$defs/TitleAsset"
      • removedInput schema / properties / payload / $defs / TitleAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TitleAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / TitleAsset / description
        Removed value: -"**Notice: The TitleAsset is deprecated, use the [RichTextAsset](#tocs_richtextasset) instead.**\n\nThe TitleAsset clip type lets you create video titles from a text string and apply styling and positioning.\n"
      • removedInput schema / properties / payload / $defs / TitleAsset / properties
        Removed value: -{
        -  "background": {
        -    "description": "Apply a background color behind the text. Set the text color using hexadecimal color notation. Transparency is supported by setting the first two characters of the hex string (opposite to HTML),  i.e. #80ffffff will be white with 50% transparency. Omit to use transparent background.",
        -    "type": "string"
        -  },
        -  "color": {
        -    "description": "Set the text color using hexadecimal color notation. Transparency is supported by setting the first two characters of the hex string (opposite to HTML),  i.e. #80ffffff will be white with  50% transparency.",
        -    "type": "string"
        -  },
        -  "offset": {
        -    "$ref": "#/$defs/Offset",
        -    "description": "Offset the location of the title relative to its position on the screen."
        -  },
        -  "position": {
        -    "description": "Place the title in one of nine predefined positions of the viewport. <ul>\n  <li>`top` - top (center)</li>\n  <li>`topRight` - top right</li>\n  <li>`right` - right (center)</li>\n  <li>`bottomRight` - bottom right</li>\n  <li>`bottom` - bottom (center)</li>\n  <li>`bottomLeft` - bottom left</li>\n  <li>`left` - left (center)</li>\n  <li>`topLeft` - top left</li>\n  <li>`center` - center</li>\n</ul>",
        -    "enum": [
        -      "top",
        -      "topRight",
        -      "right",
        -      "bottomRight",
        -      "bottom",
        -      "bottomLeft",
        -      "left",
        -      "topLeft",
        -      "center"
        -    ],
        -    "type": "string"
        -  },
        -  "size": {
        -    "description": "Set the relative size of the text using predefined sizes from xx-small to xx-large. <ul>\n  <li>`xx-small`</li>\n  <li>`x-small`</li>\n  <li>`small`</li>\n  <li>`medium`</li>\n  <li>`large`</li>\n  <li>`x-large`</li>\n  <li>`xx-large`</li>\n</ul>",
        -    "enum": [
        -      "xx-small",
        -      "x-small",
        -      "small",
        -      "medium",
        -      "large",
        -      "x-large",
        -      "xx-large"
        -    ],
        -    "type": "string"
        -  },
        -  "style": {
        -    "description": "Uses a preset to apply font properties and styling to the title. <ul>\n  <li>`minimal`</li>\n  <li>`blockbuster`</li>\n  <li>`vogue`</li>\n  <li>`sketchy`</li>\n  <li>`skinny`</li>\n  <li>`chunk`</li>\n  <li>`chunkLight`</li>\n  <li>`marker`</li>\n  <li>`future`</li>\n  <li>`subtitle`</li>\n</ul>",
        -    "enum": [
        -      "minimal",
        -      "blockbuster",
        -      "vogue",
        -      "sketchy",
        -      "skinny",
        -      "chunk",
        -      "chunkLight",
        -      "marker",
        -      "future",
        -      "subtitle"
        -    ],
        -    "type": "string"
        -  },
        -  "text": {
        -    "description": "The title text string - i.e. \"My Title\".",
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "title",
        -    "description": "The type of asset - set to `title` for titles.",
        -    "enum": [
        -      "title"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TitleAsset / required
        Removed value: -[
        -  "type",
        -  "text"
        -]
      • removedInput schema / properties / payload / $defs / TitleAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Track / $ref
        Added value: +"#/$defs/Track"
      • removedInput schema / properties / payload / $defs / Track / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Track / description
        Removed value: -"A track contains an array of clips. Tracks are layered on top of each other in the order in the array. The top most track will render on top of those below it."
      • removedInput schema / properties / payload / $defs / Track / properties
        Removed value: -{
        -  "clips": {
        -    "description": "An array of Clips comprising of TitleClip, ImageClip or VideoClip.",
        -    "items": {
        -      "$ref": "#/$defs/Clip"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Track / required
        Removed value: -[
        -  "clips"
        -]
      • removedInput schema / properties / payload / $defs / Track / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Transformation / $ref
        Added value: +"#/$defs/Transformation"
      • removedInput schema / properties / payload / $defs / Transformation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Transformation / description
        Removed value: -"Apply one or more transformations to a clip. Transformations alter the visual properties of a clip and can be combined to create new shapes and effects."
      • removedInput schema / properties / payload / $defs / Transformation / properties
        Removed value: -{
        -  "flip": {
        -    "$ref": "#/$defs/FlipTransformation"
        -  },
        -  "rotate": {
        -    "$ref": "#/$defs/RotateTransformation"
        -  },
        -  "skew": {
        -    "$ref": "#/$defs/SkewTransformation"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Transformation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Transition / $ref
        Added value: +"#/$defs/Transition"
      • removedInput schema / properties / payload / $defs / Transition / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Transition / description
        Removed value: -"In and out transitions for a clip - i.e. fade in and fade out"
      • removedInput schema / properties / payload / $defs / Transition / properties
        Removed value: -{
        -  "in": {
        -    "description": "The transition in. Available transitions are:\n  <ul>\n    <li>`fade` - fade in</li>\n    <li>`reveal` - reveal from left to right</li>\n    <li>`wipeLeft` - fade across screen to the left</li>\n    <li>`wipeRight` - fade across screen to the right</li>\n    <li>`slideLeft` - move slightly left and fade in</li>\n    <li>`slideRight` - move slightly right and fade in</li>\n    <li>`slideUp` - move slightly up and fade in</li>\n    <li>`slideDown` - move slightly down and fade in</li>\n    <li>`carouselLeft` - slide in from right to left</li>\n    <li>`carouselRight` - slide in from left to right</li>\n    <li>`carouselUp` - slide in from bottom to top</li>\n    <li>`carouselDown` - slide in from top to bottom</li>\n    <li>`shuffleTopRight` - rotate in from top right</li>\n    <li>`shuffleRightTop` - rotate in from right top</li>\n    <li>`shuffleRightBottom` - rotate in from right bottom</li>\n    <li>`shuffleBottomRight` - rotate in from bottom right</li>\n    <li>`shuffleBottomLeft` - rotate in from bottom left</li>\n    <li>`shuffleLeftBottom` - rotate in from left bottom</li>\n    <li>`shuffleLeftTop` - rotate in from left top</li>\n    <li>`shuffleTopLeft` - rotate in from top left</li>\n    <li>`zoom` - fast zoom in</li>\n  </ul>\nThe transition speed can also be controlled by appending `Fast` or `Slow` to the transition, e.g. `fadeFast` or `CarouselLeftSlow`.",
        -    "enum": [
        -      "none",
        -      "fade",
        -      "fadeSlow",
        -      "fadeFast",
        -      "reveal",
        -      "revealSlow",
        -      "revealFast",
        -      "wipeLeft",
        -      "wipeLeftSlow",
        -      "wipeLeftFast",
        -      "wipeRight",
        -      "wipeRightSlow",
        -      "wipeRightFast",
        -      "slideLeft",
        -      "slideLeftSlow",
        -      "slideLeftFast",
        -      "slideRight",
        -      "slideRightSlow",
        -      "slideRightFast",
        -      "slideUp",
        -      "slideUpSlow",
        -      "slideUpFast",
        -      "slideDown",
        -      "slideDownSlow",
        -      "slideDownFast",
        -      "carouselLeft",
        -      "carouselLeftSlow",
        -      "carouselLeftFast",
        -      "carouselRight",
        -      "carouselRightSlow",
        -      "carouselRightFast",
        -      "carouselUp",
        -      "carouselUpSlow",
        -      "carouselUpFast",
        -      "carouselDown",
        -      "carouselDownSlow",
        -      "carouselDownFast",
        -      "shuffleTopRight",
        -      "shuffleTopRightSlow",
        -      "shuffleTopRightFast",
        -      "shuffleRightTop",
        -      "shuffleRightTopSlow",
        -      "shuffleRightTopFast",
        -      "shuffleRightBottom",
        -      "shuffleRightBottomSlow",
        -      "shuffleRightBottomFast",
        -      "shuffleBottomRight",
        -      "shuffleBottomRightSlow",
        -      "shuffleBottomRightFast",
        -      "shuffleBottomLeft",
        -      "shuffleBottomLeftSlow",
        -      "shuffleBottomLeftFast",
        -      "shuffleLeftBottom",
        -      "shuffleLeftBottomSlow",
        -      "shuffleLeftBottomFast",
        -      "shuffleLeftTop",
        -      "shuffleLeftTopSlow",
        -      "shuffleLeftTopFast",
        -      "shuffleTopLeft",
        -      "shuffleTopLeftSlow",
        -      "shuffleTopLeftFast",
        -      "zoom"
        -    ],
        -    "type": "string"
        -  },
        -  "out": {
        -    "description": "The transition out. Available transitions are:\n  <ul>\n    <li>`fade` - fade out</li>\n    <li>`reveal` - reveal from right to left</li>\n    <li>`wipeLeft` - fade across screen to the left</li>\n    <li>`wipeRight` - fade across screen to the right</li>\n    <li>`slideLeft` - move slightly left and fade out</li>\n    <li>`slideRight` - move slightly right and fade out</li>\n    <li>`slideUp` - move slightly up and fade out</li>\n    <li>`slideDown` - move slightly down and fade out</li>\n    <li>`carouselLeft` - slide out from right to left</li>\n    <li>`carouselRight` - slide out from left to right</li>\n    <li>`carouselUp` - slide out from bottom to top</li>\n    <li>`carouselDown` - slide out from top  to bottom</li>\n    <li>`shuffleTopRight` - rotate out from top right</li>\n    <li>`shuffleRightTop` - rotate out from right top</li>\n    <li>`shuffleRightBottom` - rotate out from right bottom</li>\n    <li>`shuffleBottomRight` - rotate out from bottom right</li>\n    <li>`shuffleBottomLeft` - rotate out from bottom left</li>\n    <li>`shuffleLeftBottom` - rotate out from left bottom</li>\n    <li>`shuffleLeftTop` - rotate out from left top</li>\n    <li>`shuffleTopLeft` - rotate out from top left</li>\n    <li>`zoom` - fast zoom out</li>\n  </ul>\nThe transition speed can also be controlled by appending `Fast` or `Slow` to the transition, e.g. `fadeFast` or `CarouselLeftSlow`.",
        -    "enum": [
        -      "none",
        -      "fade",
        -      "fadeSlow",
        -      "fadeFast",
        -      "reveal",
        -      "revealSlow",
        -      "revealFast",
        -      "wipeLeft",
        -      "wipeLeftSlow",
        -      "wipeLeftFast",
        -      "wipeRight",
        -      "wipeRightSlow",
        -      "wipeRightFast",
        -      "slideLeft",
        -      "slideLeftSlow",
        -      "slideLeftFast",
        -      "slideRight",
        -      "slideRightSlow",
        -      "slideRightFast",
        -      "slideUp",
        -      "slideUpSlow",
        -      "slideUpFast",
        -      "slideDown",
        -      "slideDownSlow",
        -      "slideDownFast",
        -      "carouselLeft",
        -      "carouselLeftSlow",
        -      "carouselLeftFast",
        -      "carouselRight",
        -      "carouselRightSlow",
        -      "carouselRightFast",
        -      "carouselUp",
        -      "carouselUpSlow",
        -      "carouselUpFast",
        -      "carouselDown",
        -      "carouselDownSlow",
        -      "carouselDownFast",
        -      "shuffleTopRight",
        -      "shuffleTopRightSlow",
        -      "shuffleTopRightFast",
        -      "shuffleRightTop",
        -      "shuffleRightTopSlow",
        -      "shuffleRightTopFast",
        -      "shuffleRightBottom",
        -      "shuffleRightBottomSlow",
        -      "shuffleRightBottomFast",
        -      "shuffleBottomRight",
        -      "shuffleBottomRightSlow",
        -      "shuffleBottomRightFast",
        -      "shuffleBottomLeft",
        -      "shuffleBottomLeftSlow",
        -      "shuffleBottomLeftFast",
        -      "shuffleLeftBottom",
        -      "shuffleLeftBottomSlow",
        -      "shuffleLeftBottomFast",
        -      "shuffleLeftTop",
        -      "shuffleLeftTopSlow",
        -      "shuffleLeftTopFast",
        -      "shuffleTopLeft",
        -      "shuffleTopLeftSlow",
        -      "shuffleTopLeftFast",
        -      "zoom"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Transition / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Tween / $ref
        Added value: +"#/$defs/Tween"
      • removedInput schema / properties / payload / $defs / Tween / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Tween / description
        Removed value: -"Use a Tween to [animate properties over time](/docs/guide/architecting-an-application/animations/). The following properties are currently supported and can be animated:\n  <ul>\n    <li>Opacity - animate the transparency of a clip.</li>\n    <li>Offset - animate the x and y position of a clip.</li>\n    <li>Rotation - animate the rotation of a clip.</li>\n    <li>Skew - animate the horizontal and vertical shearing effect.</li>\n    <li>Volume - animate the audio volume of a clip.</li>\n  </ul>"
      • removedInput schema / properties / payload / $defs / Tween / properties
        Removed value: -{
        -  "easing": {
        -    "description": "The easing function to use for the animation. Easing controls the rate of change of the animated value, allowing for more natural motion by speeding up or slowing down the animation at different points. Only applicable if interpolation is set to `bezier`.",
        -    "enum": [
        -      "ease",
        -      "easeIn",
        -      "easeOut",
        -      "easeInOut",
        -      "easeInQuad",
        -      "easeInCubic",
        -      "easeInQuart",
        -      "easeInQuint",
        -      "easeInSine",
        -      "easeInExpo",
        -      "easeInCirc",
        -      "easeInBack",
        -      "easeOutQuad",
        -      "easeOutCubic",
        -      "easeOutQuart",
        -      "easeOutQuint",
        -      "easeOutSine",
        -      "easeOutExpo",
        -      "easeOutCirc",
        -      "easeOutBack",
        -      "easeInOutQuad",
        -      "easeInOutCubic",
        -      "easeInOutQuart",
        -      "easeInOutQuint",
        -      "easeInOutSine",
        -      "easeInOutExpo",
        -      "easeInOutCirc",
        -      "easeInOutBack"
        -    ],
        -    "type": "string"
        -  },
        -  "from": {
        -    "description": "The initial property value at the start of the animation."
        -  },
        -  "interpolation": {
        -    "description": "The interpolation method to use for the animation. Available options are: <ul>\n  <li>`linear` - a linear interpolation between the start and end values.</li>\n  <li>`bezier` - a bezier curve interpolation between the start and end values.</li>\n  <li>`constant` - an interpolation where the property instantly jumps from the start to the end value, without any gradual transition.</li>\n</ul>",
        -    "enum": [
        -      "linear",
        -      "bezier",
        -      "constant"
        -    ],
        -    "type": "string"
        -  },
        -  "length": {
        -    "description": "The duration of the animation in seconds.",
        -    "type": "number"
        -  },
        -  "start": {
        -    "description": "The time in seconds when the animation starts, relative to the clip, not the timeline.",
        -    "type": "number"
        -  },
        -  "to": {
        -    "description": "The final property value at the end of the animation."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Tween / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VideoAsset / $ref
        Added value: +"#/$defs/VideoAsset"
      • removedInput schema / properties / payload / $defs / VideoAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / VideoAsset / description
        Removed value: -"The VideoAsset adds a video to a Clip. The video can be sourced from a URL\n(`src`), generated from a text prompt (`prompt`), or both. At least one of\n`src` or `prompt` must be provided.\n\n- **Source URL:** set `src` to the URL of an mp4 (or compatible) video file.\n- **Generated:** set `prompt` to describe the motion. Choose a generator\n  with `model` and configure it with model-specific `options`. Models that\n  animate an image take it as `options.startSrc` (the original\n  image-to-video models use `options.inputSrc`); the default model\n  generates from the prompt alone. The generated `src` is filled in\n  automatically.\n- **Both:** `src` acts as a preview placeholder while `prompt` drives\n  generation — the video is regenerated from the prompt at render time.\n  Unchanged prompts and options resolve from the generation cache.\n"
      • removedInput schema / properties / payload / $defs / VideoAsset / properties
        Removed value: -{
        -  "chromaKey": {
        -    "$ref": "#/$defs/ChromaKey"
        -  },
        -  "crop": {
        -    "$ref": "#/$defs/Crop"
        -  },
        -  "model": {
        -    "description": "The generation model to use when `prompt` is set (e.g. `seedance-2.0-text-to-video`). Defaults to `seedance-2.0-text-to-video` if omitted. `GET /models` lists what is available and the options each accepts.",
        -    "type": "string"
        -  },
        -  "options": {
        -    "additionalProperties": true,
        -    "description": "Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.",
        -    "type": "object"
        -  },
        -  "prompt": {
        -    "description": "A text prompt to generate the video from. The engine generates a video at render time and fills `src` automatically; an existing `src` is treated as a preview placeholder and replaced. Use `model` to choose the generator and `options` to configure it. A starting image goes in `options.startSrc` — or `options.inputSrc` on the original image-to-video models — on the models that accept one.",
        -    "maxLength": 4000,
        -    "type": "string"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the video clip. Use a number for a constant speed or an array of [Tween](./#tocs_tween) objects to change speed over time, for example easing from normal speed up to 3x.",
        -    "oneOf": [
        -      {
        -        "description": "The playback speed between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire video (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire video (i.e. original length / 2).",
        -        "format": "float",
        -        "maximum": 10,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects that change the playback speed over time. A speed of 0 holds the current frame. The clip length is not adjusted, so set it to cover the footage you want to play.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "src": {
        -    "description": "The video source URL. The URL must be publicly accessible or include credentials. When `prompt` is also set, `src` serves as a preview placeholder and the video is regenerated from the prompt at render time.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "transcode": {
        -    "description": "Set to `true` to force re-encoding of the video during preprocessing. This can help resolve compatibility issues, fix rotation problems, synchronize audio, or convert formats. The video will be processed to ensure optimal compatibility with the rendering engine.",
        -    "type": "boolean"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the video clip, in seconds (defaults to 0). Videos will start from the in trim point. The video will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "video",
        -    "description": "The type of asset - set to `video` for videos.",
        -    "enum": [
        -      "video"
        -    ],
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Set the volume of the video clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions.",
        -    "oneOf": [
        -      {
        -        "description": "The volume level for the video clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -        "format": "float",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "volumeEffect": {
        -    "description": "Preset volume effects to apply to the video asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        -    "enum": [
        -      "none",
        -      "fadeIn",
        -      "fadeOut",
        -      "fadeInFadeOut"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VideoAsset / required
        Removed value: -[
        -  "type"
        -]
      • removedInput schema / properties / payload / $defs / VideoAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VimeoDestination / $ref
        Added value: +"#/$defs/VimeoDestination"
      • removedInput schema / properties / payload / $defs / VimeoDestination / description
        Removed value: -"Send videos to [Vimeo](https://shotstack.io/docs/guide/serving-assets/destinations/vimeo/) video hosting and streaming service. Vimeo credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/vimeo), not in the request."
      • removedInput schema / properties / payload / $defs / VimeoDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/VimeoDestinationOptions",
        -    "description": "Additional Vimeo configuration and features."
        -  },
        -  "provider": {
        -    "default": "vimeo",
        -    "description": "The destination to send video to - set to `vimeo` for Vimeo.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VimeoDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / VimeoDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VimeoDestinationOptions / $ref
        Added value: +"#/$defs/VimeoDestinationOptions"
      • removedInput schema / properties / payload / $defs / VimeoDestinationOptions / description
        Removed value: -"Pass additional options to control how Vimeo publishes video, including name, description and privacy settings."
      • removedInput schema / properties / payload / $defs / VimeoDestinationOptions / properties
        Removed value: -{
        -  "description": {
        -    "description": "A description of the video that will be displayed on the Vimeo website.",
        -    "type": "string"
        -  },
        -  "folderUri": {
        -    "description": "The Vimeo folder URI to upload the video to. The folder must already exist in your Vimeo account.",
        -    "type": "string"
        -  },
        -  "name": {
        -    "description": "A name or title for the video that will be displayed on the Vimeo website.",
        -    "type": "string"
        -  },
        -  "privacy": {
        -    "$ref": "#/$defs/VimeoDestinationPrivacyOptions",
        -    "description": "Options to control the visibility of videos and privacy features."
        -  }
        -}
      • addedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / $ref
        Added value: +"#/$defs/VimeoDestinationPrivacyOptions"
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / description
        Removed value: -"Options to control the visibility of videos and privacy features."
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / properties
        Removed value: -{
        -  "add": {
        -    "description": "Set whether other users can add the video to their collections.",
        -    "type": "boolean"
        -  },
        -  "comments": {
        -    "description": "Set who can comment on the video. Available options are: <ul>\n  <li>`anybody` - Anyone can comment on the video.</li>\n  <li>`nobody` - Only the video owner can comment on the video.</li>\n  <li>`contacts` - Only contacts can comment on the video.</li>\n</ul>",
        -    "enum": [
        -      "anybody",
        -      "nobody",
        -      "contacts"
        -    ],
        -    "type": "string"
        -  },
        -  "download": {
        -    "description": "Set whether the video can be downloaded.",
        -    "type": "boolean"
        -  },
        -  "embed": {
        -    "description": "Set who can embed the video. Available options are: <ul>\n  <li>`public` - Anyone can embed the video.</li>\n  <li>`private` - Only the video owner can embed the video.</li>\n  <li>`whitelist` - Only whitelisted domains can embed the video.</li>\n</ul>",
        -    "enum": [
        -      "public",
        -      "private",
        -      "whitelist"
        -    ],
        -    "type": "string"
        -  },
        -  "view": {
        -    "description": "Set who can view the videos. Available options are: <ul>\n  <li>`anybody` - Anyone can view the video.</li>\n  <li>`nobody` - Only the video owner can view the video.</li>\n  <li>`contacts` - Only contacts can view the video.</li>\n  <li>`password` - A password is required to view the video.</li>\n  <li>`unlisted` - The video is not listed on Vimeo.</li>\n</ul>",
        -    "enum": [
        -      "anybody",
        -      "nobody",
        -      "contacts",
        -      "password",
        -      "unlisted"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / type
        Removed value: -"object"
      • addedInput schema / properties / payload / properties / callback / $ref
        Added value: +"#/$defs/callback"
      • removedInput schema / properties / payload / properties / callback / description
        Removed value: -"An optional webhook callback URL used to receive status notifications when a render completes or fails. Notifications are also sent when a rendered video is sent to an output  [destination](https://shotstack.io/docs/guide/serving-assets/destinations/).\nSee [webhooks](https://shotstack.io/docs/guide/architecting-an-application/webhooks/) for more details."
      • removedInput schema / properties / payload / properties / callback / type
        Removed value: -"string"
      • addedInput schema / properties / payload / properties / disk / $ref
        Added value: +"#/$defs/disk"
      • removedInput schema / properties / payload / properties / disk / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / properties / disk / description
        Removed value: -"**Notice: This option is now deprecated and will be removed. Disk types are handled automatically. Setting a disk type has no effect.**\n\nThe disk type to use for storing footage and assets for each render.\n<ul>\n  <li>`local` - optimized for high speed rendering with up to 512MB storage</li>\n  <li>`mount` - optimized for larger file sizes and longer videos with 5GB for source footage and 512MB for output render</li>\n</ul>\n"
      • removedInput schema / properties / payload / properties / disk / enum
        Removed value: -[
        -  "local",
        -  "mount"
        -]
      • removedInput schema / properties / payload / properties / disk / type
        Removed value: -"string"
      • addedInput schema / properties / payload / properties / instance / $ref
        Added value: +"#/$defs/instance"
      • removedInput schema / properties / payload / properties / instance / default
        Removed value: -"s1"
      • removedInput schema / properties / payload / properties / instance / description
        Removed value: -"The render instance type to use for processing the edit. <ul>\n  <li>`s1` - standard instance (default)</li>\n  <li>`s2` - standard instance with more resources</li>\n  <li>`a1` - accelerated instance for faster rendering</li>\n</ul>"
      • removedInput schema / properties / payload / properties / instance / enum
        Removed value: -[
        -  "s1",
        -  "s2",
        -  "a1"
        -]
      • removedInput schema / properties / payload / properties / instance / type
        Removed value: -"string"
      • addedInput schema / properties / payload / properties / merge / $ref
        Added value: +"#/$defs/merge"
      • removedInput schema / properties / payload / properties / merge / description
        Removed value: -"An array of key/value pairs that provides an easy way to create templates with placeholders. The placeholders can be used to find and replace keys with values. For example you can search for the placeholder `{{NAME}}` and replace it with the value `Jane`. "
      • removedInput schema / properties / payload / properties / merge / items
        Removed value: -{
        -  "$ref": "#/$defs/MergeField"
        -}
      • removedInput schema / properties / payload / properties / merge / type
        Removed value: -"array"
    • Changedrender_template16 fields changed
      • addedInput schema / $defs / merge
        Added value: +{
        +  "description": "An array of key/value pairs that provides an easy way to create templates with placeholders. The placeholders can be used to find and replace keys with values. For example you can search for the placeholder `{{NAME}}` and replace it with the value `Jane`. ",
        +  "items": {
        +    "$ref": "#/$defs/MergeField"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / confirm / description
        Previous value: -"Must be true for this exact requested render, generation, mutation, upload URL or deletion."New value: +"Set true only when the user asked for exactly this action."
      • addedInput schema / properties / merge / $ref
        Added value: +"#/$defs/merge"
      • removedInput schema / properties / merge / description
        Removed value: -"An array of key/value pairs that provides an easy way to create templates with placeholders. The placeholders can be used to find and replace keys with values. For example you can search for the placeholder `{{NAME}}` and replace it with the value `Jane`. "
      • removedInput schema / properties / merge / items
        Removed value: -{
        -  "$ref": "#/$defs/MergeField"
        -}
      • removedInput schema / properties / merge / type
        Removed value: -"array"
      • addedInput schema / properties / payload / $defs / MergeField / $ref
        Added value: +"#/$defs/MergeField"
      • removedInput schema / properties / payload / $defs / MergeField / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / MergeField / description
        Removed value: -"A merge field consists of a key; `find`, and a value; `replace`. Merge fields can be used to replace placeholders within the JSON edit to create re-usable templates. Placeholders should be a string with double brace delimiters, i.e. `\"{{NAME}}\"`. A placeholder can be used for any value within the JSON edit."
      • removedInput schema / properties / payload / $defs / MergeField / properties
        Removed value: -{
        -  "find": {
        -    "description": "The string to find <u>without</u> delimiters.",
        -    "type": "string"
        -  },
        -  "replace": {
        -    "description": "The replacement value. The replacement can be any valid JSON type - string, boolean, number, etc..."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / MergeField / required
        Removed value: -[
        -  "find",
        -  "replace"
        -]
      • removedInput schema / properties / payload / $defs / MergeField / type
        Removed value: -"object"
      • addedInput schema / properties / payload / properties / merge / $ref
        Added value: +"#/$defs/merge"
      • removedInput schema / properties / payload / properties / merge / description
        Removed value: -"An array of key/value pairs that provides an easy way to create templates with placeholders. The placeholders can be used to find and replace keys with values. For example you can search for the placeholder `{{NAME}}` and replace it with the value `Jane`. "
      • removedInput schema / properties / payload / properties / merge / items
        Removed value: -{
        -  "$ref": "#/$defs/MergeField"
        -}
      • removedInput schema / properties / payload / properties / merge / type
        Removed value: -"array"
    • Changedtransfer_asset71 fields changed
      • changedInput schema / $defs / Destinations / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/ShotstackDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/MuxDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/S3Destination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleCloudStorageDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleDriveDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/VimeoDestination"
        -  },
        -  {
        -    "deprecated": true,
        -    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        -    "properties": {
        -      "options": {
        -        "deprecated": true,
        -        "description": "Additional TikTok configuration options.",
        -        "properties": {
        -          "disableComment": {
        -            "default": false,
        -            "description": "Disable comments on this video.",
        -            "type": "boolean"
        -          },
        -          "disableDuet": {
        -            "default": false,
        -            "description": "Disable the Duet feature for this video.",
        -            "type": "boolean"
        -          },
        -          "disableStitch": {
        -            "default": false,
        -            "description": "Disable the Stitch feature for this video.",
        -            "type": "boolean"
        -          },
        -          "privacyLevel": {
        -            "default": "private",
        -            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        -            "enum": [
        -              "public",
        -              "friends",
        -              "private"
        -            ],
        -            "type": "string"
        -          },
        -          "title": {
        -            "description": "A title for the video that will be displayed on TikTok.",
        -            "maxLength": 150,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "provider": {
        -        "default": "tiktok",
        -        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Akamai NetStorage configuration options.",
        -        "properties": {
        -          "cpCode": {
        -            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "host": {
        -            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        -            "type": "string"
        -          },
        -          "path": {
        -            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "host",
        -          "cpCode"
        -        ]
        -      },
        -      "provider": {
        -        "default": "akamai-netstorage",
        -        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Azure Blob Storage configuration options.",
        -        "properties": {
        -          "accountName": {
        -            "description": "The Azure Storage account name.",
        -            "type": "string"
        -          },
        -          "container": {
        -            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "prefix": {
        -            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "accountName",
        -          "container"
        -        ]
        -      },
        -      "provider": {
        -        "default": "azure-blob-storage",
        -        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/ShotstackDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/MuxDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/S3Destination"
        +  },
        +  {
        +    "$ref": "#/$defs/GoogleCloudStorageDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/GoogleDriveDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/VimeoDestination"
        +  },
        +  {
        +    "deprecated": true,
        +    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        +    "properties": {
        +      "options": {
        +        "deprecated": true,
        +        "description": "Additional TikTok configuration options.",
        +        "properties": {
        +          "disableComment": {
        +            "default": false,
        +            "description": "Disable comments on this video.",
        +            "type": "boolean"
        +          },
        +          "disableDuet": {
        +            "default": false,
        +            "description": "Disable the Duet feature for this video.",
        +            "type": "boolean"
        +          },
        +          "disableStitch": {
        +            "default": false,
        +            "description": "Disable the Stitch feature for this video.",
        +            "type": "boolean"
        +          },
        +          "privacyLevel": {
        +            "default": "private",
        +            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        +            "enum": [
        +              "public",
        +              "friends",
        +              "private"
        +            ],
        +            "type": "string"
        +          },
        +          "title": {
        +            "description": "A title for the video that will be displayed on TikTok.",
        +            "maxLength": 150,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "provider": {
        +        "default": "tiktok",
        +        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        +    "properties": {
        +      "options": {
        +        "description": "Additional Akamai NetStorage configuration options.",
        +        "properties": {
        +          "cpCode": {
        +            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        +            "type": "string"
        +          },
        +          "filename": {
        +            "$ref": "#/$defs/filename"
        +          },
        +          "host": {
        +            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        +            "type": "string"
        +          },
        +          "path": {
        +            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "host",
        +          "cpCode"
        +        ]
        +      },
        +      "provider": {
        +        "default": "akamai-netstorage",
        +        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        +    "properties": {
        +      "options": {
        +        "description": "Additional Azure Blob Storage configuration options.",
        +        "properties": {
        +          "accountName": {
        +            "description": "The Azure Storage account name.",
        +            "type": "string"
        +          },
        +          "container": {
        +            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        +            "type": "string"
        +          },
        +          "filename": {
        +            "$ref": "#/$defs/filename"
        +          },
        +          "prefix": {
        +            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "accountName",
        +          "container"
        +        ]
        +      },
        +      "provider": {
        +        "default": "azure-blob-storage",
        +        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / S3DestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / S3DestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / S3DestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / filename
        Added value: +{
        +  "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / $defs / filename_2
        Added value: +{
        +  "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        +  "type": "string"
        +}
      • changedInput schema / properties / confirm / description
        Previous value: -"Must be true for this exact requested render, generation, mutation, upload URL or deletion."New value: +"Set true only when the user asked for exactly this action."
      • addedInput schema / properties / payload / $defs / Destinations / $ref
        Added value: +"#/$defs/Destinations"
      • removedInput schema / properties / payload / $defs / Destinations / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Destinations / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/ShotstackDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/MuxDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/S3Destination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleCloudStorageDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleDriveDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/VimeoDestination"
        -  },
        -  {
        -    "deprecated": true,
        -    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        -    "properties": {
        -      "options": {
        -        "deprecated": true,
        -        "description": "Additional TikTok configuration options.",
        -        "properties": {
        -          "disableComment": {
        -            "default": false,
        -            "description": "Disable comments on this video.",
        -            "type": "boolean"
        -          },
        -          "disableDuet": {
        -            "default": false,
        -            "description": "Disable the Duet feature for this video.",
        -            "type": "boolean"
        -          },
        -          "disableStitch": {
        -            "default": false,
        -            "description": "Disable the Stitch feature for this video.",
        -            "type": "boolean"
        -          },
        -          "privacyLevel": {
        -            "default": "private",
        -            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        -            "enum": [
        -              "public",
        -              "friends",
        -              "private"
        -            ],
        -            "type": "string"
        -          },
        -          "title": {
        -            "description": "A title for the video that will be displayed on TikTok.",
        -            "maxLength": 150,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "provider": {
        -        "default": "tiktok",
        -        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Akamai NetStorage configuration options.",
        -        "properties": {
        -          "cpCode": {
        -            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "host": {
        -            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        -            "type": "string"
        -          },
        -          "path": {
        -            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "host",
        -          "cpCode"
        -        ]
        -      },
        -      "provider": {
        -        "default": "akamai-netstorage",
        -        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Azure Blob Storage configuration options.",
        -        "properties": {
        -          "accountName": {
        -            "description": "The Azure Storage account name.",
        -            "type": "string"
        -          },
        -          "container": {
        -            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "prefix": {
        -            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "accountName",
        -          "container"
        -        ]
        -      },
        -      "provider": {
        -        "default": "azure-blob-storage",
        -        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / payload / $defs / Destinations / description
        Removed value: -"A destination is a location where assets can be sent to for serving or hosting. Videos, images and audio files that are rendered by the [Edit API](#shotstack-edit) and [source](#tocs_source) and [rendition](#tocs_rendition) files generated by the [Ingest API](#shotstack-ingest) can be sent to destinations. You can also fetch a file from any public URL and [transfer](#transfer-asset) it to a destination. A file can be sent to one or more destinations including 3rd party destinations.\n\nBy default all ingested and generated assets are automatically sent to the [Shotstack hosting destination](https://shotstack.io/docs/guide/serving-assets/hosting/). You can [opt-out](https://shotstack.io/docs/guide/serving-assets/self-host/) from by setting the Shotstack destination **exclude** property to **true**."
      • removedInput schema / properties / payload / $defs / Destinations / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / $ref
        Added value: +"#/$defs/GoogleCloudStorageDestination"
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / description
        Removed value: -"Send videos and assets to a [Google Cloud Storage](https://cloud.google.com/storage) bucket. Send files with your own prefix and filename. Google Cloud credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/google-cloud-storage), not in the request."
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/GoogleCloudStorageDestinationOptions",
        -    "description": "Additional Google Cloud Storage configuration options."
        -  },
        -  "provider": {
        -    "default": "google-cloud-storage",
        -    "description": "The destination to send assets to - set to `google-cloud-storage` for Google Cloud Storage.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / $ref
        Added value: +"#/$defs/GoogleCloudStorageDestinationOptions"
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / description
        Removed value: -"Pass additional options to control how files are stored in Google Cloud Storage."
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / properties
        Removed value: -{
        -  "bucket": {
        -    "description": "The bucket name to send files to. The bucket must exist in the Google Cloud Storage account before files can be sent.",
        -    "type": "string"
        -  },
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "prefix": {
        -    "description": "A prefix for the file being sent. This is typically a folder name, i.e. `videos` or `customerId/videos`.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / required
        Removed value: -[
        -  "bucket"
        -]
      • addedInput schema / properties / payload / $defs / GoogleDriveDestination / $ref
        Added value: +"#/$defs/GoogleDriveDestination"
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / description
        Removed value: -"Send rendered videos and assets to the [Google Drive](https://shotstack.io/docs/guide/serving-assets/destinations/google-drive/) cloud storage service. Google Drive uses OAuth and you must authenticate and link your Google account via  [dashboard](https://dashboard.shotstack.io/integrations/google-drive), not in the request."
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/GoogleDriveDestinationOptions",
        -    "description": "Additional Google Drive configuration and features. If omitted, files are saved to the root of My Drive using the default Shotstack filename."
        -  },
        -  "provider": {
        -    "default": "google-drive",
        -    "description": "The destination to send assets to - set to `google-drive` for Google Drive.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / $ref
        Added value: +"#/$defs/GoogleDriveDestinationOptions"
      • removedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / description
        Removed value: -"Pass the folder ID and options to configure how assets are stored in Google Drive."
      • removedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / properties
        Removed value: -{
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "folderId": {
        -    "description": "The Google Drive folder ID where the asset will be stored. If omitted, the asset is saved to the root of My Drive. The folder ID can be retrieved from the URL when logged in to Google Drive, e.g. <a href=\"#\">https://drive.google.com/drive/u/0/folders/1r-eTY6OLO8tzQRKwMyq-fIrQ_7AJEI6A</a>.",
        -    "type": "string"
        -  }
        -}
      • addedInput schema / properties / payload / $defs / MuxDestination / $ref
        Added value: +"#/$defs/MuxDestination"
      • removedInput schema / properties / payload / $defs / MuxDestination / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / MuxDestination / description
        Removed value: -"**Notice: The Mux destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to the [Mux](https://www.mux.com/docs) video hosting and streaming service. Mux credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/mux), not in the request."
      • removedInput schema / properties / payload / $defs / MuxDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/MuxDestinationOptions",
        -    "description": "Additional Mux configuration and features."
        -  },
        -  "provider": {
        -    "default": "mux",
        -    "description": "The destination to send video to - set to `mux` for Mux.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / MuxDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / MuxDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / MuxDestinationOptions / $ref
        Added value: +"#/$defs/MuxDestinationOptions"
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / description
        Removed value: -"**Notice: MuxDestinationOptions, like the Mux destination, is deprecated.** It continues to work, with no behaviour change for existing integrations.\nPass additional options to control how Mux processes video. Currently supports playback_policy and passthrough options."
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / properties
        Removed value: -{
        -  "passthrough": {
        -    "description": "Sets the Mux `passthrough` option. Max 255 characters.",
        -    "maxLength": 255,
        -    "type": "string"
        -  },
        -  "playbackPolicy": {
        -    "description": "Sets the Mux `playback_policy` option. Value is an array of strings - use `public`, `signed`, or both.",
        -    "items": {
        -      "enum": [
        -        "public",
        -        "signed"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  }
        -}
      • addedInput schema / properties / payload / $defs / S3Destination / $ref
        Added value: +"#/$defs/S3Destination"
      • removedInput schema / properties / payload / $defs / S3Destination / description
        Removed value: -"Send videos and assets to an [Amazon S3](https://shotstack.io/docs/guide/serving-assets/destinations/s3/) bucket. Send files to any region with your own prefix and filename. AWS credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/s3), not in the request."
      • removedInput schema / properties / payload / $defs / S3Destination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/S3DestinationOptions",
        -    "description": "Additional S3 configuration options."
        -  },
        -  "provider": {
        -    "default": "s3",
        -    "description": "The destination to send assets to - set to `s3` for S3.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / S3Destination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / S3Destination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / S3DestinationOptions / $ref
        Added value: +"#/$defs/S3DestinationOptions"
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / description
        Removed value: -"Pass additional options to control how files are stored in S3."
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / properties
        Removed value: -{
        -  "acl": {
        -    "description": "Sets the S3 Access Control List (acl) permissions. Default is `private`. Must use a valid  S3 [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl).",
        -    "type": "string"
        -  },
        -  "bucket": {
        -    "description": "The bucket name to send files to. The bucket must exist in the AWS account before files can be sent.",
        -    "type": "string"
        -  },
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "prefix": {
        -    "description": "A prefix for the file being sent. This is typically a folder name, i.e. `videos` or `customerId/videos`.",
        -    "type": "string"
        -  },
        -  "region": {
        -    "description": "Choose the region to send the file to. Must be a valid  [AWS region](https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_region) string like `us-east-1` or `ap-southeast-2`.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / required
        Removed value: -[
        -  "region",
        -  "bucket"
        -]
      • addedInput schema / properties / payload / $defs / ShotstackDestination / $ref
        Added value: +"#/$defs/ShotstackDestination"
      • removedInput schema / properties / payload / $defs / ShotstackDestination / description
        Removed value: -"Send videos and assets to the  [Shotstack hosting and CDN](https://shotstack.io/docs/guide/serving-assets/destinations/shotstack/) service.  This destination is enabled by default."
      • removedInput schema / properties / payload / $defs / ShotstackDestination / properties
        Removed value: -{
        -  "exclude": {
        -    "description": "Set to `true` to [opt-out](https://shotstack.io/docs/guide/serving-assets/self-host/) from the Shotstack hosting and CDN service. All files must be downloaded within 24 hours of rendering.",
        -    "type": "boolean"
        -  },
        -  "provider": {
        -    "default": "shotstack",
        -    "description": "The destination to send assets to - set to `shotstack` for Shotstack hosting and CDN.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ShotstackDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / ShotstackDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VimeoDestination / $ref
        Added value: +"#/$defs/VimeoDestination"
      • removedInput schema / properties / payload / $defs / VimeoDestination / description
        Removed value: -"Send videos to [Vimeo](https://shotstack.io/docs/guide/serving-assets/destinations/vimeo/) video hosting and streaming service. Vimeo credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/vimeo), not in the request."
      • removedInput schema / properties / payload / $defs / VimeoDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/VimeoDestinationOptions",
        -    "description": "Additional Vimeo configuration and features."
        -  },
        -  "provider": {
        -    "default": "vimeo",
        -    "description": "The destination to send video to - set to `vimeo` for Vimeo.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VimeoDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / VimeoDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VimeoDestinationOptions / $ref
        Added value: +"#/$defs/VimeoDestinationOptions"
      • removedInput schema / properties / payload / $defs / VimeoDestinationOptions / description
        Removed value: -"Pass additional options to control how Vimeo publishes video, including name, description and privacy settings."
      • removedInput schema / properties / payload / $defs / VimeoDestinationOptions / properties
        Removed value: -{
        -  "description": {
        -    "description": "A description of the video that will be displayed on the Vimeo website.",
        -    "type": "string"
        -  },
        -  "folderUri": {
        -    "description": "The Vimeo folder URI to upload the video to. The folder must already exist in your Vimeo account.",
        -    "type": "string"
        -  },
        -  "name": {
        -    "description": "A name or title for the video that will be displayed on the Vimeo website.",
        -    "type": "string"
        -  },
        -  "privacy": {
        -    "$ref": "#/$defs/VimeoDestinationPrivacyOptions",
        -    "description": "Options to control the visibility of videos and privacy features."
        -  }
        -}
      • addedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / $ref
        Added value: +"#/$defs/VimeoDestinationPrivacyOptions"
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / description
        Removed value: -"Options to control the visibility of videos and privacy features."
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / properties
        Removed value: -{
        -  "add": {
        -    "description": "Set whether other users can add the video to their collections.",
        -    "type": "boolean"
        -  },
        -  "comments": {
        -    "description": "Set who can comment on the video. Available options are: <ul>\n  <li>`anybody` - Anyone can comment on the video.</li>\n  <li>`nobody` - Only the video owner can comment on the video.</li>\n  <li>`contacts` - Only contacts can comment on the video.</li>\n</ul>",
        -    "enum": [
        -      "anybody",
        -      "nobody",
        -      "contacts"
        -    ],
        -    "type": "string"
        -  },
        -  "download": {
        -    "description": "Set whether the video can be downloaded.",
        -    "type": "boolean"
        -  },
        -  "embed": {
        -    "description": "Set who can embed the video. Available options are: <ul>\n  <li>`public` - Anyone can embed the video.</li>\n  <li>`private` - Only the video owner can embed the video.</li>\n  <li>`whitelist` - Only whitelisted domains can embed the video.</li>\n</ul>",
        -    "enum": [
        -      "public",
        -      "private",
        -      "whitelist"
        -    ],
        -    "type": "string"
        -  },
        -  "view": {
        -    "description": "Set who can view the videos. Available options are: <ul>\n  <li>`anybody` - Anyone can view the video.</li>\n  <li>`nobody` - Only the video owner can view the video.</li>\n  <li>`contacts` - Only contacts can view the video.</li>\n  <li>`password` - A password is required to view the video.</li>\n  <li>`unlisted` - The video is not listed on Vimeo.</li>\n</ul>",
        -    "enum": [
        -      "anybody",
        -      "nobody",
        -      "contacts",
        -      "password",
        -      "unlisted"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / type
        Removed value: -"object"
    • Changedupdate_template423 fields changed
      • addedInput schema / $defs / AudioAsset / properties / effect / $ref
        Added value: +"#/$defs/effect"
      • removedInput schema / $defs / AudioAsset / properties / effect / description
        Removed value: -"The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>"
      • removedInput schema / $defs / AudioAsset / properties / effect / enum
        Removed value: -[
        -  "none",
        -  "fadeIn",
        -  "fadeOut",
        -  "fadeInFadeOut"
        -]
      • removedInput schema / $defs / AudioAsset / properties / effect / type
        Removed value: -"string"
      • addedInput schema / $defs / AudioAsset / properties / options / $ref
        Added value: +"#/$defs/options"
      • removedInput schema / $defs / AudioAsset / properties / options / additionalProperties
        Removed value: -true
      • removedInput schema / $defs / AudioAsset / properties / options / description
        Removed value: -"Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected."
      • removedInput schema / $defs / AudioAsset / properties / options / type
        Removed value: -"object"
      • addedInput schema / $defs / AudioAsset / properties / volume / $ref
        Added value: +"#/$defs/volume"
      • removedInput schema / $defs / AudioAsset / properties / volume / description
        Removed value: -"Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions."
      • removedInput schema / $defs / AudioAsset / properties / volume / oneOf
        Removed value: -[
        -  {
        -    "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  {
        -    "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -    "items": {
        -      "$ref": "#/$defs/Tween"
        -    },
        -    "type": "array"
        -  }
        -]
      • changedInput schema / $defs / Destinations / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/ShotstackDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/MuxDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/S3Destination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleCloudStorageDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleDriveDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/VimeoDestination"
        -  },
        -  {
        -    "deprecated": true,
        -    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        -    "properties": {
        -      "options": {
        -        "deprecated": true,
        -        "description": "Additional TikTok configuration options.",
        -        "properties": {
        -          "disableComment": {
        -            "default": false,
        -            "description": "Disable comments on this video.",
        -            "type": "boolean"
        -          },
        -          "disableDuet": {
        -            "default": false,
        -            "description": "Disable the Duet feature for this video.",
        -            "type": "boolean"
        -          },
        -          "disableStitch": {
        -            "default": false,
        -            "description": "Disable the Stitch feature for this video.",
        -            "type": "boolean"
        -          },
        -          "privacyLevel": {
        -            "default": "private",
        -            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        -            "enum": [
        -              "public",
        -              "friends",
        -              "private"
        -            ],
        -            "type": "string"
        -          },
        -          "title": {
        -            "description": "A title for the video that will be displayed on TikTok.",
        -            "maxLength": 150,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "provider": {
        -        "default": "tiktok",
        -        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Akamai NetStorage configuration options.",
        -        "properties": {
        -          "cpCode": {
        -            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "host": {
        -            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        -            "type": "string"
        -          },
        -          "path": {
        -            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "host",
        -          "cpCode"
        -        ]
        -      },
        -      "provider": {
        -        "default": "akamai-netstorage",
        -        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Azure Blob Storage configuration options.",
        -        "properties": {
        -          "accountName": {
        -            "description": "The Azure Storage account name.",
        -            "type": "string"
        -          },
        -          "container": {
        -            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "prefix": {
        -            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "accountName",
        -          "container"
        -        ]
        -      },
        -      "provider": {
        -        "default": "azure-blob-storage",
        -        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/ShotstackDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/MuxDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/S3Destination"
        +  },
        +  {
        +    "$ref": "#/$defs/GoogleCloudStorageDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/GoogleDriveDestination"
        +  },
        +  {
        +    "$ref": "#/$defs/VimeoDestination"
        +  },
        +  {
        +    "deprecated": true,
        +    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        +    "properties": {
        +      "options": {
        +        "deprecated": true,
        +        "description": "Additional TikTok configuration options.",
        +        "properties": {
        +          "disableComment": {
        +            "default": false,
        +            "description": "Disable comments on this video.",
        +            "type": "boolean"
        +          },
        +          "disableDuet": {
        +            "default": false,
        +            "description": "Disable the Duet feature for this video.",
        +            "type": "boolean"
        +          },
        +          "disableStitch": {
        +            "default": false,
        +            "description": "Disable the Stitch feature for this video.",
        +            "type": "boolean"
        +          },
        +          "privacyLevel": {
        +            "default": "private",
        +            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        +            "enum": [
        +              "public",
        +              "friends",
        +              "private"
        +            ],
        +            "type": "string"
        +          },
        +          "title": {
        +            "description": "A title for the video that will be displayed on TikTok.",
        +            "maxLength": 150,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "provider": {
        +        "default": "tiktok",
        +        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        +    "properties": {
        +      "options": {
        +        "description": "Additional Akamai NetStorage configuration options.",
        +        "properties": {
        +          "cpCode": {
        +            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        +            "type": "string"
        +          },
        +          "filename": {
        +            "$ref": "#/$defs/filename"
        +          },
        +          "host": {
        +            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        +            "type": "string"
        +          },
        +          "path": {
        +            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "host",
        +          "cpCode"
        +        ]
        +      },
        +      "provider": {
        +        "default": "akamai-netstorage",
        +        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        +    "properties": {
        +      "options": {
        +        "description": "Additional Azure Blob Storage configuration options.",
        +        "properties": {
        +          "accountName": {
        +            "description": "The Azure Storage account name.",
        +            "type": "string"
        +          },
        +          "container": {
        +            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        +            "type": "string"
        +          },
        +          "filename": {
        +            "$ref": "#/$defs/filename"
        +          },
        +          "prefix": {
        +            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "accountName",
        +          "container"
        +        ]
        +      },
        +      "provider": {
        +        "default": "azure-blob-storage",
        +        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "provider"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / GoogleCloudStorageDestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / GoogleDriveDestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / ImageAsset / properties / options / $ref
        Added value: +"#/$defs/options"
      • removedInput schema / $defs / ImageAsset / properties / options / additionalProperties
        Removed value: -true
      • removedInput schema / $defs / ImageAsset / properties / options / description
        Removed value: -"Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected."
      • removedInput schema / $defs / ImageAsset / properties / options / type
        Removed value: -"object"
      • addedInput schema / $defs / S3DestinationOptions / properties / filename / $ref
        Added value: +"#/$defs/filename_2"
      • removedInput schema / $defs / S3DestinationOptions / properties / filename / description
        Removed value: -"Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images."
      • removedInput schema / $defs / S3DestinationOptions / properties / filename / type
        Removed value: -"string"
      • addedInput schema / $defs / TextToSpeechAsset / properties / effect / $ref
        Added value: +"#/$defs/effect"
      • removedInput schema / $defs / TextToSpeechAsset / properties / effect / description
        Removed value: -"The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>"
      • removedInput schema / $defs / TextToSpeechAsset / properties / effect / enum
        Removed value: -[
        -  "none",
        -  "fadeIn",
        -  "fadeOut",
        -  "fadeInFadeOut"
        -]
      • removedInput schema / $defs / TextToSpeechAsset / properties / effect / type
        Removed value: -"string"
      • addedInput schema / $defs / TextToSpeechAsset / properties / volume / $ref
        Added value: +"#/$defs/volume"
      • removedInput schema / $defs / TextToSpeechAsset / properties / volume / description
        Removed value: -"Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions."
      • removedInput schema / $defs / TextToSpeechAsset / properties / volume / oneOf
        Removed value: -[
        -  {
        -    "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  {
        -    "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -    "items": {
        -      "$ref": "#/$defs/Tween"
        -    },
        -    "type": "array"
        -  }
        -]
      • addedInput schema / $defs / VideoAsset / properties / options / $ref
        Added value: +"#/$defs/options"
      • removedInput schema / $defs / VideoAsset / properties / options / additionalProperties
        Removed value: -true
      • removedInput schema / $defs / VideoAsset / properties / options / description
        Removed value: -"Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected."
      • removedInput schema / $defs / VideoAsset / properties / options / type
        Removed value: -"object"
      • addedInput schema / $defs / effect
        Added value: +{
        +  "description": "The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        +  "enum": [
        +    "none",
        +    "fadeIn",
        +    "fadeOut",
        +    "fadeInFadeOut"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / $defs / filename
        Added value: +{
        +  "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / $defs / filename_2
        Added value: +{
        +  "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        +  "type": "string"
        +}
      • addedInput schema / $defs / options
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.",
        +  "type": "object"
        +}
      • addedInput schema / $defs / volume
        Added value: +{
        +  "description": "Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions.",
        +  "oneOf": [
        +    {
        +      "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        +      "format": "float",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    {
        +      "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        +      "items": {
        +        "$ref": "#/$defs/Tween"
        +      },
        +      "type": "array"
        +    }
        +  ]
        +}
      • changedInput schema / properties / confirm / description
        Previous value: -"Must be true for this exact requested render, generation, mutation, upload URL or deletion."New value: +"Set true only when the user asked for exactly this action."
      • addedInput schema / properties / payload / $defs / Asset / $ref
        Added value: +"#/$defs/Asset"
      • removedInput schema / properties / payload / $defs / Asset / description
        Removed value: -"The type of asset to display for the duration of the Clip, i.e. a video clip or an image. Choose from one of the available asset types below."
      • removedInput schema / properties / payload / $defs / Asset / oneOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/VideoAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/ImageAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/TextAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/RichTextAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/AudioAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/LumaAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/CaptionAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/RichCaptionAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/HtmlAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/Html5Asset"
        -  },
        -  {
        -    "$ref": "#/$defs/TitleAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/ShapeAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/SvgAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/TextToImageAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/ImageToVideoAsset"
        -  },
        -  {
        -    "$ref": "#/$defs/TextToSpeechAsset"
        -  }
        -]
      • removedInput schema / properties / payload / $defs / Asset / type
        Removed value: -"object"
      • removedInput schema / properties / payload / $defs / Asset / unevaluatedProperties
        Removed value: -false
      • addedInput schema / properties / payload / $defs / AudioAsset / $ref
        Added value: +"#/$defs/AudioAsset"
      • removedInput schema / properties / payload / $defs / AudioAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / AudioAsset / description
        Removed value: -"The AudioAsset adds audio to a Clip. The audio can be sourced from a URL\n(`src`), generated from a text prompt (`prompt`), or both. At least one of\n`src` or `prompt` must be provided.\n\n- **Source URL:** set `src` to a publicly accessible audio URL (e.g. mp3).\n- **Generated speech:** set `prompt` to the spoken text and choose a\n  text-to-speech `model`; set the voice via `options`.\n- **Generated music or SFX:** set `prompt` describing the sound and choose\n  a music generation `model`.\n- **Both:** `src` acts as a preview placeholder while `prompt` drives\n  generation — the audio is regenerated from the prompt at render time.\n  Unchanged prompts and options resolve from the generation cache.\n- Use `model` to choose the generator and `options` to configure it. The\n  generated `src` is filled in automatically.\n"
      • removedInput schema / properties / payload / $defs / AudioAsset / properties
        Removed value: -{
        -  "effect": {
        -    "description": "The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        -    "enum": [
        -      "none",
        -      "fadeIn",
        -      "fadeOut",
        -      "fadeInFadeOut"
        -    ],
        -    "type": "string"
        -  },
        -  "model": {
        -    "description": "The generation model to use when `prompt` is set (e.g. `polly-neural`, `elevenlabs-tts`, `elevenlabs-music`). Defaults to `elevenlabs-tts` (with a default voice) if omitted. Each model's available options are defined by the model registry.",
        -    "type": "string"
        -  },
        -  "options": {
        -    "additionalProperties": true,
        -    "description": "Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.",
        -    "type": "object"
        -  },
        -  "prompt": {
        -    "description": "A text prompt. For text-to-speech models the prompt is the spoken text; for music models it describes the sound to generate. The generated `src` is filled in automatically; an existing `src` is treated as a preview placeholder and replaced.",
        -    "maxLength": 4000,
        -    "type": "string"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the audio clip between 0 (paused) and 10 (10x normal speed), where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire audio (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire audio (i.e. original length / 2).",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "src": {
        -    "description": "The audio source URL. The URL must be publicly accessible or include credentials. When `prompt` is also set, `src` serves as a preview placeholder and the audio is regenerated from the prompt at render time.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the audio clip, in seconds (defaults to 0). Audio will start from the in trim point. The audio will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "audio",
        -    "description": "The type of asset - set to `audio` for audio assets.",
        -    "enum": [
        -      "audio"
        -    ],
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions.",
        -    "oneOf": [
        -      {
        -        "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -        "format": "float",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / AudioAsset / required
        Removed value: -[
        -  "type"
        -]
      • removedInput schema / properties / payload / $defs / AudioAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / CaptionAsset / $ref
        Added value: +"#/$defs/CaptionAsset"
      • removedInput schema / properties / payload / $defs / CaptionAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / CaptionAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / CaptionAsset / description
        Removed value: -"**Notice: The CaptionAsset is deprecated, use the [RichCaptionAsset](#tocs_richcaptionasset) instead.**\n\nThe CaptionAsset is used to add captions (subtitles) to a video. It uses a supplied SRT or VTT file which will\nbe read and burnt to the video.\n\nCaptions can be applied independently from a video or audio file for greater\nflexibility with styling and layout. For example you can scale, position or crop a video without modifying the\ncaptions.\n\nTo sync captions with a video or audio file use a [Video](#tocs_videoasset) or [Audio](#tocs_audioasset) with\nmatching start and end time.\n"
      • removedInput schema / properties / payload / $defs / CaptionAsset / properties
        Removed value: -{
        -  "background": {
        -    "$ref": "#/$defs/CaptionBackground",
        -    "description": "Background styling properties."
        -  },
        -  "font": {
        -    "$ref": "#/$defs/CaptionFont",
        -    "description": "Font styling properties."
        -  },
        -  "margin": {
        -    "$ref": "#/$defs/CaptionMargin",
        -    "description": "Margin properties."
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the captions between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to  adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire captions (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire captions (i.e. original length / 2).",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "src": {
        -    "description": "The URL to an SRT or VTT subtitles file, or an alias reference to auto-generate captions from an audio or video clip. For file URLs, the URL must be publicly accessible or include credentials. For auto-captioning, use the format `alias://clip-name` where clip-name is the alias of an audio, video, or text-to-speech clip. The system will automatically transcribe the audio and detect the language.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the captions, in seconds (defaults to 0). Remove the trim length from the start of the captions and allow it to be synced with video or audio. The captions will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "caption",
        -    "description": "The type of asset - set to `caption` for captions.",
        -    "enum": [
        -      "caption"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / CaptionAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / CaptionAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / CaptionBackground / $ref
        Added value: +"#/$defs/CaptionBackground"
      • removedInput schema / properties / payload / $defs / CaptionBackground / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / CaptionBackground / description
        Removed value: -"Displays a background box behind the caption text."
      • removedInput schema / properties / payload / $defs / CaptionBackground / properties
        Removed value: -{
        -  "borderRadius": {
        -    "description": "The border radius of the background box in pixels.",
        -    "type": "integer"
        -  },
        -  "color": {
        -    "description": "The background color using hexadecimal color notation.",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "description": "The opacity of the background color.",
        -    "type": "number"
        -  },
        -  "padding": {
        -    "description": "The padding inside the background box in pixels.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / CaptionBackground / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / CaptionFont / $ref
        Added value: +"#/$defs/CaptionFont"
      • removedInput schema / properties / payload / $defs / CaptionFont / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / CaptionFont / description
        Removed value: -"Font properties for captions text."
      • removedInput schema / properties / payload / $defs / CaptionFont / properties
        Removed value: -{
        -  "color": {
        -    "description": "The text color using hexadecimal color notation.",
        -    "type": "string"
        -  },
        -  "family": {
        -    "description": "The font family name. This must be Family name embedded in the font, i.e. \"Open Sans\".",
        -    "type": "string"
        -  },
        -  "lineHeight": {
        -    "description": "The line height of the font as a ratio of the font size.",
        -    "type": "number"
        -  },
        -  "opacity": {
        -    "description": "The opacity of the text where 1 is opaque and 0 is transparent.",
        -    "type": "number"
        -  },
        -  "size": {
        -    "description": "The size of the font in pixels (px).",
        -    "type": "integer"
        -  },
        -  "stroke": {
        -    "description": "The stroke color of the font using hexadecimal color notation.",
        -    "type": "string"
        -  },
        -  "strokeWidth": {
        -    "description": "The width of the stroke in pixels.",
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / CaptionFont / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / CaptionMargin / $ref
        Added value: +"#/$defs/CaptionMargin"
      • removedInput schema / properties / payload / $defs / CaptionMargin / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / CaptionMargin / description
        Removed value: -"The margin properties for captions. Margins are used to position the caption text and background on the screen."
      • removedInput schema / properties / payload / $defs / CaptionMargin / properties
        Removed value: -{
        -  "left": {
        -    "description": "The margin to the left of the text. Pushes captions to the right.",
        -    "type": "number"
        -  },
        -  "right": {
        -    "description": "The margin to the right of the text. Pushes captions to the left.",
        -    "type": "number"
        -  },
        -  "top": {
        -    "description": "The margin above the text. Pushes captions down the screen.",
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / CaptionMargin / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / ChromaKey / $ref
        Added value: +"#/$defs/ChromaKey"
      • removedInput schema / properties / payload / $defs / ChromaKey / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / ChromaKey / description
        Removed value: -"Chroma key is a technique that replaces a specific color in a video with a different background image or video, enabling seamless integration of diverse environments. Commonly used for green screen and blue screen effects."
      • removedInput schema / properties / payload / $defs / ChromaKey / properties
        Removed value: -{
        -  "color": {
        -    "description": "The chroma key color as a hex value. Use green (#00b140) for green screens or blue (#0000FF) for blue screens. Any valid hex color can be used as the key color.",
        -    "pattern": "^#[0-9a-fA-F]{6}$",
        -    "type": "string"
        -  },
        -  "halo": {
        -    "description": "Pixels within the halo distance from the threshold boundary are given an increasing alpha value based on their distance from the threshold.",
        -    "maximum": 250,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  "threshold": {
        -    "description": "Pixels within this distance from the key color are eliminated by setting their alpha values to zero.",
        -    "maximum": 250,
        -    "minimum": 0,
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ChromaKey / required
        Removed value: -[
        -  "color"
        -]
      • removedInput schema / properties / payload / $defs / ChromaKey / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Clip / $ref
        Added value: +"#/$defs/Clip"
      • removedInput schema / properties / payload / $defs / Clip / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Clip / description
        Removed value: -"A clip is a container for a specific type of asset, i.e. a title, image, video, audio or html. You use a Clip to define when an asset will display on the timeline, how long it will play for and transitions, filters and effects to apply to it."
      • removedInput schema / properties / payload / $defs / Clip / properties
        Removed value: -{
        -  "alias": {
        -    "description": "A unique identifier for this clip that can be used to reference it from other clips using the `alias://` protocol in asset sources. This is useful for features like auto-captioning where a caption asset needs to reference the audio from another clip.",
        -    "pattern": "^[A-Za-z0-9_-]+$",
        -    "type": "string"
        -  },
        -  "asset": {
        -    "$ref": "#/$defs/Asset"
        -  },
        -  "effect": {
        -    "description": "A motion effect to apply to the Clip. <ul>\n  <li>`zoomIn` - slow zoom in</li>\n  <li>`zoomOut` - slow zoom out</li>\n  <li>`slideLeft` - slow slide (pan) left</li>\n  <li>`slideRight` - slow slide (pan) right</li>\n  <li>`slideUp` - slow slide (pan) up</li>\n  <li>`slideDown` - slow slide (pan) down</li>\n</ul> The motion effect speed can also be controlled by appending `Fast` or `Slow` to the effect, e.g. `zoomInFast` or `slideRightSlow`.",
        -    "enum": [
        -      "zoomIn",
        -      "zoomInSlow",
        -      "zoomInFast",
        -      "zoomOut",
        -      "zoomOutSlow",
        -      "zoomOutFast",
        -      "slideLeft",
        -      "slideLeftSlow",
        -      "slideLeftFast",
        -      "slideRight",
        -      "slideRightSlow",
        -      "slideRightFast",
        -      "slideUp",
        -      "slideUpSlow",
        -      "slideUpFast",
        -      "slideDown",
        -      "slideDownSlow",
        -      "slideDownFast"
        -    ],
        -    "type": "string"
        -  },
        -  "filter": {
        -    "description": "A filter effect to apply to the Clip. <ul>\n  <li>`none` - no filter applied</li>\n  <li>`blur` - blur the scene</li>\n  <li>`boost` - boost contrast and saturation</li>\n  <li>`contrast` - increase contrast</li>\n  <li>`darken` - darken the scene</li>\n  <li>`greyscale` - remove colour</li>\n  <li>`lighten` - lighten the scene</li>\n  <li>`muted` - reduce saturation and contrast</li>\n  <li>`negative` - negative colors</li>\n</ul>",
        -    "enum": [
        -      "none",
        -      "blur",
        -      "boost",
        -      "contrast",
        -      "darken",
        -      "greyscale",
        -      "lighten",
        -      "muted",
        -      "negative"
        -    ],
        -    "type": "string"
        -  },
        -  "fit": {
        -    "description": "Set how the asset should be scaled to fit the viewport using one of the following options: \n  <ul>\n    <li>`crop` <b>(default)</b> - scale the asset to fill the viewport while maintaining the aspect ratio. The asset will be cropped if it exceeds the bounds of the viewport.</li>\n    <li>`cover` - stretch the asset to fill the viewport without maintaining the aspect ratio.</li>\n    <li>`contain` - fit the entire asset within the viewport while maintaining the original aspect ratio.</li>\n    <li>`none` - preserves the original asset dimensions and does not apply any scaling.</li>\n  </ul>",
        -    "enum": [
        -      "cover",
        -      "contain",
        -      "crop",
        -      "none"
        -    ],
        -    "type": "string"
        -  },
        -  "height": {
        -    "description": "Set the height of the clip bounding box in pixels. This constrains the height of the clip, overriding the default behavior where clips fill the viewport height.",
        -    "format": "float",
        -    "maximum": 2160,
        -    "minimum": 1,
        -    "type": "number"
        -  },
        -  "id": {
        -    "description": "Optional client-generated identifier. Used by client SDKs (e.g. the Shotstack Studio SDK) to reference a clip across edits without relying on its position in the timeline. The render API does not use this field and it does not appear in render output.",
        -    "type": "string"
        -  },
        -  "length": {
        -    "description": "The duration the Clip should play for.",
        -    "oneOf": [
        -      {
        -        "description": "The duration the Clip should play for, in seconds. For example, to play the Clip for 5 seconds, set the length value to 5.",
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "The duration the Clip should play for using a [smart clip property](/docs/guide/architecting-an-application/smart-clips/). Set to `auto` to play the Clip for the duration of the asset. Set to `end` to display or play the clip to the end of the timeline. Use `alias://clip-name` to inherit the length from the referenced clip.",
        -        "pattern": "^(auto|end|alias://[A-Za-z0-9_-]+)$",
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  "offset": {
        -    "$ref": "#/$defs/Offset",
        -    "description": "Offset the location of the asset relative to its position on the viewport. The offset distance is relative to the width of the viewport - for example an x offset of 0.5 will move the asset half the viewport width to the right."
        -  },
        -  "opacity": {
        -    "description": "Offset an asset on the horizontal axis (left or right). Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "Sets the opacity of the Clip where 1 is opaque and 0 is transparent.",
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the opacity of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "position": {
        -    "description": "Place the asset in one of nine predefined positions of the viewport. This is most effective for when the asset is scaled and you want to position the element to a specific position. <ul>\n  <li>`top` - top (center)</li>\n  <li>`topRight` - top right</li>\n  <li>`right` - right (center)</li>\n  <li>`bottomRight` - bottom right</li>\n  <li>`bottom` - bottom (center)</li>\n  <li>`bottomLeft` - bottom left</li>\n  <li>`left` - left (center)</li>\n  <li>`topLeft` - top left</li>\n  <li>`center` - center</li>\n</ul>",
        -    "enum": [
        -      "top",
        -      "topRight",
        -      "right",
        -      "bottomRight",
        -      "bottom",
        -      "bottomLeft",
        -      "left",
        -      "topLeft",
        -      "center"
        -    ],
        -    "type": "string"
        -  },
        -  "scale": {
        -    "description": "Scale the asset to a fraction of the viewport size - i.e. setting the scale to 0.5 will scale asset to half the size of the viewport. This is useful for picture-in-picture video and scaling images such as logos and watermarks. Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "Scale the asset to a fraction of the viewport size. For example, 0.5 will scale the asset to half the size of the viewport.",
        -        "format": "float",
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the scale of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "start": {
        -    "description": "The start position of the Clip on the timeline.",
        -    "oneOf": [
        -      {
        -        "description": "The start position of the Clip on the timeline, in seconds. For example, to start the Clip at 2 seconds, set the start value to 2.",
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "The start position using a [smart clip property](/docs/guide/architecting-an-application/smart-clips/). Set to `auto` to automatically play the clip after the previous clip finishes. Use `alias://clip-name` to inherit the start time from the referenced clip.",
        -        "pattern": "^(auto|alias://[A-Za-z0-9_-]+)$",
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  "transform": {
        -    "$ref": "#/$defs/Transformation",
        -    "description": "A transformation lets you modify the visual properties of a clip. Available transformations are <b>rotate</b>, <b>skew</b> and <b>flip</b>. Transformations can be combined to create interesting new shapes and effects."
        -  },
        -  "transition": {
        -    "$ref": "#/$defs/Transition"
        -  },
        -  "width": {
        -    "description": "Set the width of the clip bounding box in pixels. This constrains the width of the clip, overriding the default behavior where clips fill the viewport width.",
        -    "format": "float",
        -    "maximum": 3840,
        -    "minimum": 1,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Clip / required
        Removed value: -[
        -  "asset",
        -  "start",
        -  "length"
        -]
      • removedInput schema / properties / payload / $defs / Clip / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Crop / $ref
        Added value: +"#/$defs/Crop"
      • removedInput schema / properties / payload / $defs / Crop / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Crop / description
        Removed value: -"Crop the sides of an asset by a relative amount. The size of the crop is specified using a scale between 0 and 1, relative to the screen width - i.e a left crop of 0.5 will crop half of the asset from the left, a top crop  of 0.25 will crop the top by quarter of the asset."
      • removedInput schema / properties / payload / $defs / Crop / properties
        Removed value: -{
        -  "bottom": {
        -    "description": "Crop from the bottom of the asset",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "left": {
        -    "description": "Crop from the left of the asset",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "right": {
        -    "description": "Crop from the left of the asset",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "top": {
        -    "description": "Crop from the top of the asset",
        -    "format": "float",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Crop / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Destinations / $ref
        Added value: +"#/$defs/Destinations"
      • removedInput schema / properties / payload / $defs / Destinations / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Destinations / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/ShotstackDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/MuxDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/S3Destination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleCloudStorageDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/GoogleDriveDestination"
        -  },
        -  {
        -    "$ref": "#/$defs/VimeoDestination"
        -  },
        -  {
        -    "deprecated": true,
        -    "description": "**Notice: The TikTok destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to TikTok. TikTok credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/tiktok), not in the request.",
        -    "properties": {
        -      "options": {
        -        "deprecated": true,
        -        "description": "Additional TikTok configuration options.",
        -        "properties": {
        -          "disableComment": {
        -            "default": false,
        -            "description": "Disable comments on this video.",
        -            "type": "boolean"
        -          },
        -          "disableDuet": {
        -            "default": false,
        -            "description": "Disable the Duet feature for this video.",
        -            "type": "boolean"
        -          },
        -          "disableStitch": {
        -            "default": false,
        -            "description": "Disable the Stitch feature for this video.",
        -            "type": "boolean"
        -          },
        -          "privacyLevel": {
        -            "default": "private",
        -            "description": "The privacy level for the video. Options are: <ul>\n  <li>`public` - video is visible to everyone</li>\n  <li>`friends` - video is visible to friends only</li>\n  <li>`private` - video is only visible to you</li>\n</ul>",
        -            "enum": [
        -              "public",
        -              "friends",
        -              "private"
        -            ],
        -            "type": "string"
        -          },
        -          "title": {
        -            "description": "A title for the video that will be displayed on TikTok.",
        -            "maxLength": 150,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "provider": {
        -        "default": "tiktok",
        -        "description": "The destination to send video to - set to `tiktok` for TikTok.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Akamai NetStorage](https://techdocs.akamai.com/netstorage/docs). Send files to your NetStorage upload directory with a custom path and filename. Akamai credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/akamai-netstorage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Akamai NetStorage configuration options.",
        -        "properties": {
        -          "cpCode": {
        -            "description": "The Content Provider code (CP code) for the NetStorage upload directory.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "host": {
        -            "description": "The Akamai NetStorage hostname, i.e. `example-nsu.akamaihd.net`.",
        -            "type": "string"
        -          },
        -          "path": {
        -            "description": "A remote directory path/prefix for the file being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "host",
        -          "cpCode"
        -        ]
        -      },
        -      "provider": {
        -        "default": "akamai-netstorage",
        -        "description": "The destination to send assets to - set to `akamai-netstorage` for Akamai NetStorage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "description": "Send videos and assets to [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/). Send files to any container with a custom prefix and filename. Azure credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/azure-blob-storage), not in the request.",
        -    "properties": {
        -      "options": {
        -        "description": "Additional Azure Blob Storage configuration options.",
        -        "properties": {
        -          "accountName": {
        -            "description": "The Azure Storage account name.",
        -            "type": "string"
        -          },
        -          "container": {
        -            "description": "The Blob container name. The container must exist in the Azure Storage account before files can be sent.",
        -            "type": "string"
        -          },
        -          "filename": {
        -            "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "prefix": {
        -            "description": "A virtual directory prefix for the blob being sent, i.e. `videos` or `customerId/videos`.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "accountName",
        -          "container"
        -        ]
        -      },
        -      "provider": {
        -        "default": "azure-blob-storage",
        -        "description": "The destination to send assets to - set to `azure-blob-storage` for Azure Blob Storage.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "provider"
        -    ],
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / payload / $defs / Destinations / description
        Removed value: -"A destination is a location where assets can be sent to for serving or hosting. Videos, images and audio files that are rendered by the [Edit API](#shotstack-edit) and [source](#tocs_source) and [rendition](#tocs_rendition) files generated by the [Ingest API](#shotstack-ingest) can be sent to destinations. You can also fetch a file from any public URL and [transfer](#transfer-asset) it to a destination. A file can be sent to one or more destinations including 3rd party destinations.\n\nBy default all ingested and generated assets are automatically sent to the [Shotstack hosting destination](https://shotstack.io/docs/guide/serving-assets/hosting/). You can [opt-out](https://shotstack.io/docs/guide/serving-assets/self-host/) from by setting the Shotstack destination **exclude** property to **true**."
      • removedInput schema / properties / payload / $defs / Destinations / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Edit / $ref
        Added value: +"#/$defs/Edit"
      • removedInput schema / properties / payload / $defs / Edit / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Edit / description
        Removed value: -"An edit defines the arrangement of a video on a timeline, an audio edit or an image design and the output format. Video assets are automatically preprocessed to fix common compatibility issues before rendering. You can control preprocessing behavior using the `transcode` flag on video assets."
      • removedInput schema / properties / payload / $defs / Edit / properties
        Removed value: -{
        -  "callback": {
        -    "description": "An optional webhook callback URL used to receive status notifications when a render completes or fails. Notifications are also sent when a rendered video is sent to an output  [destination](https://shotstack.io/docs/guide/serving-assets/destinations/).\nSee [webhooks](https://shotstack.io/docs/guide/architecting-an-application/webhooks/) for more details.",
        -    "type": "string"
        -  },
        -  "disk": {
        -    "deprecated": true,
        -    "description": "**Notice: This option is now deprecated and will be removed. Disk types are handled automatically. Setting a disk type has no effect.**\n\nThe disk type to use for storing footage and assets for each render.\n<ul>\n  <li>`local` - optimized for high speed rendering with up to 512MB storage</li>\n  <li>`mount` - optimized for larger file sizes and longer videos with 5GB for source footage and 512MB for output render</li>\n</ul>\n",
        -    "enum": [
        -      "local",
        -      "mount"
        -    ],
        -    "type": "string"
        -  },
        -  "instance": {
        -    "default": "s1",
        -    "description": "The render instance type to use for processing the edit. <ul>\n  <li>`s1` - standard instance (default)</li>\n  <li>`s2` - standard instance with more resources</li>\n  <li>`a1` - accelerated instance for faster rendering</li>\n</ul>",
        -    "enum": [
        -      "s1",
        -      "s2",
        -      "a1"
        -    ],
        -    "type": "string"
        -  },
        -  "merge": {
        -    "description": "An array of key/value pairs that provides an easy way to create templates with placeholders. The placeholders can be used to find and replace keys with values. For example you can search for the placeholder `{{NAME}}` and replace it with the value `Jane`. ",
        -    "items": {
        -      "$ref": "#/$defs/MergeField"
        -    },
        -    "type": "array"
        -  },
        -  "output": {
        -    "$ref": "#/$defs/Output"
        -  },
        -  "timeline": {
        -    "$ref": "#/$defs/Timeline"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Edit / required
        Removed value: -[
        -  "timeline",
        -  "output"
        -]
      • removedInput schema / properties / payload / $defs / Edit / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / FlipTransformation / $ref
        Added value: +"#/$defs/FlipTransformation"
      • removedInput schema / properties / payload / $defs / FlipTransformation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / FlipTransformation / description
        Removed value: -"Flip a clip vertically or horizontally. Acts as a mirror effect of the clip along the selected plane."
      • removedInput schema / properties / payload / $defs / FlipTransformation / properties
        Removed value: -{
        -  "horizontal": {
        -    "description": "Flip a clip horizontally.",
        -    "type": "boolean"
        -  },
        -  "vertical": {
        -    "description": "Flip a clip vertically.",
        -    "type": "boolean"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / FlipTransformation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Font / $ref
        Added value: +"#/$defs/Font"
      • removedInput schema / properties / payload / $defs / Font / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Font / description
        Removed value: -"Download a custom font to use with the HTML asset type, using the font name in the CSS or font tag. See our [custom fonts](https://shotstack.io/learn/html-custom-fonts/) getting started guide for more details."
      • removedInput schema / properties / payload / $defs / Font / properties
        Removed value: -{
        -  "src": {
        -    "description": "The URL of the font file. The URL must be publicly accessible or include credentials.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Font / required
        Removed value: -[
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / Font / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / $ref
        Added value: +"#/$defs/GoogleCloudStorageDestination"
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / description
        Removed value: -"Send videos and assets to a [Google Cloud Storage](https://cloud.google.com/storage) bucket. Send files with your own prefix and filename. Google Cloud credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/google-cloud-storage), not in the request."
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/GoogleCloudStorageDestinationOptions",
        -    "description": "Additional Google Cloud Storage configuration options."
        -  },
        -  "provider": {
        -    "default": "google-cloud-storage",
        -    "description": "The destination to send assets to - set to `google-cloud-storage` for Google Cloud Storage.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / $ref
        Added value: +"#/$defs/GoogleCloudStorageDestinationOptions"
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / description
        Removed value: -"Pass additional options to control how files are stored in Google Cloud Storage."
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / properties
        Removed value: -{
        -  "bucket": {
        -    "description": "The bucket name to send files to. The bucket must exist in the Google Cloud Storage account before files can be sent.",
        -    "type": "string"
        -  },
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "prefix": {
        -    "description": "A prefix for the file being sent. This is typically a folder name, i.e. `videos` or `customerId/videos`.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleCloudStorageDestinationOptions / required
        Removed value: -[
        -  "bucket"
        -]
      • addedInput schema / properties / payload / $defs / GoogleDriveDestination / $ref
        Added value: +"#/$defs/GoogleDriveDestination"
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / description
        Removed value: -"Send rendered videos and assets to the [Google Drive](https://shotstack.io/docs/guide/serving-assets/destinations/google-drive/) cloud storage service. Google Drive uses OAuth and you must authenticate and link your Google account via  [dashboard](https://dashboard.shotstack.io/integrations/google-drive), not in the request."
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/GoogleDriveDestinationOptions",
        -    "description": "Additional Google Drive configuration and features. If omitted, files are saved to the root of My Drive using the default Shotstack filename."
        -  },
        -  "provider": {
        -    "default": "google-drive",
        -    "description": "The destination to send assets to - set to `google-drive` for Google Drive.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / GoogleDriveDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / $ref
        Added value: +"#/$defs/GoogleDriveDestinationOptions"
      • removedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / description
        Removed value: -"Pass the folder ID and options to configure how assets are stored in Google Drive."
      • removedInput schema / properties / payload / $defs / GoogleDriveDestinationOptions / properties
        Removed value: -{
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "folderId": {
        -    "description": "The Google Drive folder ID where the asset will be stored. If omitted, the asset is saved to the root of My Drive. The folder ID can be retrieved from the URL when logged in to Google Drive, e.g. <a href=\"#\">https://drive.google.com/drive/u/0/folders/1r-eTY6OLO8tzQRKwMyq-fIrQ_7AJEI6A</a>.",
        -    "type": "string"
        -  }
        -}
      • addedInput schema / properties / payload / $defs / Html5Asset / $ref
        Added value: +"#/$defs/Html5Asset"
      • removedInput schema / properties / payload / $defs / Html5Asset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Html5Asset / description
        Removed value: -"The Html5Asset renders full HTML5/CSS3/JS.\n"
      • removedInput schema / properties / payload / $defs / Html5Asset / properties
        Removed value: -{
        -  "css": {
        -    "description": "The CSS string applied to the HTML. Max 500,000 characters.",
        -    "maxLength": 500000,
        -    "type": "string"
        -  },
        -  "html": {
        -    "description": "The HTML markup for the asset. Max 1,000,000 characters.",
        -    "maxLength": 1000000,
        -    "type": "string"
        -  },
        -  "js": {
        -    "description": "Optional JavaScript. Use for chart libraries, animations, or DOM manipulation. `gsap`, `d3`, `anime` and `lottie` are always available. CSS animations, transitions, and `Element.animate()` are also captured automatically. Max 500,000 characters.\n",
        -    "maxLength": 500000,
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "html5",
        -    "description": "The type of asset - set to `html5` for HTML5/CSS3/JS.",
        -    "enum": [
        -      "html5"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Html5Asset / required
        Removed value: -[
        -  "type",
        -  "html"
        -]
      • removedInput schema / properties / payload / $defs / Html5Asset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / HtmlAsset / $ref
        Added value: +"#/$defs/HtmlAsset"
      • removedInput schema / properties / payload / $defs / HtmlAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / HtmlAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / HtmlAsset / description
        Removed value: -"**Notice: The HtmlAsset is deprecated, use the [RichTextAsset](#tocs_richtextasset) instead.**\n\nThe HtmlAsset clip type lets you create text based layout and formatting using\nHTML and CSS. You can also set the height and width of a bounding box for the HTML\ncontent to sit within. Text and elements will wrap within the bounding box.\n"
      • removedInput schema / properties / payload / $defs / HtmlAsset / properties
        Removed value: -{
        -  "background": {
        -    "description": "Apply a background color behind the HTML bounding box using. Set the text color using hexadecimal  color notation. Transparency is supported by setting the first two characters of the hex string  (opposite to HTML), i.e. #80ffffff will be white with 50% transparency.",
        -    "type": "string"
        -  },
        -  "css": {
        -    "description": "The CSS text string to apply styling to the HTML. See list of  [support CSS properties](https://shotstack.io/docs/guide/architecting-an-application/html-support/#supported-css-properties).",
        -    "type": "string"
        -  },
        -  "height": {
        -    "description": "Set the width of the HTML asset bounding box in pixels. Text and elements will be masked if they exceed the  height of the bounding box.",
        -    "type": "integer"
        -  },
        -  "html": {
        -    "description": "The HTML text string. See list of [supported HTML tags](https://shotstack.io/docs/guide/architecting-an-application/html-support/#supported-html-tags).",
        -    "type": "string"
        -  },
        -  "position": {
        -    "description": "Place the HTML in one of nine predefined positions within the HTML area. <ul>\n  <li>`top` - top (center)</li>\n  <li>`topRight` - top right</li>\n  <li>`right` - right (center)</li>\n  <li>`bottomRight` - bottom right</li>\n  <li>`bottom` - bottom (center)</li>\n  <li>`bottomLeft` - bottom left</li>\n  <li>`left` - left (center)</li>\n  <li>`topLeft` - top left</li>\n  <li>`center` - center</li>\n</ul>",
        -    "enum": [
        -      "top",
        -      "topRight",
        -      "right",
        -      "bottomRight",
        -      "bottom",
        -      "bottomLeft",
        -      "left",
        -      "topLeft",
        -      "center"
        -    ],
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "html",
        -    "description": "The type of asset - set to `html` for HTML.",
        -    "enum": [
        -      "html"
        -    ],
        -    "type": "string"
        -  },
        -  "width": {
        -    "description": "Set the width of the HTML asset bounding box in pixels. Text will wrap to fill the bounding box.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / HtmlAsset / required
        Removed value: -[
        -  "type",
        -  "html"
        -]
      • removedInput schema / properties / payload / $defs / HtmlAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / ImageAsset / $ref
        Added value: +"#/$defs/ImageAsset"
      • removedInput schema / properties / payload / $defs / ImageAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / ImageAsset / description
        Removed value: -"The ImageAsset adds an image to a Clip. The image can be sourced from a URL\n(`src`), generated from a text prompt (`prompt`), or both. At least one of\n`src` or `prompt` must be provided.\n\n- **Source URL:** set `src` to the publicly accessible URL of a jpg or png file.\n- **Generated:** set `prompt` to describe the image. Choose a generator with\n  `model` and configure it with model-specific `options`; the engine fills\n  `src` in automatically.\n- **Both:** `src` acts as a preview placeholder while `prompt` drives\n  generation — the image is regenerated from the prompt at render time.\n  Unchanged prompts and options resolve from the generation cache.\n"
      • removedInput schema / properties / payload / $defs / ImageAsset / properties
        Removed value: -{
        -  "crop": {
        -    "$ref": "#/$defs/Crop"
        -  },
        -  "model": {
        -    "description": "The generation model to use when `prompt` is set (e.g. `flux-schnell`, `nano-banana-2`). Defaults to `nano-banana-2` if omitted. Each model's available options are defined by the model registry.",
        -    "type": "string"
        -  },
        -  "options": {
        -    "additionalProperties": true,
        -    "description": "Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.",
        -    "type": "object"
        -  },
        -  "prompt": {
        -    "description": "A text prompt to generate the image from. The engine generates an image at render time and fills `src` automatically; an existing `src` is treated as a preview placeholder and replaced. Use `model` to choose the generator and `options` to configure it.",
        -    "maxLength": 4000,
        -    "type": "string"
        -  },
        -  "src": {
        -    "description": "The image source URL. The URL must be publicly accessible or include credentials. When `prompt` is also set, `src` serves as a preview placeholder and the image is regenerated from the prompt at render time.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "image",
        -    "description": "The type of asset - set to `image` for images.",
        -    "enum": [
        -      "image"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ImageAsset / required
        Removed value: -[
        -  "type"
        -]
      • removedInput schema / properties / payload / $defs / ImageAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / ImageToVideoAsset / $ref
        Added value: +"#/$defs/ImageToVideoAsset"
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / description
        Removed value: -"**Notice: ImageToVideoAsset is deprecated. Use [VideoAsset](#tocs_videoasset)\nwith `prompt`, a `model` that accepts a starting image, and that image in\n`options.startSrc` — for example `seedance-2.0-image-to-video`.** This type continues to\nfunction and is internally rewritten to VideoAsset; no behaviour change for\nexisting integrations.\n\nThe ImageToVideoAsset lets you create a video from an image and a text prompt.\n"
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / properties
        Removed value: -{
        -  "aspectRatio": {
        -    "description": "The aspect ratio (shape) of the video output.",
        -    "enum": [
        -      "1:1",
        -      "4:3",
        -      "16:9",
        -      "9:16",
        -      "3:4",
        -      "21:9",
        -      "9:21"
        -    ],
        -    "type": "string"
        -  },
        -  "crop": {
        -    "$ref": "#/$defs/Crop"
        -  },
        -  "prompt": {
        -    "description": "The instructions for modifying the image into a video sequence.",
        -    "type": "string"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the video clip between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to  adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire video (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire video (i.e. original length / 2).",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "src": {
        -    "description": "The image source URL. The URL must be publicly accessible or include credentials.",
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "image-to-video",
        -    "description": "The type of asset to generate - set to `image-to-video` for image-to-video.",
        -    "enum": [
        -      "image-to-video"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / ImageToVideoAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / LumaAsset / $ref
        Added value: +"#/$defs/LumaAsset"
      • removedInput schema / properties / payload / $defs / LumaAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / LumaAsset / description
        Removed value: -"The LumaAsset is used to create luma matte masks, transitions and effects between other assets. A luma matte is a grey scale image or animated video where the black areas are transparent and the white areas solid. The luma matte animation should be provided as an mp4 video file. The src must be a publicly accessible URL to the file."
      • removedInput schema / properties / payload / $defs / LumaAsset / properties
        Removed value: -{
        -  "src": {
        -    "description": "The luma matte source URL. The URL must be publicly accessible or include credentials.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the luma matte clip, in seconds (defaults to 0). Videos will start from the in trim point. A luma matte video will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "luma",
        -    "description": "The type of asset - set to `luma` for luma mattes.",
        -    "enum": [
        -      "luma"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / LumaAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / LumaAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / MergeField / $ref
        Added value: +"#/$defs/MergeField"
      • removedInput schema / properties / payload / $defs / MergeField / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / MergeField / description
        Removed value: -"A merge field consists of a key; `find`, and a value; `replace`. Merge fields can be used to replace placeholders within the JSON edit to create re-usable templates. Placeholders should be a string with double brace delimiters, i.e. `\"{{NAME}}\"`. A placeholder can be used for any value within the JSON edit."
      • removedInput schema / properties / payload / $defs / MergeField / properties
        Removed value: -{
        -  "find": {
        -    "description": "The string to find <u>without</u> delimiters.",
        -    "type": "string"
        -  },
        -  "replace": {
        -    "description": "The replacement value. The replacement can be any valid JSON type - string, boolean, number, etc..."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / MergeField / required
        Removed value: -[
        -  "find",
        -  "replace"
        -]
      • removedInput schema / properties / payload / $defs / MergeField / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / MuxDestination / $ref
        Added value: +"#/$defs/MuxDestination"
      • removedInput schema / properties / payload / $defs / MuxDestination / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / MuxDestination / description
        Removed value: -"**Notice: The Mux destination is deprecated.** It continues to work, with no behaviour change for existing integrations.\nSend videos to the [Mux](https://www.mux.com/docs) video hosting and streaming service. Mux credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/mux), not in the request."
      • removedInput schema / properties / payload / $defs / MuxDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/MuxDestinationOptions",
        -    "description": "Additional Mux configuration and features."
        -  },
        -  "provider": {
        -    "default": "mux",
        -    "description": "The destination to send video to - set to `mux` for Mux.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / MuxDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / MuxDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / MuxDestinationOptions / $ref
        Added value: +"#/$defs/MuxDestinationOptions"
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / description
        Removed value: -"**Notice: MuxDestinationOptions, like the Mux destination, is deprecated.** It continues to work, with no behaviour change for existing integrations.\nPass additional options to control how Mux processes video. Currently supports playback_policy and passthrough options."
      • removedInput schema / properties / payload / $defs / MuxDestinationOptions / properties
        Removed value: -{
        -  "passthrough": {
        -    "description": "Sets the Mux `passthrough` option. Max 255 characters.",
        -    "maxLength": 255,
        -    "type": "string"
        -  },
        -  "playbackPolicy": {
        -    "description": "Sets the Mux `playback_policy` option. Value is an array of strings - use `public`, `signed`, or both.",
        -    "items": {
        -      "enum": [
        -        "public",
        -        "signed"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  }
        -}
      • addedInput schema / properties / payload / $defs / Offset / $ref
        Added value: +"#/$defs/Offset"
      • removedInput schema / properties / payload / $defs / Offset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Offset / description
        Removed value: -"Offsets the position of an asset horizontally or vertically by a relative distance."
      • removedInput schema / properties / payload / $defs / Offset / properties
        Removed value: -{
        -  "x": {
        -    "description": "Offset an asset on the horizontal axis (left or right). Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "Range varies from -10 to 10. Positive numbers move the asset right, negative left. The distance moved is relative to the width  of the viewport - i.e. an X offset of 0.5 will move the asset half the screen width to the right.",
        -        "format": "float",
        -        "maximum": 10,
        -        "minimum": -10,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the X offset of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "y": {
        -    "description": "Offset an asset on the vertical axis (up or down). Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "Range varies from -10 to 10. Positive numbers move the asset up, negative down. The distance moved is relative to the height of the viewport - i.e. an Y offset of 0.5 will move the asset half the screen height up.",
        -        "format": "float",
        -        "maximum": 10,
        -        "minimum": -10,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the Y offset of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Offset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Output / $ref
        Added value: +"#/$defs/Output"
      • removedInput schema / properties / payload / $defs / Output / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Output / description
        Removed value: -"The output format, render range and type of media to generate. For all formats except `mp3`, either `resolution` or `size` (with both `width` and `height`) must be specified."
      • removedInput schema / properties / payload / $defs / Output / properties
        Removed value: -{
        -  "aspectRatio": {
        -    "description": "The aspect ratio (shape) of the video or image. Useful for social media output formats. Options are: <ul>\n  <li>`16:9` (default) - regular landscape/horizontal aspect ratio</li>\n  <li>`9:16` - vertical/portrait aspect ratio</li>\n  <li>`1:1` - square aspect ratio</li>\n  <li>`4:5` - short vertical/portrait aspect ratio</li>\n  <li>`4:3` - legacy TV aspect ratio</li>\n</ul>",
        -    "enum": [
        -      "16:9",
        -      "9:16",
        -      "1:1",
        -      "4:5",
        -      "4:3"
        -    ],
        -    "type": "string"
        -  },
        -  "destinations": {
        -    "description": "Specify the storage locations and hosting services to send rendered videos to.",
        -    "items": {
        -      "$ref": "#/$defs/Destinations"
        -    },
        -    "type": "array"
        -  },
        -  "format": {
        -    "description": "The output format and type of media file to generate. <ul>\n  <li>`mp4` - mp4 video file</li>\n  <li>`gif` - animated gif</li>\n  <li>`jpg` - jpg image file</li>\n  <li>`png` - png image file</li>\n  <li>`bmp` - bmp image file</li>\n  <li>`mp3` - mp3 audio file (audio only)</li>\n</ul>",
        -    "enum": [
        -      "mp4",
        -      "gif",
        -      "mp3",
        -      "jpg",
        -      "png",
        -      "bmp"
        -    ],
        -    "type": "string"
        -  },
        -  "fps": {
        -    "description": "Override the default frames per second. Useful for when the source footage is recorded at 30fps, i.e. on  mobile devices. Lower frame rates can be used to add cinematic quality (24fps) or to create smaller file size/faster render times or animated gifs (12 or 15fps). Default is 25fps. <ul>\n  <li>`12` - 12fps</li>\n  <li>`15` - 15fps</li>\n  <li>`24` - 24fps</li>\n  <li>`23.976` - 23.976fps</li>\n  <li>`25` (default) - 25fps</li>\n  <li>`29.97` - 29.97fps</li>\n  <li>`30` - 30fps</li>\n  <li>`48` - 48fps</li>\n  <li>`50` - 50fps</li>\n  <li>`59.94` - 59.94fps</li>\n  <li>`60` - 60fps</li>\n</ul>",
        -    "enum": [
        -      12,
        -      15,
        -      23.976,
        -      24,
        -      25,
        -      29.97,
        -      30,
        -      48,
        -      50,
        -      59.94,
        -      60
        -    ],
        -    "type": "number"
        -  },
        -  "mute": {
        -    "description": "Mute the audio track of the output video. Set to `true` to mute, `false` to un-mute.",
        -    "type": "boolean"
        -  },
        -  "poster": {
        -    "$ref": "#/$defs/Poster",
        -    "description": "Generate a poster image from a specific point on the timeline."
        -  },
        -  "quality": {
        -    "description": "Adjust the output quality of the video, image or audio. Adjusting quality affects  render speed, download speeds and storage requirements due to file size. The default `medium` provides the most optimized choice for all three  factors. <ul>\n  <li>`verylow` - reduced quality, smallest file size</li>\n  <li>`low` - slightly reduced quality, smaller file size</li>\n  <li>`medium` (default) - optimized quality, render speeds and file size</li>\n  <li>`high` - slightly increased quality, larger file size</li>\n  <li>`veryhigh` - highest quality, largest file size</li>\n</ul>",
        -    "enum": [
        -      "verylow",
        -      "low",
        -      "medium",
        -      "high",
        -      "veryhigh"
        -    ],
        -    "type": "string"
        -  },
        -  "range": {
        -    "$ref": "#/$defs/Range"
        -  },
        -  "repeat": {
        -    "description": "Loop settings for gif files. Set to `true` to loop, `false` to play only once.",
        -    "type": "boolean"
        -  },
        -  "resolution": {
        -    "description": "The preset output resolution of the video or image. For custom sizes use the `size` property. Either `resolution` or `size` (with both `width` and `height`) must be specified for all formats except `mp3`. <ul>\n  <li>`preview` - 512px x 288px @ 15fps</li>\n  <li>`mobile` - 640px x 360px @ 25fps</li>\n  <li>`sd` - 1024px x 576px @ 25fps</li>\n  <li>`hd` - 1280px x 720px @ 25fps</li>\n  <li>`1080` - 1920px x 1080px @ 25fps</li>\n  <li>`4k` - 3840px x 2160px @ 25fps</li>\n</ul>",
        -    "enum": [
        -      "preview",
        -      "mobile",
        -      "sd",
        -      "hd",
        -      "1080",
        -      "4k"
        -    ],
        -    "type": "string"
        -  },
        -  "scaleTo": {
        -    "description": "Override the resolution and scale the video or image to render at a different size. When using scaleTo the asset should be edited at the resolution dimensions, i.e. use font sizes that look best at HD, then use scaleTo to output the file at SD and the text will be scaled to the correct size. This is useful if you want to create multiple asset sizes. <ul>\n  <li>`preview` - 512px x 288px @ 15fps</li>\n  <li>`mobile` - 640px x 360px @ 25fps</li>\n  <li>`sd` - 1024px x 576px @25fps</li>\n  <li>`hd` - 1280px x 720px @25fps</li>\n  <li>`1080` - 1920px x 1080px @25fps</li>\n</ul>",
        -    "enum": [
        -      "preview",
        -      "mobile",
        -      "sd",
        -      "hd",
        -      "1080",
        -      "4k"
        -    ],
        -    "type": "string"
        -  },
        -  "size": {
        -    "$ref": "#/$defs/Size"
        -  },
        -  "thumbnail": {
        -    "$ref": "#/$defs/Thumbnail",
        -    "description": "Generate a thumbnail image from a specific point on the timeline."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Output / required
        Removed value: -[
        -  "format"
        -]
      • removedInput schema / properties / payload / $defs / Output / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Poster / $ref
        Added value: +"#/$defs/Poster"
      • removedInput schema / properties / payload / $defs / Poster / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Poster / description
        Removed value: -"Generate a poster image for the video at a specific point from the timeline. The poster image size will match the size of the output video."
      • removedInput schema / properties / payload / $defs / Poster / properties
        Removed value: -{
        -  "capture": {
        -    "description": "The point on the timeline in seconds to capture a single frame to use as the poster image.",
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Poster / required
        Removed value: -[
        -  "capture"
        -]
      • removedInput schema / properties / payload / $defs / Poster / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Range / $ref
        Added value: +"#/$defs/Range"
      • removedInput schema / properties / payload / $defs / Range / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Range / description
        Removed value: -"Specify a time range to render, i.e. to render only a portion of a video or audio file. Omit this setting to  export the entire video. Range can also be used to render a frame at a specific time point - setting a range and output format as `jpg` will output a single frame image at the range `start` point."
      • removedInput schema / properties / payload / $defs / Range / properties
        Removed value: -{
        -  "length": {
        -    "description": "The length of the portion of the video or audio to render - i.e. render 6 seconds of the video.",
        -    "format": "float",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "start": {
        -    "description": "The point on the timeline, in seconds, to start the render from - i.e. start at second 3.",
        -    "format": "float",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Range / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichCaptionActive / $ref
        Added value: +"#/$defs/RichCaptionActive"
      • removedInput schema / properties / payload / $defs / RichCaptionActive / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichCaptionActive / description
        Removed value: -"Styling properties for the active/highlighted word."
      • removedInput schema / properties / payload / $defs / RichCaptionActive / properties
        Removed value: -{
        -  "font": {
        -    "$ref": "#/$defs/RichCaptionActiveFont",
        -    "description": "Font properties for the active word."
        -  },
        -  "shadow": {
        -    "description": "Shadow properties for the active word. Set to \"none\" to explicitly remove the base shadow on the active word.",
        -    "oneOf": [
        -      {
        -        "$ref": "#/$defs/RichTextShadow"
        -      },
        -      {
        -        "enum": [
        -          "none"
        -        ],
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  "stroke": {
        -    "description": "Stroke properties for the active word. Set to \"none\" to explicitly remove the base stroke on the active word.",
        -    "oneOf": [
        -      {
        -        "$ref": "#/$defs/RichTextStroke"
        -      },
        -      {
        -        "enum": [
        -          "none"
        -        ],
        -        "type": "string"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichCaptionActive / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichCaptionActiveFont / $ref
        Added value: +"#/$defs/RichCaptionActiveFont"
      • removedInput schema / properties / payload / $defs / RichCaptionActiveFont / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichCaptionActiveFont / description
        Removed value: -"Font properties for the active/highlighted word."
      • removedInput schema / properties / payload / $defs / RichCaptionActiveFont / properties
        Removed value: -{
        -  "background": {
        -    "description": "The background color behind the active word using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "color": {
        -    "description": "The active word color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "family": {
        -    "description": "The font family for the active word. Inherits from the base font.family when not set.",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the active word where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "size": {
        -    "description": "The font size of the active word in pixels.",
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "number"
        -  },
        -  "textDecoration": {
        -    "default": "none",
        -    "description": "Text decoration to apply to the active word.",
        -    "enum": [
        -      "none",
        -      "underline",
        -      "line-through"
        -    ],
        -    "type": "string"
        -  },
        -  "weight": {
        -    "default": "400",
        -    "description": "The weight of the font for the active word. Can be a number (100-900) or a string. Inherits from the base font.weight when not set.\n"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichCaptionActiveFont / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichCaptionAnimation / $ref
        Added value: +"#/$defs/RichCaptionAnimation"
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / description
        Removed value: -"Word-level animation properties for caption effects."
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / properties
        Removed value: -{
        -  "direction": {
        -    "default": "up",
        -    "description": "Direction for directional animations (slide). Only applicable when style is `slide`.",
        -    "enum": [
        -      "left",
        -      "right",
        -      "up",
        -      "down"
        -    ],
        -    "type": "string"
        -  },
        -  "style": {
        -    "default": "highlight",
        -    "description": "The animation style to apply to words: <ul>\n  <li>`karaoke` - Word-by-word color fill as spoken (shows all words, highlights active)</li>\n  <li>`highlight` - Word changes to active color when spoken (shows all words)</li>\n  <li>`pop` - Each word scales up when active</li>\n  <li>`fade` - Gradual opacity transition per word</li>\n  <li>`slide` - Words slide in from a direction</li>\n  <li>`bounce` - Spring animation on word appearance</li>\n  <li>`typewriter` - Words appear one by one and stay visible</li>\n  <li>`none` - No animation, all words visible immediately</li>\n</ul>",
        -    "enum": [
        -      "karaoke",
        -      "highlight",
        -      "pop",
        -      "fade",
        -      "slide",
        -      "bounce",
        -      "typewriter",
        -      "none"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / required
        Removed value: -[
        -  "style"
        -]
      • removedInput schema / properties / payload / $defs / RichCaptionAnimation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichCaptionAsset / $ref
        Added value: +"#/$defs/RichCaptionAsset"
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / description
        Removed value: -"The RichCaptionAsset provides word-level caption animations with rich-text styling. It supports\nkaraoke-style highlighting, word-by-word animations, and advanced typography. Captions can be\nsourced from SRT/VTT/TTML subtitle files, from audio/video media URLs (auto-transcribed), or\nfrom alias references to other clips in the same timeline.\n"
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / properties
        Removed value: -{
        -  "active": {
        -    "$ref": "#/$defs/RichCaptionActive",
        -    "description": "Styling properties for the active/highlighted word. These override the base styling when a word is being spoken."
        -  },
        -  "align": {
        -    "$ref": "#/$defs/RichTextAlignment",
        -    "description": "Text alignment properties (horizontal and vertical)."
        -  },
        -  "animation": {
        -    "$ref": "#/$defs/RichCaptionAnimation",
        -    "description": "Word-level animation properties controlling how words are highlighted or revealed."
        -  },
        -  "background": {
        -    "$ref": "#/$defs/RichTextBackground",
        -    "description": "Background styling properties for the caption bounding box."
        -  },
        -  "border": {
        -    "$ref": "#/$defs/RichTextBorder",
        -    "description": "Border styling properties for the caption bounding box."
        -  },
        -  "font": {
        -    "additionalProperties": false,
        -    "description": "Font styling properties for inactive words.",
        -    "properties": {
        -      "background": {
        -        "description": "The background color behind the text using hexadecimal color notation.",
        -        "pattern": "^#[A-Fa-f0-9]{6}$",
        -        "type": "string"
        -      },
        -      "color": {
        -        "default": "#ffffff",
        -        "description": "The text color using hexadecimal color notation.",
        -        "pattern": "^#[A-Fa-f0-9]{6}$",
        -        "type": "string"
        -      },
        -      "family": {
        -        "default": "Roboto",
        -        "description": "The font family name. This must be the Family name embedded in the font, i.e. \"Roboto\".",
        -        "type": "string"
        -      },
        -      "opacity": {
        -        "default": 1,
        -        "description": "The opacity of the text where 1 is opaque and 0 is transparent.",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "size": {
        -        "default": 24,
        -        "description": "The size of the font in pixels (px). Must be between 1 and 500.",
        -        "maximum": 500,
        -        "minimum": 1,
        -        "type": "integer"
        -      },
        -      "style": {
        -        "default": "normal",
        -        "description": "The font style.",
        -        "enum": [
        -          "normal",
        -          "italic"
        -        ],
        -        "type": "string"
        -      },
        -      "weight": {
        -        "default": "400",
        -        "description": "The weight of the font. Can be a number (100-900) or a string ('normal', 'bold', etc.). 100 is lightest, 900 is heaviest (boldest)."
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "padding": {
        -    "description": "Padding inside the caption bounding box. Can be a single number (applied to all sides) or an object with individual sides.",
        -    "oneOf": [
        -      {
        -        "description": "Padding in pixels applied to all sides.",
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "$ref": "#/$defs/RichTextPadding"
        -      }
        -    ]
        -  },
        -  "shadow": {
        -    "$ref": "#/$defs/RichTextShadow",
        -    "description": "Text shadow properties."
        -  },
        -  "src": {
        -    "description": "Source for the caption words. Accepts three formats: (1) the URL to a subtitle file (`.srt`, `.vtt`, `.ttml`, or `.dfxp`) which is parsed directly; (2) the URL to an audio or video media file (`.mp4`, `.mov`, `.webm`, `.mp3`, `.wav`, `.m4a`, `.flac`, `.aac`, `.ogg`, and related formats) which is auto-transcribed; (3) an alias reference in the form `alias://clip-name` where `clip-name` is the alias of another audio, video, or text-to-speech clip in the same timeline — the referenced clip's source is auto-transcribed. For file URLs, the URL must be publicly accessible or include credentials. Content is classified at runtime and unsupported content types (HTML, PDF, images, archives) are rejected with a structured error.",
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  "stroke": {
        -    "$ref": "#/$defs/RichTextStroke",
        -    "description": "Text stroke (outline) properties for inactive words."
        -  },
        -  "style": {
        -    "additionalProperties": false,
        -    "description": "Text style properties including spacing, line height, and transformations.",
        -    "properties": {
        -      "gradient": {
        -        "$ref": "#/$defs/RichTextGradient",
        -        "description": "Gradient fill for text instead of solid color."
        -      },
        -      "letterSpacing": {
        -        "default": 0,
        -        "description": "Additional spacing between letters in pixels. Can be negative for tighter spacing.",
        -        "type": "number"
        -      },
        -      "lineHeight": {
        -        "default": 1.2,
        -        "description": "The line height as a multiplier of the font size. Must be between 0 and 10.",
        -        "maximum": 10,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "size": {
        -        "description": "The font size in pixels. Can be used as an alternative to font.size.",
        -        "maximum": 500,
        -        "minimum": 1,
        -        "type": "number"
        -      },
        -      "textDecoration": {
        -        "default": "none",
        -        "description": "Text decoration to apply.",
        -        "enum": [
        -          "none",
        -          "underline",
        -          "line-through"
        -        ],
        -        "type": "string"
        -      },
        -      "textTransform": {
        -        "default": "none",
        -        "description": "Text transformation to apply.",
        -        "enum": [
        -          "none",
        -          "uppercase",
        -          "lowercase",
        -          "capitalize"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "type": {
        -    "default": "rich-caption",
        -    "description": "The type of asset - set to `rich-caption` for rich captions.",
        -    "enum": [
        -      "rich-caption"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / RichCaptionAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextAlignment / $ref
        Added value: +"#/$defs/RichTextAlignment"
      • removedInput schema / properties / payload / $defs / RichTextAlignment / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextAlignment / description
        Removed value: -"Text alignment properties (horizontal and vertical)."
      • removedInput schema / properties / payload / $defs / RichTextAlignment / properties
        Removed value: -{
        -  "horizontal": {
        -    "default": "center",
        -    "description": "The horizontal alignment of the text.",
        -    "enum": [
        -      "left",
        -      "center",
        -      "right"
        -    ],
        -    "type": "string"
        -  },
        -  "vertical": {
        -    "default": "middle",
        -    "description": "The vertical alignment of the text within the bounding box.",
        -    "enum": [
        -      "top",
        -      "middle",
        -      "bottom"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextAlignment / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextAnimation / $ref
        Added value: +"#/$defs/RichTextAnimation"
      • removedInput schema / properties / payload / $defs / RichTextAnimation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextAnimation / description
        Removed value: -"Animation properties for text entrance effects."
      • removedInput schema / properties / payload / $defs / RichTextAnimation / properties
        Removed value: -{
        -  "direction": {
        -    "description": "Direction for directional animations. Required for slideIn, ascend, shift, and movingLetters presets. <ul>\n  <li>`ascend` - supports: up, down</li>\n  <li>`shift` - supports: left, right, up, down</li>\n  <li>`slideIn` - supports: left, right, up, down</li>\n  <li>`movingLetters` - supports: left, right, up, down</li>\n</ul>",
        -    "enum": [
        -      "left",
        -      "right",
        -      "up",
        -      "down"
        -    ],
        -    "type": "string"
        -  },
        -  "duration": {
        -    "description": "Override animation duration in seconds. Must be between 0.1 and 30 seconds.",
        -    "maximum": 30,
        -    "minimum": 0.1,
        -    "type": "number"
        -  },
        -  "preset": {
        -    "description": "The animation preset to apply. Available presets: <ul>\n  <li>`fadeIn` - fadeIn in animation</li>\n  <li>`slideIn` - slide in from a direction</li>\n  <li>`typewriter` - typewriter effect</li>\n  <li>`ascend` - ascend from a direction</li>\n  <li>`shift` - shift in from a direction</li>\n  <li>`movingLetters` - letters move in from a direction</li>\n</ul>",
        -    "enum": [
        -      "fadeIn",
        -      "slideIn",
        -      "typewriter",
        -      "ascend",
        -      "shift",
        -      "movingLetters"
        -    ],
        -    "type": "string"
        -  },
        -  "style": {
        -    "description": "Animation style - animate by character or by word. Only applicable for typewriter and shift animations.",
        -    "enum": [
        -      "character",
        -      "word"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextAnimation / required
        Removed value: -[
        -  "preset"
        -]
      • removedInput schema / properties / payload / $defs / RichTextAnimation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextAsset / $ref
        Added value: +"#/$defs/RichTextAsset"
      • removedInput schema / properties / payload / $defs / RichTextAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextAsset / description
        Removed value: -"The RichTextAsset provides advanced text rendering with support for custom fonts, gradients, shadows, strokes,\nanimations, and styling options. It offers more flexibility and visual effects than the basic TextAsset.\n"
      • removedInput schema / properties / payload / $defs / RichTextAsset / properties
        Removed value: -{
        -  "align": {
        -    "$ref": "#/$defs/RichTextAlignment",
        -    "description": "Text alignment properties (horizontal and vertical)."
        -  },
        -  "animation": {
        -    "$ref": "#/$defs/RichTextAnimation",
        -    "description": "Animation properties for text entrance effects."
        -  },
        -  "background": {
        -    "$ref": "#/$defs/RichTextBackground",
        -    "description": "Background styling properties for the text bounding box."
        -  },
        -  "border": {
        -    "$ref": "#/$defs/RichTextBorder",
        -    "description": "Border styling properties for the text bounding box."
        -  },
        -  "font": {
        -    "$ref": "#/$defs/RichTextFont",
        -    "description": "Font styling properties."
        -  },
        -  "padding": {
        -    "description": "Padding inside the text bounding box. Can be a single number (applied to all sides) or an object with individual sides.",
        -    "oneOf": [
        -      {
        -        "description": "Padding in pixels applied to all sides.",
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "$ref": "#/$defs/RichTextPadding"
        -      }
        -    ]
        -  },
        -  "shadow": {
        -    "$ref": "#/$defs/RichTextShadow",
        -    "description": "Text shadow properties."
        -  },
        -  "stroke": {
        -    "$ref": "#/$defs/RichTextStroke",
        -    "description": "Text stroke (outline) properties."
        -  },
        -  "style": {
        -    "$ref": "#/$defs/RichTextStyle",
        -    "description": "Text style properties including spacing, line height, and transformations."
        -  },
        -  "text": {
        -    "description": "The text string to display. Maximum 5000 characters.",
        -    "maxLength": 5000,
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "rich-text",
        -    "description": "The type of asset - set to `rich-text` for rich text.",
        -    "enum": [
        -      "rich-text"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextAsset / required
        Removed value: -[
        -  "type",
        -  "text"
        -]
      • removedInput schema / properties / payload / $defs / RichTextAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextBackground / $ref
        Added value: +"#/$defs/RichTextBackground"
      • removedInput schema / properties / payload / $defs / RichTextBackground / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextBackground / description
        Removed value: -"Background styling properties for the text bounding box."
      • removedInput schema / properties / payload / $defs / RichTextBackground / properties
        Removed value: -{
        -  "borderRadius": {
        -    "default": 0,
        -    "description": "The border radius of the background box in pixels. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "color": {
        -    "description": "The background color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the background where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "padding": {
        -    "description": "Inner padding in pixels between the wrap pill edge and the rendered text. Only takes\neffect when `wrap: true`. When omitted, the renderer applies a sensible default\nproportional to the font size (approximately 12% of the active page font size on\nrich-caption assets). Set to 0 for a pill that hugs the text exactly. Available on\nrich-text and rich-caption assets only.\n",
        -    "maximum": 200,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  "wrap": {
        -    "default": false,
        -    "description": "When true, the background pill shrinks to fit the rendered text bounding box plus the\nasset's padding (and stroke width, if present), producing a pill or badge effect. When\nfalse (default), the background fills the full asset content area. Available on\nrich-text and rich-caption assets only; not supported on legacy `type: text`.\n",
        -    "type": "boolean"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextBackground / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextBorder / $ref
        Added value: +"#/$defs/RichTextBorder"
      • removedInput schema / properties / payload / $defs / RichTextBorder / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextBorder / description
        Removed value: -"Border styling properties for the text bounding box."
      • removedInput schema / properties / payload / $defs / RichTextBorder / properties
        Removed value: -{
        -  "color": {
        -    "default": "#000000",
        -    "description": "The border color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the border where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "radius": {
        -    "default": 0,
        -    "description": "The border radius in pixels for rounded corners. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "width": {
        -    "default": 0,
        -    "description": "The width of the border in pixels. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextBorder / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextFont / $ref
        Added value: +"#/$defs/RichTextFont"
      • removedInput schema / properties / payload / $defs / RichTextFont / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextFont / description
        Removed value: -"Font properties for rich text."
      • removedInput schema / properties / payload / $defs / RichTextFont / properties
        Removed value: -{
        -  "background": {
        -    "description": "The background color behind the text using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "color": {
        -    "default": "#000000",
        -    "description": "The text color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "family": {
        -    "default": "Open Sans",
        -    "description": "The font family name. This must be the Family name embedded in the font, i.e. \"Open Sans\".",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the text where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "size": {
        -    "default": 24,
        -    "description": "The size of the font in pixels (px). Must be between 1 and 500.",
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  "stroke": {
        -    "$ref": "#/$defs/RichTextStroke",
        -    "description": "Text stroke (outline) properties."
        -  },
        -  "style": {
        -    "default": "normal",
        -    "description": "The font style.",
        -    "enum": [
        -      "normal",
        -      "italic"
        -    ],
        -    "type": "string"
        -  },
        -  "weight": {
        -    "default": "400",
        -    "description": "The weight of the font. Can be a number (100-900) or a string ('normal', 'bold', etc.). 100 is lightest, 900 is heaviest (boldest)."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextFont / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextGradient / $ref
        Added value: +"#/$defs/RichTextGradient"
      • removedInput schema / properties / payload / $defs / RichTextGradient / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextGradient / description
        Removed value: -"Gradient properties for text fill."
      • removedInput schema / properties / payload / $defs / RichTextGradient / properties
        Removed value: -{
        -  "angle": {
        -    "default": 0,
        -    "description": "The angle of the gradient in degrees (for linear gradients). Must be between 0 and 360.",
        -    "maximum": 360,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "stops": {
        -    "description": "Gradient color stops. Must have at least 2 stops.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "color": {
        -          "description": "Color at this stop using hexadecimal color notation.",
        -          "pattern": "^#[A-Fa-f0-9]{6}$",
        -          "type": "string"
        -        },
        -        "offset": {
        -          "description": "Position of the color stop between 0 (start) and 1 (end).",
        -          "maximum": 1,
        -          "minimum": 0,
        -          "type": "number"
        -        }
        -      },
        -      "required": [
        -        "offset",
        -        "color"
        -      ],
        -      "type": "object"
        -    },
        -    "minItems": 2,
        -    "type": "array"
        -  },
        -  "type": {
        -    "default": "linear",
        -    "description": "The type of gradient.",
        -    "enum": [
        -      "linear",
        -      "radial"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextGradient / required
        Removed value: -[
        -  "stops"
        -]
      • removedInput schema / properties / payload / $defs / RichTextGradient / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextPadding / $ref
        Added value: +"#/$defs/RichTextPadding"
      • removedInput schema / properties / payload / $defs / RichTextPadding / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextPadding / description
        Removed value: -"Padding properties for individual sides of the text bounding box."
      • removedInput schema / properties / payload / $defs / RichTextPadding / properties
        Removed value: -{
        -  "bottom": {
        -    "default": 0,
        -    "description": "Bottom padding in pixels.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "left": {
        -    "default": 0,
        -    "description": "Left padding in pixels.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "right": {
        -    "default": 0,
        -    "description": "Right padding in pixels.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "top": {
        -    "default": 0,
        -    "description": "Top padding in pixels.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextPadding / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextShadow / $ref
        Added value: +"#/$defs/RichTextShadow"
      • removedInput schema / properties / payload / $defs / RichTextShadow / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextShadow / description
        Removed value: -"Text shadow properties."
      • removedInput schema / properties / payload / $defs / RichTextShadow / properties
        Removed value: -{
        -  "blur": {
        -    "default": 0,
        -    "description": "The blur radius of the shadow in pixels. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "color": {
        -    "default": "#000000",
        -    "description": "The shadow color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "offsetX": {
        -    "default": 0,
        -    "description": "Horizontal offset of the shadow in pixels. Positive values move right, negative left.",
        -    "type": "number"
        -  },
        -  "offsetY": {
        -    "default": 0,
        -    "description": "Vertical offset of the shadow in pixels. Positive values move down, negative up.",
        -    "type": "number"
        -  },
        -  "opacity": {
        -    "default": 0.5,
        -    "description": "The opacity of the shadow where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextShadow / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextStroke / $ref
        Added value: +"#/$defs/RichTextStroke"
      • removedInput schema / properties / payload / $defs / RichTextStroke / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextStroke / description
        Removed value: -"Text stroke (outline) properties."
      • removedInput schema / properties / payload / $defs / RichTextStroke / properties
        Removed value: -{
        -  "color": {
        -    "default": "#000000",
        -    "description": "The stroke color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "default": 1,
        -    "description": "The opacity of the stroke where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "width": {
        -    "default": 0,
        -    "description": "The width of the stroke in pixels. Must be 0 or greater.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextStroke / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RichTextStyle / $ref
        Added value: +"#/$defs/RichTextStyle"
      • removedInput schema / properties / payload / $defs / RichTextStyle / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RichTextStyle / description
        Removed value: -"Text style properties including spacing, line height, and transformations."
      • removedInput schema / properties / payload / $defs / RichTextStyle / properties
        Removed value: -{
        -  "gradient": {
        -    "$ref": "#/$defs/RichTextGradient",
        -    "description": "Gradient fill for text instead of solid color."
        -  },
        -  "letterSpacing": {
        -    "default": 0,
        -    "description": "Additional spacing between letters in pixels. Can be negative for tighter spacing.",
        -    "type": "number"
        -  },
        -  "lineHeight": {
        -    "default": 1.2,
        -    "description": "The line height as a multiplier of the font size. Must be between 0 and 10.",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "textDecoration": {
        -    "default": "none",
        -    "description": "Text decoration to apply.",
        -    "enum": [
        -      "none",
        -      "underline",
        -      "line-through"
        -    ],
        -    "type": "string"
        -  },
        -  "textTransform": {
        -    "default": "none",
        -    "description": "Text transformation to apply.",
        -    "enum": [
        -      "none",
        -      "uppercase",
        -      "lowercase",
        -      "capitalize"
        -    ],
        -    "type": "string"
        -  },
        -  "wordSpacing": {
        -    "default": 0,
        -    "description": "Additional spacing between words in pixels. A value of 0 uses the font's natural space width.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RichTextStyle / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / RotateTransformation / $ref
        Added value: +"#/$defs/RotateTransformation"
      • removedInput schema / properties / payload / $defs / RotateTransformation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / RotateTransformation / description
        Removed value: -"Rotate a clip by the specified angle in degrees. Rotation origin is set based on the clips `position`."
      • removedInput schema / properties / payload / $defs / RotateTransformation / properties
        Removed value: -{
        -  "angle": {
        -    "description": "Rotate a clip by the specified angle in degrees. Use a number or an array of [Tween](./#tocs_tween) objects to create a custom animation.",
        -    "oneOf": [
        -      {
        -        "description": "The angle to rotate the clip. Can be 0 to 360, or 0 to -360. Using a positive number rotates the clip clockwise, negative numbers counter-clockwise.",
        -        "format": "float",
        -        "maximum": 360,
        -        "minimum": -360,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the rotation of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / RotateTransformation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / S3Destination / $ref
        Added value: +"#/$defs/S3Destination"
      • removedInput schema / properties / payload / $defs / S3Destination / description
        Removed value: -"Send videos and assets to an [Amazon S3](https://shotstack.io/docs/guide/serving-assets/destinations/s3/) bucket. Send files to any region with your own prefix and filename. AWS credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/s3), not in the request."
      • removedInput schema / properties / payload / $defs / S3Destination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/S3DestinationOptions",
        -    "description": "Additional S3 configuration options."
        -  },
        -  "provider": {
        -    "default": "s3",
        -    "description": "The destination to send assets to - set to `s3` for S3.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / S3Destination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / S3Destination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / S3DestinationOptions / $ref
        Added value: +"#/$defs/S3DestinationOptions"
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / description
        Removed value: -"Pass additional options to control how files are stored in S3."
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / properties
        Removed value: -{
        -  "acl": {
        -    "description": "Sets the S3 Access Control List (acl) permissions. Default is `private`. Must use a valid  S3 [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl).",
        -    "type": "string"
        -  },
        -  "bucket": {
        -    "description": "The bucket name to send files to. The bucket must exist in the AWS account before files can be sent.",
        -    "type": "string"
        -  },
        -  "filename": {
        -    "description": "Use your own filename instead of the default filenames generated by Shotstack. Note: omit the file extension as this will be appended depending on the output format. Also `-poster.jpg` and `-thumb.jpg` will be appended for poster and thumbnail images.",
        -    "type": "string"
        -  },
        -  "prefix": {
        -    "description": "A prefix for the file being sent. This is typically a folder name, i.e. `videos` or `customerId/videos`.",
        -    "type": "string"
        -  },
        -  "region": {
        -    "description": "Choose the region to send the file to. Must be a valid  [AWS region](https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_region) string like `us-east-1` or `ap-southeast-2`.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / S3DestinationOptions / required
        Removed value: -[
        -  "region",
        -  "bucket"
        -]
      • addedInput schema / properties / payload / $defs / ShapeAsset / $ref
        Added value: +"#/$defs/ShapeAsset"
      • removedInput schema / properties / payload / $defs / ShapeAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / ShapeAsset / description
        Removed value: -"The ShapeAsset is used to add shapes to a video. The shape can be styled with a fill and a stroke.\nYou can manipulate properties such as rotation to create dynamic effects like a diamond shape or stripes.\n"
      • removedInput schema / properties / payload / $defs / ShapeAsset / properties
        Removed value: -{
        -  "circle": {
        -    "additionalProperties": false,
        -    "description": "Configuration settings for the circle shape. Required when `shape` is set to `circle`.",
        -    "properties": {
        -      "radius": {
        -        "description": "Set the radius of the circle shape in pixels.",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "radius"
        -    ],
        -    "type": "object"
        -  },
        -  "fill": {
        -    "additionalProperties": false,
        -    "description": "Specifies the fill style of the shape.",
        -    "properties": {
        -      "color": {
        -        "description": "The color of the fill using hexadecimal color notation.",
        -        "type": "string"
        -      },
        -      "opacity": {
        -        "description": "The opacity of the fill where 1 is opaque and 0 is transparent.",
        -        "type": "number"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "height": {
        -    "description": "Sets the height of the bounding box in pixels. This value should be larger than the shape's height. If omitted, the entire viewport width and height will be used.",
        -    "type": "integer"
        -  },
        -  "line": {
        -    "additionalProperties": false,
        -    "description": "Configuration settings for the line shape. Required when `shape` is set to `line`.",
        -    "properties": {
        -      "length": {
        -        "description": "Set the length of the line shape in pixels.",
        -        "type": "integer"
        -      },
        -      "thickness": {
        -        "description": "Set the thickness of the line in pixels.",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "length",
        -      "thickness"
        -    ],
        -    "type": "object"
        -  },
        -  "rectangle": {
        -    "additionalProperties": false,
        -    "description": "Configuration settings for the rectangle shape. Required when `shape` is set to `rectangle`.",
        -    "properties": {
        -      "cornerRadius": {
        -        "description": "Set the corner radius of the rectangle shape.",
        -        "type": "integer"
        -      },
        -      "height": {
        -        "description": "Set the height of the rectangle shape in pixels.",
        -        "type": "integer"
        -      },
        -      "width": {
        -        "description": "Set the width of the rectangle shape in pixels.",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "width",
        -      "height"
        -    ],
        -    "type": "object"
        -  },
        -  "shape": {
        -    "description": "The shape to display.",
        -    "enum": [
        -      "rectangle",
        -      "circle",
        -      "line"
        -    ],
        -    "type": "string"
        -  },
        -  "stroke": {
        -    "additionalProperties": false,
        -    "description": "Specifies the stroke style of the shape.",
        -    "properties": {
        -      "color": {
        -        "description": "The stroke color of the font using hexadecimal color notation.",
        -        "type": "string"
        -      },
        -      "width": {
        -        "description": "The width of the stroke in pixels.",
        -        "type": "number"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "type": {
        -    "default": "shape",
        -    "description": "The type of asset - set to `shape` for shape.",
        -    "enum": [
        -      "shape"
        -    ],
        -    "type": "string"
        -  },
        -  "width": {
        -    "description": "Sets the width of the bounding box in pixels. This value should be larger than the shape's width. If omitted, the entire viewport width and height will be used.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ShapeAsset / required
        Removed value: -[
        -  "type",
        -  "shape"
        -]
      • removedInput schema / properties / payload / $defs / ShapeAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / ShotstackDestination / $ref
        Added value: +"#/$defs/ShotstackDestination"
      • removedInput schema / properties / payload / $defs / ShotstackDestination / description
        Removed value: -"Send videos and assets to the  [Shotstack hosting and CDN](https://shotstack.io/docs/guide/serving-assets/destinations/shotstack/) service.  This destination is enabled by default."
      • removedInput schema / properties / payload / $defs / ShotstackDestination / properties
        Removed value: -{
        -  "exclude": {
        -    "description": "Set to `true` to [opt-out](https://shotstack.io/docs/guide/serving-assets/self-host/) from the Shotstack hosting and CDN service. All files must be downloaded within 24 hours of rendering.",
        -    "type": "boolean"
        -  },
        -  "provider": {
        -    "default": "shotstack",
        -    "description": "The destination to send assets to - set to `shotstack` for Shotstack hosting and CDN.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / ShotstackDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / ShotstackDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Size / $ref
        Added value: +"#/$defs/Size"
      • removedInput schema / properties / payload / $defs / Size / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Size / description
        Removed value: -"Set a custom size for a video or image in pixels. When using a custom size omit the `resolution` and `aspectRatio`. Custom sizes must be divisible by 2 based on the encoder specifications."
      • removedInput schema / properties / payload / $defs / Size / properties
        Removed value: -{
        -  "height": {
        -    "description": "Set a custom height for the video or image file in pixels. Value must be divisible by 2. Maximum video height is 1920px, maximum image height is 4096px.",
        -    "maximum": 4096,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  "width": {
        -    "description": "Set a custom width for the video or image file in pixels. Value must be divisible by 2. Maximum video width is 1920px, maximum image width is 4096px.",
        -    "maximum": 4096,
        -    "minimum": 1,
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Size / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / SkewTransformation / $ref
        Added value: +"#/$defs/SkewTransformation"
      • removedInput schema / properties / payload / $defs / SkewTransformation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / SkewTransformation / description
        Removed value: -"Skew a clip so its edges are sheared at an angle. Use values between -100 and 100. Values over 3 or under -3 will skew the clip almost flat."
      • removedInput schema / properties / payload / $defs / SkewTransformation / properties
        Removed value: -{
        -  "x": {
        -    "description": "Skew the clip along it's x axis.",
        -    "oneOf": [
        -      {
        -        "description": "Range varies from -100 to 100. Positive numbers skew the asset right, negative left. The distance moved is relative to the width of the viewport - i.e. an X skew of 0.5 will skew the asset half the screen width to the right.",
        -        "format": "float",
        -        "maximum": 100,
        -        "minimum": -100,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the X skew of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "y": {
        -    "description": "Skew the clip along it's y axis.",
        -    "oneOf": [
        -      {
        -        "description": "Range varies from -100 to 100. Positive numbers skew the asset up, negative down. The distance moved is relative to the height of the viewport - i.e. an Y skew of 0.5 will skew the asset half the screen height up.",
        -        "format": "float",
        -        "maximum": 100,
        -        "minimum": -100,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom animation. Animate the Y skew of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / SkewTransformation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Soundtrack / $ref
        Added value: +"#/$defs/Soundtrack"
      • removedInput schema / properties / payload / $defs / Soundtrack / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Soundtrack / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / Soundtrack / description
        Removed value: -"**Notice: The Soundtrack is deprecated, use an [AudioAsset](#tocs_audioasset) clip on its own track instead.** This type continues to function; no behaviour change for existing integrations.\nA music or audio file in mp3 format that plays for the duration of the rendered video or the length of the audio file, which ever is shortest."
      • removedInput schema / properties / payload / $defs / Soundtrack / properties
        Removed value: -{
        -  "effect": {
        -    "description": "The effect to apply to the audio file <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        -    "enum": [
        -      "fadeIn",
        -      "fadeOut",
        -      "fadeInFadeOut"
        -    ],
        -    "type": "string"
        -  },
        -  "src": {
        -    "description": "The URL of the mp3 audio file. The URL must be publicly accessible or include credentials.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Set the volume for the soundtrack between 0 and 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Soundtrack / required
        Removed value: -[
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / Soundtrack / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / SvgAsset / $ref
        Added value: +"#/$defs/SvgAsset"
      • removedInput schema / properties / payload / $defs / SvgAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / SvgAsset / description
        Removed value: -"The SvgAsset is used to add scalable vector graphics (SVG) to a video using raw SVG markup.\n\n**Supported elements:** `<path>`, `<rect>`, `<circle>`, `<ellipse>`,\n`<line>`, `<polygon>`, `<polyline>`\n\n**Automatically extracted from SVG markup:**\n- Path data (converted to a single combined path)\n- Fill color (from `fill` attribute or `style`)\n- Stroke color and width (from attributes or `style`)\n- Dimensions (from `width`/`height` or `viewBox`)\n- Opacity (from `opacity` attribute)\n\nSee [W3C SVG 2 Specification](https://www.w3.org/TR/SVG2/) for path data syntax.\n"
      • removedInput schema / properties / payload / $defs / SvgAsset / properties
        Removed value: -{
        -  "src": {
        -    "description": "Raw SVG markup string. The SVG must contain valid SVG elements. The shape,\nfill, stroke, dimensions and opacity are automatically extracted from the\nSVG content.\n",
        -    "maxLength": 500000,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "svg",
        -    "description": "The asset type - set to `svg` for SVG assets.",
        -    "enum": [
        -      "svg"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / SvgAsset / required
        Removed value: -[
        -  "type",
        -  "src"
        -]
      • removedInput schema / properties / payload / $defs / SvgAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextAlignment / $ref
        Added value: +"#/$defs/TextAlignment"
      • removedInput schema / properties / payload / $defs / TextAlignment / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextAlignment / description
        Removed value: -"Horizontal and vertical alignment properties for text."
      • removedInput schema / properties / payload / $defs / TextAlignment / properties
        Removed value: -{
        -  "horizontal": {
        -    "description": "The horizontal alignment of the text. Value must be one of: <ul>\n  <li>`left`</li>\n  <li>`center`</li>\n  <li>`right`</li>\n</ul>",
        -    "enum": [
        -      "left",
        -      "center",
        -      "right"
        -    ],
        -    "type": "string"
        -  },
        -  "vertical": {
        -    "description": "The vertical alignment of the text. Value must be one of: <ul>\n  <li>`top`</li>\n  <li>`center`</li>\n  <li>`bottom`</li>\n</ul>",
        -    "enum": [
        -      "top",
        -      "center",
        -      "bottom"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextAlignment / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextAsset / $ref
        Added value: +"#/$defs/TextAsset"
      • removedInput schema / properties / payload / $defs / TextAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / TextAsset / description
        Removed value: -"**Notice: The TextAsset is deprecated, use the [RichTextAsset](#tocs_richtextasset) instead.** This type\ncontinues to function; no behaviour change for existing integrations.\n\nThe TextAsset is used to add text and titles to a video. The text can be styled with built in and custom\n[Fonts](#tocs_font). You can also add a background bounding box used to control wrapping and overflow. Emoticons are also supported.\n"
      • removedInput schema / properties / payload / $defs / TextAsset / properties
        Removed value: -{
        -  "alignment": {
        -    "$ref": "#/$defs/TextAlignment",
        -    "description": "Alignment properties."
        -  },
        -  "animation": {
        -    "additionalProperties": false,
        -    "description": "Animation properties for text entrance effects.",
        -    "properties": {
        -      "duration": {
        -        "description": "The duration of the animation in seconds.",
        -        "maximum": 30,
        -        "minimum": 0.1,
        -        "type": "number"
        -      },
        -      "preset": {
        -        "description": "The animation preset to apply. <ul>\n  <li>`typewriter` - typewriter effect where characters appear one at a time</li>\n</ul>",
        -        "enum": [
        -          "typewriter"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "preset"
        -    ],
        -    "type": "object"
        -  },
        -  "background": {
        -    "$ref": "#/$defs/TextBackground",
        -    "description": "Background styling properties."
        -  },
        -  "ellipsis": {
        -    "description": "The string to display when text overflows its bounding box. Set to an ellipsis character or custom string to indicate truncated text.",
        -    "type": "string"
        -  },
        -  "font": {
        -    "$ref": "#/$defs/TextFont",
        -    "description": "Font styling properties."
        -  },
        -  "height": {
        -    "description": "Set the width of the HTML asset bounding box in pixels. Text and elements will be masked if they exceed the  height of the bounding box.",
        -    "type": "integer"
        -  },
        -  "stroke": {
        -    "additionalProperties": false,
        -    "description": "Text stroke (outline) properties.",
        -    "properties": {
        -      "color": {
        -        "description": "The stroke color using hexadecimal color notation.",
        -        "pattern": "^#[A-Fa-f0-9]{6}$",
        -        "type": "string"
        -      },
        -      "width": {
        -        "description": "The width of the stroke in pixels.",
        -        "maximum": 10,
        -        "minimum": 0,
        -        "type": "number"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "text": {
        -    "description": "The text string to display.",
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "text",
        -    "description": "The type of asset - set to `text` for text.",
        -    "enum": [
        -      "text"
        -    ],
        -    "type": "string"
        -  },
        -  "width": {
        -    "description": "Set the width of the HTML asset bounding box in pixels. Text will wrap to fill the bounding box.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextAsset / required
        Removed value: -[
        -  "type",
        -  "text"
        -]
      • removedInput schema / properties / payload / $defs / TextAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextBackground / $ref
        Added value: +"#/$defs/TextBackground"
      • removedInput schema / properties / payload / $defs / TextBackground / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextBackground / description
        Removed value: -"Displays a background box behind the text."
      • removedInput schema / properties / payload / $defs / TextBackground / properties
        Removed value: -{
        -  "borderRadius": {
        -    "description": "The border radius of the background box in pixels for rounded corners.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "color": {
        -    "description": "The background color using hexadecimal color notation.",
        -    "pattern": "^#[A-Fa-f0-9]{6}$",
        -    "type": "string"
        -  },
        -  "opacity": {
        -    "description": "The opacity of the background where 1 is opaque and 0 is transparent.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "padding": {
        -    "description": "Padding inside the background box in pixels.",
        -    "maximum": 100,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "wrap": {
        -    "description": "Not supported on legacy `text` assets. Accepted here only so validators can emit a clear migration error pointing users to `rich-text` or `rich-caption`, which support background wrapping natively.",
        -    "type": "boolean"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextBackground / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextFont / $ref
        Added value: +"#/$defs/TextFont"
      • removedInput schema / properties / payload / $defs / TextFont / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextFont / description
        Removed value: -"Font properties for text."
      • removedInput schema / properties / payload / $defs / TextFont / properties
        Removed value: -{
        -  "color": {
        -    "description": "The text color using hexadecimal color notation.",
        -    "type": "string"
        -  },
        -  "family": {
        -    "description": "The font family name. This must be Family name embedded in the font, i.e. \"Open Sans\".",
        -    "type": "string"
        -  },
        -  "lineHeight": {
        -    "description": "The line height of the font as a ratio of the font size.",
        -    "type": "number"
        -  },
        -  "opacity": {
        -    "description": "The opacity of the text where 1 is opaque and 0 is transparent.",
        -    "type": "number"
        -  },
        -  "size": {
        -    "description": "The size of the font in pixels (px).",
        -    "type": "integer"
        -  },
        -  "weight": {
        -    "description": "The weight of the font. 100 is lightest, 900 is heaviest (boldest).",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextFont / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextToImageAsset / $ref
        Added value: +"#/$defs/TextToImageAsset"
      • removedInput schema / properties / payload / $defs / TextToImageAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextToImageAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / TextToImageAsset / description
        Removed value: -"**Notice: TextToImageAsset is deprecated. Use [ImageAsset](#tocs_imageasset)\nwith `prompt` instead.** This type continues to function and is internally\nrewritten to ImageAsset; no behaviour change for existing integrations.\n\nThe TextToImageAsset lets you create a dynamic image from a text prompt.\n"
      • removedInput schema / properties / payload / $defs / TextToImageAsset / properties
        Removed value: -{
        -  "crop": {
        -    "$ref": "#/$defs/Crop"
        -  },
        -  "height": {
        -    "description": "The height of the image in pixels.",
        -    "type": "integer"
        -  },
        -  "prompt": {
        -    "description": "The text prompt to generate an image from.",
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "text-to-image",
        -    "description": "The type of asset to generate - set to `text-to-image` for text-to-image.",
        -    "enum": [
        -      "text-to-image"
        -    ],
        -    "type": "string"
        -  },
        -  "width": {
        -    "description": "The width of the image in pixels.",
        -    "type": "integer"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextToImageAsset / required
        Removed value: -[
        -  "type",
        -  "prompt"
        -]
      • removedInput schema / properties / payload / $defs / TextToImageAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TextToSpeechAsset / $ref
        Added value: +"#/$defs/TextToSpeechAsset"
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / description
        Removed value: -"**Notice: TextToSpeechAsset is deprecated. Use [AudioAsset](#tocs_audioasset)\nwith `prompt` (the spoken text) and `voice` instead.** This type continues to\nfunction and is internally rewritten to AudioAsset; no behaviour change for\nexisting integrations.\n\nThe TextToSpeechAsset lets you generate a voice over from text using a text-to-speech service.\nThe generated audio can be trimmed, faded and have its volume and speed adjusted using the\nsame properties available on the AudioAsset.\n"
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / properties
        Removed value: -{
        -  "effect": {
        -    "description": "The effect to apply to the audio asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        -    "enum": [
        -      "none",
        -      "fadeIn",
        -      "fadeOut",
        -      "fadeInFadeOut"
        -    ],
        -    "type": "string"
        -  },
        -  "language": {
        -    "description": "The language code for the text-to-speech conversion.",
        -    "type": "string"
        -  },
        -  "newscaster": {
        -    "default": false,
        -    "description": "Set the voice to newscaster mode.",
        -    "type": "boolean"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the audio clip between 0 (paused) and 10 (10x normal speed), where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length.",
        -    "format": "float",
        -    "maximum": 10,
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "text": {
        -    "description": "The text to convert to speech.",
        -    "type": "string"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the audio clip, in seconds (defaults to 0). Audio will start from the trim point. The audio will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "text-to-speech",
        -    "description": "The type of asset - set to `text-to-speech` for text-to-speech.",
        -    "enum": [
        -      "text-to-speech"
        -    ],
        -    "type": "string"
        -  },
        -  "voice": {
        -    "description": "The voice to use for the text-to-speech conversion.",
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Set the volume of the audio clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions.",
        -    "oneOf": [
        -      {
        -        "description": "The volume level for the audio clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -        "format": "float",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / required
        Removed value: -[
        -  "type",
        -  "text",
        -  "voice"
        -]
      • removedInput schema / properties / payload / $defs / TextToSpeechAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Thumbnail / $ref
        Added value: +"#/$defs/Thumbnail"
      • removedInput schema / properties / payload / $defs / Thumbnail / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Thumbnail / description
        Removed value: -"Generate a thumbnail image for the video or image at a specific point from the timeline."
      • removedInput schema / properties / payload / $defs / Thumbnail / properties
        Removed value: -{
        -  "capture": {
        -    "description": "The point on the timeline in seconds to capture a single frame to use as the thumbnail image.",
        -    "type": "number"
        -  },
        -  "scale": {
        -    "description": "Scale the thumbnail size to a fraction of the viewport size - i.e. setting the scale to 0.5 will scale  the thumbnail to half the size of the viewport.",
        -    "maximum": 1,
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Thumbnail / required
        Removed value: -[
        -  "capture",
        -  "scale"
        -]
      • removedInput schema / properties / payload / $defs / Thumbnail / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Timeline / $ref
        Added value: +"#/$defs/Timeline"
      • removedInput schema / properties / payload / $defs / Timeline / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Timeline / description
        Removed value: -"A timeline represents the contents of a video edit over time, an audio edit over time, in seconds, or an image layout. A timeline consists of layers called tracks. Tracks are composed of titles, images, audio, html or video segments referred to as clips which are placed along the track at specific starting point and lasting for a specific amount of time."
      • removedInput schema / properties / payload / $defs / Timeline / properties
        Removed value: -{
        -  "background": {
        -    "description": "A hexadecimal value for the timeline background colour. Defaults to #000000 (black).",
        -    "type": "string"
        -  },
        -  "cache": {
        -    "description": "Disable the caching of ingested source footage and assets. See  [caching](https://shotstack.io/docs/guide/architecting-an-application/caching/) for more details.",
        -    "type": "boolean"
        -  },
        -  "fonts": {
        -    "description": "An array of custom fonts to be downloaded for use by the HTML assets.",
        -    "items": {
        -      "$ref": "#/$defs/Font"
        -    },
        -    "type": "array"
        -  },
        -  "soundtrack": {
        -    "$ref": "#/$defs/Soundtrack",
        -    "deprecated": true,
        -    "description": "A music or audio soundtrack file in mp3 format. Deprecated - use an [AudioAsset](#tocs_audioasset) clip on its own track instead."
        -  },
        -  "tracks": {
        -    "description": "A timeline consists of an array of tracks, each track containing clips. Tracks are layered on top of each other in the same order they are added to the array with the top most track layered over the top of those below it. Ensure that a track containing titles is the top most track so that it is displayed above videos and images.",
        -    "items": {
        -      "$ref": "#/$defs/Track"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Timeline / required
        Removed value: -[
        -  "tracks"
        -]
      • removedInput schema / properties / payload / $defs / Timeline / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / TitleAsset / $ref
        Added value: +"#/$defs/TitleAsset"
      • removedInput schema / properties / payload / $defs / TitleAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / TitleAsset / deprecated
        Removed value: -true
      • removedInput schema / properties / payload / $defs / TitleAsset / description
        Removed value: -"**Notice: The TitleAsset is deprecated, use the [RichTextAsset](#tocs_richtextasset) instead.**\n\nThe TitleAsset clip type lets you create video titles from a text string and apply styling and positioning.\n"
      • removedInput schema / properties / payload / $defs / TitleAsset / properties
        Removed value: -{
        -  "background": {
        -    "description": "Apply a background color behind the text. Set the text color using hexadecimal color notation. Transparency is supported by setting the first two characters of the hex string (opposite to HTML),  i.e. #80ffffff will be white with 50% transparency. Omit to use transparent background.",
        -    "type": "string"
        -  },
        -  "color": {
        -    "description": "Set the text color using hexadecimal color notation. Transparency is supported by setting the first two characters of the hex string (opposite to HTML),  i.e. #80ffffff will be white with  50% transparency.",
        -    "type": "string"
        -  },
        -  "offset": {
        -    "$ref": "#/$defs/Offset",
        -    "description": "Offset the location of the title relative to its position on the screen."
        -  },
        -  "position": {
        -    "description": "Place the title in one of nine predefined positions of the viewport. <ul>\n  <li>`top` - top (center)</li>\n  <li>`topRight` - top right</li>\n  <li>`right` - right (center)</li>\n  <li>`bottomRight` - bottom right</li>\n  <li>`bottom` - bottom (center)</li>\n  <li>`bottomLeft` - bottom left</li>\n  <li>`left` - left (center)</li>\n  <li>`topLeft` - top left</li>\n  <li>`center` - center</li>\n</ul>",
        -    "enum": [
        -      "top",
        -      "topRight",
        -      "right",
        -      "bottomRight",
        -      "bottom",
        -      "bottomLeft",
        -      "left",
        -      "topLeft",
        -      "center"
        -    ],
        -    "type": "string"
        -  },
        -  "size": {
        -    "description": "Set the relative size of the text using predefined sizes from xx-small to xx-large. <ul>\n  <li>`xx-small`</li>\n  <li>`x-small`</li>\n  <li>`small`</li>\n  <li>`medium`</li>\n  <li>`large`</li>\n  <li>`x-large`</li>\n  <li>`xx-large`</li>\n</ul>",
        -    "enum": [
        -      "xx-small",
        -      "x-small",
        -      "small",
        -      "medium",
        -      "large",
        -      "x-large",
        -      "xx-large"
        -    ],
        -    "type": "string"
        -  },
        -  "style": {
        -    "description": "Uses a preset to apply font properties and styling to the title. <ul>\n  <li>`minimal`</li>\n  <li>`blockbuster`</li>\n  <li>`vogue`</li>\n  <li>`sketchy`</li>\n  <li>`skinny`</li>\n  <li>`chunk`</li>\n  <li>`chunkLight`</li>\n  <li>`marker`</li>\n  <li>`future`</li>\n  <li>`subtitle`</li>\n</ul>",
        -    "enum": [
        -      "minimal",
        -      "blockbuster",
        -      "vogue",
        -      "sketchy",
        -      "skinny",
        -      "chunk",
        -      "chunkLight",
        -      "marker",
        -      "future",
        -      "subtitle"
        -    ],
        -    "type": "string"
        -  },
        -  "text": {
        -    "description": "The title text string - i.e. \"My Title\".",
        -    "type": "string"
        -  },
        -  "type": {
        -    "default": "title",
        -    "description": "The type of asset - set to `title` for titles.",
        -    "enum": [
        -      "title"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / TitleAsset / required
        Removed value: -[
        -  "type",
        -  "text"
        -]
      • removedInput schema / properties / payload / $defs / TitleAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Track / $ref
        Added value: +"#/$defs/Track"
      • removedInput schema / properties / payload / $defs / Track / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Track / description
        Removed value: -"A track contains an array of clips. Tracks are layered on top of each other in the order in the array. The top most track will render on top of those below it."
      • removedInput schema / properties / payload / $defs / Track / properties
        Removed value: -{
        -  "clips": {
        -    "description": "An array of Clips comprising of TitleClip, ImageClip or VideoClip.",
        -    "items": {
        -      "$ref": "#/$defs/Clip"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Track / required
        Removed value: -[
        -  "clips"
        -]
      • removedInput schema / properties / payload / $defs / Track / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Transformation / $ref
        Added value: +"#/$defs/Transformation"
      • removedInput schema / properties / payload / $defs / Transformation / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Transformation / description
        Removed value: -"Apply one or more transformations to a clip. Transformations alter the visual properties of a clip and can be combined to create new shapes and effects."
      • removedInput schema / properties / payload / $defs / Transformation / properties
        Removed value: -{
        -  "flip": {
        -    "$ref": "#/$defs/FlipTransformation"
        -  },
        -  "rotate": {
        -    "$ref": "#/$defs/RotateTransformation"
        -  },
        -  "skew": {
        -    "$ref": "#/$defs/SkewTransformation"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Transformation / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Transition / $ref
        Added value: +"#/$defs/Transition"
      • removedInput schema / properties / payload / $defs / Transition / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Transition / description
        Removed value: -"In and out transitions for a clip - i.e. fade in and fade out"
      • removedInput schema / properties / payload / $defs / Transition / properties
        Removed value: -{
        -  "in": {
        -    "description": "The transition in. Available transitions are:\n  <ul>\n    <li>`fade` - fade in</li>\n    <li>`reveal` - reveal from left to right</li>\n    <li>`wipeLeft` - fade across screen to the left</li>\n    <li>`wipeRight` - fade across screen to the right</li>\n    <li>`slideLeft` - move slightly left and fade in</li>\n    <li>`slideRight` - move slightly right and fade in</li>\n    <li>`slideUp` - move slightly up and fade in</li>\n    <li>`slideDown` - move slightly down and fade in</li>\n    <li>`carouselLeft` - slide in from right to left</li>\n    <li>`carouselRight` - slide in from left to right</li>\n    <li>`carouselUp` - slide in from bottom to top</li>\n    <li>`carouselDown` - slide in from top to bottom</li>\n    <li>`shuffleTopRight` - rotate in from top right</li>\n    <li>`shuffleRightTop` - rotate in from right top</li>\n    <li>`shuffleRightBottom` - rotate in from right bottom</li>\n    <li>`shuffleBottomRight` - rotate in from bottom right</li>\n    <li>`shuffleBottomLeft` - rotate in from bottom left</li>\n    <li>`shuffleLeftBottom` - rotate in from left bottom</li>\n    <li>`shuffleLeftTop` - rotate in from left top</li>\n    <li>`shuffleTopLeft` - rotate in from top left</li>\n    <li>`zoom` - fast zoom in</li>\n  </ul>\nThe transition speed can also be controlled by appending `Fast` or `Slow` to the transition, e.g. `fadeFast` or `CarouselLeftSlow`.",
        -    "enum": [
        -      "none",
        -      "fade",
        -      "fadeSlow",
        -      "fadeFast",
        -      "reveal",
        -      "revealSlow",
        -      "revealFast",
        -      "wipeLeft",
        -      "wipeLeftSlow",
        -      "wipeLeftFast",
        -      "wipeRight",
        -      "wipeRightSlow",
        -      "wipeRightFast",
        -      "slideLeft",
        -      "slideLeftSlow",
        -      "slideLeftFast",
        -      "slideRight",
        -      "slideRightSlow",
        -      "slideRightFast",
        -      "slideUp",
        -      "slideUpSlow",
        -      "slideUpFast",
        -      "slideDown",
        -      "slideDownSlow",
        -      "slideDownFast",
        -      "carouselLeft",
        -      "carouselLeftSlow",
        -      "carouselLeftFast",
        -      "carouselRight",
        -      "carouselRightSlow",
        -      "carouselRightFast",
        -      "carouselUp",
        -      "carouselUpSlow",
        -      "carouselUpFast",
        -      "carouselDown",
        -      "carouselDownSlow",
        -      "carouselDownFast",
        -      "shuffleTopRight",
        -      "shuffleTopRightSlow",
        -      "shuffleTopRightFast",
        -      "shuffleRightTop",
        -      "shuffleRightTopSlow",
        -      "shuffleRightTopFast",
        -      "shuffleRightBottom",
        -      "shuffleRightBottomSlow",
        -      "shuffleRightBottomFast",
        -      "shuffleBottomRight",
        -      "shuffleBottomRightSlow",
        -      "shuffleBottomRightFast",
        -      "shuffleBottomLeft",
        -      "shuffleBottomLeftSlow",
        -      "shuffleBottomLeftFast",
        -      "shuffleLeftBottom",
        -      "shuffleLeftBottomSlow",
        -      "shuffleLeftBottomFast",
        -      "shuffleLeftTop",
        -      "shuffleLeftTopSlow",
        -      "shuffleLeftTopFast",
        -      "shuffleTopLeft",
        -      "shuffleTopLeftSlow",
        -      "shuffleTopLeftFast",
        -      "zoom"
        -    ],
        -    "type": "string"
        -  },
        -  "out": {
        -    "description": "The transition out. Available transitions are:\n  <ul>\n    <li>`fade` - fade out</li>\n    <li>`reveal` - reveal from right to left</li>\n    <li>`wipeLeft` - fade across screen to the left</li>\n    <li>`wipeRight` - fade across screen to the right</li>\n    <li>`slideLeft` - move slightly left and fade out</li>\n    <li>`slideRight` - move slightly right and fade out</li>\n    <li>`slideUp` - move slightly up and fade out</li>\n    <li>`slideDown` - move slightly down and fade out</li>\n    <li>`carouselLeft` - slide out from right to left</li>\n    <li>`carouselRight` - slide out from left to right</li>\n    <li>`carouselUp` - slide out from bottom to top</li>\n    <li>`carouselDown` - slide out from top  to bottom</li>\n    <li>`shuffleTopRight` - rotate out from top right</li>\n    <li>`shuffleRightTop` - rotate out from right top</li>\n    <li>`shuffleRightBottom` - rotate out from right bottom</li>\n    <li>`shuffleBottomRight` - rotate out from bottom right</li>\n    <li>`shuffleBottomLeft` - rotate out from bottom left</li>\n    <li>`shuffleLeftBottom` - rotate out from left bottom</li>\n    <li>`shuffleLeftTop` - rotate out from left top</li>\n    <li>`shuffleTopLeft` - rotate out from top left</li>\n    <li>`zoom` - fast zoom out</li>\n  </ul>\nThe transition speed can also be controlled by appending `Fast` or `Slow` to the transition, e.g. `fadeFast` or `CarouselLeftSlow`.",
        -    "enum": [
        -      "none",
        -      "fade",
        -      "fadeSlow",
        -      "fadeFast",
        -      "reveal",
        -      "revealSlow",
        -      "revealFast",
        -      "wipeLeft",
        -      "wipeLeftSlow",
        -      "wipeLeftFast",
        -      "wipeRight",
        -      "wipeRightSlow",
        -      "wipeRightFast",
        -      "slideLeft",
        -      "slideLeftSlow",
        -      "slideLeftFast",
        -      "slideRight",
        -      "slideRightSlow",
        -      "slideRightFast",
        -      "slideUp",
        -      "slideUpSlow",
        -      "slideUpFast",
        -      "slideDown",
        -      "slideDownSlow",
        -      "slideDownFast",
        -      "carouselLeft",
        -      "carouselLeftSlow",
        -      "carouselLeftFast",
        -      "carouselRight",
        -      "carouselRightSlow",
        -      "carouselRightFast",
        -      "carouselUp",
        -      "carouselUpSlow",
        -      "carouselUpFast",
        -      "carouselDown",
        -      "carouselDownSlow",
        -      "carouselDownFast",
        -      "shuffleTopRight",
        -      "shuffleTopRightSlow",
        -      "shuffleTopRightFast",
        -      "shuffleRightTop",
        -      "shuffleRightTopSlow",
        -      "shuffleRightTopFast",
        -      "shuffleRightBottom",
        -      "shuffleRightBottomSlow",
        -      "shuffleRightBottomFast",
        -      "shuffleBottomRight",
        -      "shuffleBottomRightSlow",
        -      "shuffleBottomRightFast",
        -      "shuffleBottomLeft",
        -      "shuffleBottomLeftSlow",
        -      "shuffleBottomLeftFast",
        -      "shuffleLeftBottom",
        -      "shuffleLeftBottomSlow",
        -      "shuffleLeftBottomFast",
        -      "shuffleLeftTop",
        -      "shuffleLeftTopSlow",
        -      "shuffleLeftTopFast",
        -      "shuffleTopLeft",
        -      "shuffleTopLeftSlow",
        -      "shuffleTopLeftFast",
        -      "zoom"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Transition / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / Tween / $ref
        Added value: +"#/$defs/Tween"
      • removedInput schema / properties / payload / $defs / Tween / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / Tween / description
        Removed value: -"Use a Tween to [animate properties over time](/docs/guide/architecting-an-application/animations/). The following properties are currently supported and can be animated:\n  <ul>\n    <li>Opacity - animate the transparency of a clip.</li>\n    <li>Offset - animate the x and y position of a clip.</li>\n    <li>Rotation - animate the rotation of a clip.</li>\n    <li>Skew - animate the horizontal and vertical shearing effect.</li>\n    <li>Volume - animate the audio volume of a clip.</li>\n  </ul>"
      • removedInput schema / properties / payload / $defs / Tween / properties
        Removed value: -{
        -  "easing": {
        -    "description": "The easing function to use for the animation. Easing controls the rate of change of the animated value, allowing for more natural motion by speeding up or slowing down the animation at different points. Only applicable if interpolation is set to `bezier`.",
        -    "enum": [
        -      "ease",
        -      "easeIn",
        -      "easeOut",
        -      "easeInOut",
        -      "easeInQuad",
        -      "easeInCubic",
        -      "easeInQuart",
        -      "easeInQuint",
        -      "easeInSine",
        -      "easeInExpo",
        -      "easeInCirc",
        -      "easeInBack",
        -      "easeOutQuad",
        -      "easeOutCubic",
        -      "easeOutQuart",
        -      "easeOutQuint",
        -      "easeOutSine",
        -      "easeOutExpo",
        -      "easeOutCirc",
        -      "easeOutBack",
        -      "easeInOutQuad",
        -      "easeInOutCubic",
        -      "easeInOutQuart",
        -      "easeInOutQuint",
        -      "easeInOutSine",
        -      "easeInOutExpo",
        -      "easeInOutCirc",
        -      "easeInOutBack"
        -    ],
        -    "type": "string"
        -  },
        -  "from": {
        -    "description": "The initial property value at the start of the animation."
        -  },
        -  "interpolation": {
        -    "description": "The interpolation method to use for the animation. Available options are: <ul>\n  <li>`linear` - a linear interpolation between the start and end values.</li>\n  <li>`bezier` - a bezier curve interpolation between the start and end values.</li>\n  <li>`constant` - an interpolation where the property instantly jumps from the start to the end value, without any gradual transition.</li>\n</ul>",
        -    "enum": [
        -      "linear",
        -      "bezier",
        -      "constant"
        -    ],
        -    "type": "string"
        -  },
        -  "length": {
        -    "description": "The duration of the animation in seconds.",
        -    "type": "number"
        -  },
        -  "start": {
        -    "description": "The time in seconds when the animation starts, relative to the clip, not the timeline.",
        -    "type": "number"
        -  },
        -  "to": {
        -    "description": "The final property value at the end of the animation."
        -  }
        -}
      • removedInput schema / properties / payload / $defs / Tween / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VideoAsset / $ref
        Added value: +"#/$defs/VideoAsset"
      • removedInput schema / properties / payload / $defs / VideoAsset / additionalProperties
        Removed value: -false
      • removedInput schema / properties / payload / $defs / VideoAsset / description
        Removed value: -"The VideoAsset adds a video to a Clip. The video can be sourced from a URL\n(`src`), generated from a text prompt (`prompt`), or both. At least one of\n`src` or `prompt` must be provided.\n\n- **Source URL:** set `src` to the URL of an mp4 (or compatible) video file.\n- **Generated:** set `prompt` to describe the motion. Choose a generator\n  with `model` and configure it with model-specific `options`. Models that\n  animate an image take it as `options.startSrc` (the original\n  image-to-video models use `options.inputSrc`); the default model\n  generates from the prompt alone. The generated `src` is filled in\n  automatically.\n- **Both:** `src` acts as a preview placeholder while `prompt` drives\n  generation — the video is regenerated from the prompt at render time.\n  Unchanged prompts and options resolve from the generation cache.\n"
      • removedInput schema / properties / payload / $defs / VideoAsset / properties
        Removed value: -{
        -  "chromaKey": {
        -    "$ref": "#/$defs/ChromaKey"
        -  },
        -  "crop": {
        -    "$ref": "#/$defs/Crop"
        -  },
        -  "model": {
        -    "description": "The generation model to use when `prompt` is set (e.g. `seedance-2.0-text-to-video`). Defaults to `seedance-2.0-text-to-video` if omitted. `GET /models` lists what is available and the options each accepts.",
        -    "type": "string"
        -  },
        -  "options": {
        -    "additionalProperties": true,
        -    "description": "Model-specific generation settings. Valid keys and values depend on the chosen `model` and are defined by the model registry. Omitted options use the model's defaults. Unknown or invalid options are rejected.",
        -    "type": "object"
        -  },
        -  "prompt": {
        -    "description": "A text prompt to generate the video from. The engine generates a video at render time and fills `src` automatically; an existing `src` is treated as a preview placeholder and replaced. Use `model` to choose the generator and `options` to configure it. A starting image goes in `options.startSrc` — or `options.inputSrc` on the original image-to-video models — on the models that accept one.",
        -    "maxLength": 4000,
        -    "type": "string"
        -  },
        -  "speed": {
        -    "description": "Adjust the playback speed of the video clip. Use a number for a constant speed or an array of [Tween](./#tocs_tween) objects to change speed over time, for example easing from normal speed up to 3x.",
        -    "oneOf": [
        -      {
        -        "description": "The playback speed between 0 (paused) and 10 (10x normal speed) where 1 is normal speed (defaults to 1). Adjusting the speed will also adjust the duration of the clip and may require you to adjust the Clip length. For example, if you set speed to 0.5, the clip will need to be 2x as long to play the entire video (i.e. original length / 0.5). If you set speed to 2, the clip will need to be half as long to play the entire video (i.e. original length / 2).",
        -        "format": "float",
        -        "maximum": 10,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects that change the playback speed over time. A speed of 0 holds the current frame. The clip length is not adjusted, so set it to cover the footage you want to play.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "src": {
        -    "description": "The video source URL. The URL must be publicly accessible or include credentials. When `prompt` is also set, `src` serves as a preview placeholder and the video is regenerated from the prompt at render time.",
        -    "minLength": 1,
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "transcode": {
        -    "description": "Set to `true` to force re-encoding of the video during preprocessing. This can help resolve compatibility issues, fix rotation problems, synchronize audio, or convert formats. The video will be processed to ensure optimal compatibility with the rendering engine.",
        -    "type": "boolean"
        -  },
        -  "trim": {
        -    "description": "The start trim point of the video clip, in seconds (defaults to 0). Videos will start from the in trim point. The video will play until the file ends or the Clip length is reached.",
        -    "type": "number"
        -  },
        -  "type": {
        -    "default": "video",
        -    "description": "The type of asset - set to `video` for videos.",
        -    "enum": [
        -      "video"
        -    ],
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Set the volume of the video clip. Use a number or an array of [Tween](./#tocs_tween) objects to create custom volume transitions.",
        -    "oneOf": [
        -      {
        -        "description": "The volume level for the video clip. Range varies from 0 to 1 where 0 is muted and 1 is full volume (defaults to 1).",
        -        "format": "float",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      {
        -        "description": "An array of [Tween](./#tocs_tween) objects used to create a custom volume effect. Modify the volume of an asset over time.",
        -        "items": {
        -          "$ref": "#/$defs/Tween"
        -        },
        -        "type": "array"
        -      }
        -    ]
        -  },
        -  "volumeEffect": {
        -    "description": "Preset volume effects to apply to the video asset <ul>\n  <li>`fadeIn` - fade volume in only</li>\n  <li>`fadeOut` - fade volume out only</li>\n  <li>`fadeInFadeOut` - fade volume in and out</li>\n</ul>",
        -    "enum": [
        -      "none",
        -      "fadeIn",
        -      "fadeOut",
        -      "fadeInFadeOut"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VideoAsset / required
        Removed value: -[
        -  "type"
        -]
      • removedInput schema / properties / payload / $defs / VideoAsset / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VimeoDestination / $ref
        Added value: +"#/$defs/VimeoDestination"
      • removedInput schema / properties / payload / $defs / VimeoDestination / description
        Removed value: -"Send videos to [Vimeo](https://shotstack.io/docs/guide/serving-assets/destinations/vimeo/) video hosting and streaming service. Vimeo credentials are required and added via the [dashboard](https://dashboard.shotstack.io/integrations/vimeo), not in the request."
      • removedInput schema / properties / payload / $defs / VimeoDestination / properties
        Removed value: -{
        -  "options": {
        -    "$ref": "#/$defs/VimeoDestinationOptions",
        -    "description": "Additional Vimeo configuration and features."
        -  },
        -  "provider": {
        -    "default": "vimeo",
        -    "description": "The destination to send video to - set to `vimeo` for Vimeo.",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VimeoDestination / required
        Removed value: -[
        -  "provider"
        -]
      • removedInput schema / properties / payload / $defs / VimeoDestination / type
        Removed value: -"object"
      • addedInput schema / properties / payload / $defs / VimeoDestinationOptions / $ref
        Added value: +"#/$defs/VimeoDestinationOptions"
      • removedInput schema / properties / payload / $defs / VimeoDestinationOptions / description
        Removed value: -"Pass additional options to control how Vimeo publishes video, including name, description and privacy settings."
      • removedInput schema / properties / payload / $defs / VimeoDestinationOptions / properties
        Removed value: -{
        -  "description": {
        -    "description": "A description of the video that will be displayed on the Vimeo website.",
        -    "type": "string"
        -  },
        -  "folderUri": {
        -    "description": "The Vimeo folder URI to upload the video to. The folder must already exist in your Vimeo account.",
        -    "type": "string"
        -  },
        -  "name": {
        -    "description": "A name or title for the video that will be displayed on the Vimeo website.",
        -    "type": "string"
        -  },
        -  "privacy": {
        -    "$ref": "#/$defs/VimeoDestinationPrivacyOptions",
        -    "description": "Options to control the visibility of videos and privacy features."
        -  }
        -}
      • addedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / $ref
        Added value: +"#/$defs/VimeoDestinationPrivacyOptions"
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / description
        Removed value: -"Options to control the visibility of videos and privacy features."
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / properties
        Removed value: -{
        -  "add": {
        -    "description": "Set whether other users can add the video to their collections.",
        -    "type": "boolean"
        -  },
        -  "comments": {
        -    "description": "Set who can comment on the video. Available options are: <ul>\n  <li>`anybody` - Anyone can comment on the video.</li>\n  <li>`nobody` - Only the video owner can comment on the video.</li>\n  <li>`contacts` - Only contacts can comment on the video.</li>\n</ul>",
        -    "enum": [
        -      "anybody",
        -      "nobody",
        -      "contacts"
        -    ],
        -    "type": "string"
        -  },
        -  "download": {
        -    "description": "Set whether the video can be downloaded.",
        -    "type": "boolean"
        -  },
        -  "embed": {
        -    "description": "Set who can embed the video. Available options are: <ul>\n  <li>`public` - Anyone can embed the video.</li>\n  <li>`private` - Only the video owner can embed the video.</li>\n  <li>`whitelist` - Only whitelisted domains can embed the video.</li>\n</ul>",
        -    "enum": [
        -      "public",
        -      "private",
        -      "whitelist"
        -    ],
        -    "type": "string"
        -  },
        -  "view": {
        -    "description": "Set who can view the videos. Available options are: <ul>\n  <li>`anybody` - Anyone can view the video.</li>\n  <li>`nobody` - Only the video owner can view the video.</li>\n  <li>`contacts` - Only contacts can view the video.</li>\n  <li>`password` - A password is required to view the video.</li>\n  <li>`unlisted` - The video is not listed on Vimeo.</li>\n</ul>",
        -    "enum": [
        -      "anybody",
        -      "nobody",
        -      "contacts",
        -      "password",
        -      "unlisted"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / payload / $defs / VimeoDestinationPrivacyOptions / type
        Removed value: -"object"
  2. 23 tool updatesv2.0.0
    • First observedcreate_template
    • First observedcreate_upload_url_file
    • First observeddelete_asset
    • First observeddelete_source
    • First observeddelete_template
    • First observedgenerate_asset
    • First observedget_asset
    • First observedget_asset_by_render_id
    • First observedget_generated_asset
    • First observedget_model
    • First observedget_render
    • First observedget_source
    • First observedget_template
    • First observedingest_source
    • First observedlist_accounts
    • First observedlist_models
    • First observedlist_sources
    • First observedlist_templates
    • First observedprobe_media
    • First observedrender
    • First observedrender_template
    • First observedtransfer_asset
    • First observedupdate_template

TDQS

A3.5/5.0

Scored across 23 tools

Disambiguation4/5

Most tools target a distinct resource+action and descriptions clarify boundaries (e.g. get_asset vs get_asset_by_render_id). Some grouping is dense — ingest_source, transfer_asset, and create_upload_url_file all concern getting files in, and render vs render_template vs generate_asset require reading descriptions to distinguish. Still, each has a clearly stated purpose an agent can match to.

Naming Consistency4/5

Predominantly consistent verb_noun snake_case (get_render, list_templates, create_template, delete_source). Minor deviations: 'render' lacks a noun object, and 'probe_media' uses a less common verb, but nothing is ambiguous or chaotically mixed.

Tool Count4/5

23 tools span three logical sub-APIs (edit, serve, ingest) plus asset generation, so the count is high but largely earned. Slightly on the heavy side, with some read/write pairs that could arguably be consolidated, but nothing feels redundant.

Completeness4/5

Templates have full CRUD, sources and assets have get/list/create/delete, and rendering plus generation are covered with status polling. Minor gaps exist: no cancel-render, no list-renders, and serve assets have no list endpoint, but core workflows are workable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables MCP-compatible agents to perform read-only incident investigations by querying logs, building timelines, searching runbooks, validating evidence, and creating ticket drafts only with explicit approval.
    7
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to access and manage versioned robotics development state, including artifacts, changes, evidence, reviews, and execution context, through read-only, developer, or reviewer MCP profiles.
    1
    MIT
  • A
    license
    C
    quality
    A
    maintenance
    Enables AI agents and clients to discover and use 75 V5 design-automation tools for templates, images, animations, media jobs, workflows, assets, publications, webhooks, and Instant URLs, with explicit mutation approval, local previews, and isolated private workspace profiles.
    75
    21 npm
    AGPL 3.0
  • A
    license
    B
    quality
    C
    maintenance
    Enables any MCP-compatible AI agent to generate videos and images from text or reference frames, chain scenes into seamless multi-scene films with sound and speech, and download finished media with manifests and previews. It also exposes account status, plan limits, history and library management through confirm-gated, safe-by-default operations.
    34
    MIT