Skip to main content
Glama

Wistia MCP Server & CLI

npm CI License YouTube X LinkedIn

Wistia MCP server and CLI for Codex and AI agents. 169 tools: 86 reads and 83 confirmed writes for media, folders, captions, channels, webinars, sharing, analytics and uploads.

One package provides local MCP, the same operations as task CLI commands, and a bundled Claude Desktop .mcpb extension.

Built and maintained by Navid Moazzez. Built on Slipway, which turns one definition of each tool into the MCP server and the CLI. Complete installation and private account setup are in INSTALL.md.

The terminal illustrates shipped caption tools with sample data. It is a presentation preview, not a verified live account edit.

You need a private scoped Wistia Bearer token and appropriate endpoint/account permissions. Service features, quota and charges apply. The wrapper preserves AGPL-3.0-or-later; this is a community product maintained by Navid Media.

Wistia already offers an official MCP and task CLI. Our added safeguards and bounded workflows are compared below, without unsupported coverage or efficiency claims.

Two ways to use it

Command line

npm install -g @thenavidm/wistia-mcp-cli@latest
wistia-cli
wistia-cli list-media --help
wistia-cli schema edit-captions-text
wistia-cli list-media --per-page 5 --agent

Configure private access before account calls. Every mutation requires --confirm; --yes and --agent do not authorize it.

MCP server, for your AI app

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

Then ask: Find the video I choose and locate this exact wording in its captions. Complete client/OS wiring is in INSTALL.md.

Which one

Where you work

Surface

Codex, Cursor or another shell agent

Local MCP, CLI or both

Claude Desktop chat

Local MCP or desktop archive

Scripts/CI

Shared task CLI or an MCP client

Remote-URL-only clients

Official hosted Wistia MCP

Related MCP server: mux-mcp

Features

Capability

CLI

MCP

Media and folders

list-media / list-folders

list_media / list_folders

Exact caption matching

find-caption-matches

find_caption_matches

Guarded caption editing

edit-captions-text

edit_captions_text

Upload URL / local file

upload-media / upload-media-file

Same underscore names

Channels and webinars

list-channels / list-webinars

Same shared schemas

Stats and background jobs

get-media-engagement / get-job-status

Same account permissions

Private account selection

list-accounts / --account

list_accounts / account

Setup diagnosis

doctor / login

CLI utilities

Contents

Number

Section

Covers

1

What you can ask it

Prompts and coverage

2

Quick install

CLI, MCP and desktop

3

Set up Wistia access

Token, version, permissions and quota

4

Connect your client

Clients and OS

5

Check it works

Doctor and first read

6

Output, flags and exit codes

Inputs, JSON and scripting

7

MCP or CLI and token cost

Real client usage evidence

8

Every tool and argument

All tools and arguments

9

Media, caption and webinar workflows

Media, captions, sharing and webinars

10

Pagination, quotas and background jobs

Bounded pages and async outcomes

11

Several private accounts

Named credentials

12

Writing safely

Confirmation and private generated tokens

13

How it works

Shared framework and regeneration

14

Your data

Private data handling

15

Environment variables

Credential, safety and tuning

16

Updates and removal

Upgrade and revoke

17

Troubleshooting

Symptoms and remedies

18

API coverage and comparisons

Official/community comparison

19

Versions

Version history and migration

20

FAQ

Accordion questions

1. What you can ask it

  • Find the intended folder and inspect a short media list.

  • Read an authorized caption track and locate exact wording before editing it.

  • Upload the particular local video or public URL I approved.

  • Copy, move or archive only the media IDs I selected.

  • Inspect channels, webinars, registrations and existing sharing settings.

  • Read media analytics or Stats data for the requested date range.

  • Watch a returned background job without treating acceptance as completion.

The published September schema has 167 HTTP operations. Separate form and local-file uploader commands make 168 shared API tools; the private account helper brings the total to 169 tools: 86 reads and 83 confirmed writes. Find Caption Matches is a nonmutating POST, so it is a read and remains available in read-only mode.

Wistia already offers official MCP and CLI products. This owned package adds a mandatory local mutation guard, named private account selection, bounded page retrieval and private output for created access credentials. These differences are supported by fixtures, real protocol discovery and a reviewed official binary. They do not establish overall superiority or token savings. Account outcomes and desktop GUI installation remain separately unverified.

2. Quick install

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

Manual MCP/CLI installs require Node 22 or newer. Help, discovery and schemas work before authentication. Account requests require privately configured access. The wistia-3.0.0.mcpb desktop archive bundles production dependencies for a compatible host. Full client/OS wiring is in INSTALL.md.

Codex local MCP, after private environment configuration:

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

3. Set up Wistia access

Get a narrowly scoped private token

  1. Sign in to the intended Wistia account. An Account Owner creates account API tokens.

  2. Open Account Settings > API, following Wistia's access-token instructions.

  3. Create a named token with only the permissions your task needs. Copy the token when it is shown at creation and store it privately.

  4. Set WISTIA_TOKEN_FILE to an absolute token-only file outside repositories, or configure WISTIA_API_TOKEN only in private local client/shell settings.

  5. Run wistia-cli doctor, then wistia-cli doctor --network for one account read. A token without permission to read account details can fail doctor while having narrower resource permissions.

Tokens use a Bearer header. Do not supply passwords, cookies or token values as tool arguments. This package has no automatic .env loader, OS keychain integration or OAuth callback. login prints instructions without generating or saving credentials. The official hosted MCP has its own OAuth connection, and the official CLI offers keychain setup.

On macOS/Linux, keep the token file owner-only (0600), with a private parent directory (0700). On Windows, protect it with user-only filesystem ACLs. Token files must be regular, not symlinks, and at most 64 KB. A file takes precedence over the environment token and is cached until the process restarts. GUI clients may not inherit terminal environment variables. Enter actual credentials only in private local settings, never project files, chats or issues.

Permissions and feature eligibility

Read-media workflows normally need the read-folder/media permission. Editing, deleting, sharing, caption ordering, account administration and analytics use their specific endpoint permissions. The operation reference preserves the provider's declared permission requirements. Delegated tokens follow the assigned contact's permissions; they do not elevate access. A 401/403 may indicate token scope, account status, role or feature access, not a broken installation.

Webinars, localizations, accessibility orders, trials, media capacity and purchases depend on current account features and allowances. Installation does not purchase a plan or create quota. Read the intended endpoint and account's billing settings before chargeable operations. No universal paid-plan requirement is invented for every Data API call. Official hosted MCP access is documented for owners and managers. Keep that rule separate from the permission model of a scoped API token.

Modern routes and dated API version

The service URL is https://api.wistia.com/modern. Requests include X-Wistia-Api-Version: 2026-09 by default. The pinned official CLI v2026.9.0 schema identifies its document as 2026.09.0. Set WISTIA_API_VERSION only to a reviewed YYYY-MM release. The provider may resolve an unsupported date to an earlier supported release and may retire older versions; a header is not an indefinite compatibility guarantee. See the modern migration guide.

The uploader remains https://upload.wistia.com/, with form or multipart encoding and private Bearer authentication. Modern media/folder requests use the current schema. Folder request bodies retain some camelCase fields; uploader project_id is still valid. Do not mechanically rename every property to snake_case. Stats routes retain /stats/projects; a folder rename does not imply every Stats URL changed.

Shared quota

Wistia documents 600 requests per minute across Data and Upload APIs for an account. The local default is 150 ms between requests per account/process, but other integrations and duplicate labels still share the provider's quota. Every page and retried read counts. GET 429 handling respects Retry-After only when the delay is at most ten seconds; a longer delay returns exit 7 for explicit caller pacing. POST queries and all mutations have no automatic retries. No process-local pacing setting reserves quota.

4. Connect your client

INSTALL.md covers Codex, Claude Code, Claude Desktop extension/manual settings, Cursor, VS Code/Copilot, Windsurf, Zed, Gemini CLI, Cline, Docker and other stdio clients on macOS, Windows and Linux. Use command npx and arguments -y, @thenavidm/wistia-mcp-cli@latest, with private local environment settings. Codex is the current setup/validation priority; Claude Code is optional.

A client accepting only a remote HTTPS URL can use the official Wistia MCP at https://api.wistia.com/mcp/api, with its OAuth or supported Bearer setup. It supports toolset selection. The local package does not expose a public HTTP relay. Use separate server names if comparing both.

The npm package ships SKILL.md. Copy or link it into your agent's supported skills location for shell use; npm installation does not register a skill automatically. An agent should inspect current commands/schemas and help configure private settings without requesting tokens in chat.

5. Check it works

wistia-cli --version
wistia-cli doctor
wistia-cli doctor --network
wistia-cli list-accounts --agent
wistia-cli list-media --per-page 5 --agent

Network doctor performs GET /modern/account and reports success without printing account details. The first list is a small authorized read, not a mutation. A successful read proves only that operation's access. Full discovery exposes 169 tools; read-only exposes 86. Missing configuration exits 10; missing arguments or an unconfirmed write exit 2. Use actual returned hashed IDs, numeric IDs and timestamps according to each schema, not guessed identifier types.

6. Output, flags and exit codes

Tool names become dashed commands; underscores are accepted too. Path parameter names follow the discovered schema, such as media_hashed_id → --media-hashed-id. Body tools accept individual top-level flags, complete --payload JSON, or --payload-file pointing to a regular JSON body file up to 5 MB. Do not mix those body routes. Path/query flags remain separate. Nested objects take JSON and array flags repeat once per item; a whole array is not a single item.

wistia-cli get-media --help
wistia-cli schema create-captions
wistia-cli list-media --hashed-ids MEDIA_A --hashed-ids MEDIA_B --per-page 5 --agent
wistia-cli list-media --cursor '{"enabled":1}' --per-page 5 --agent

IDs above are illustrative; use discovered resources from your own account. Nullable fields require an actual JSON null inside payload; --field null is a string. Nested values preserve current upstream constraints; unknown top-level body fields are refused. Body-required fields are validated during execution even when the wrapper schema allows an alternative payload route. Operations whose upstream request body is required need body flags or an explicit payload; a deliberately supplied empty object is sent as JSON, never omitted.

Flag

Behavior

--help / schema COMMAND

Current argument help / full JSON Schema

--json

Structured JSON

--compact

One-line JSON

--agent

Compact JSON and no prompts; never confirms a write

--select a,b.c

Keep selected fields, including nested objects/arrays

--no-color / --no-input

Noninteractive switches

--yes

Never replaces write confirmation

--confirm

Confirm only the requested mutation

--account NAME

Select private local credentials

--payload JSON / --payload-file PATH

Complete request body, mutually exclusive with body flags

Exit

Meaning

0

Success

1

Unexpected error

2

Invalid arguments or refused write, an unknown command or a hidden write

3

Resource not found

4

Authentication/permission failure

5

API/transport failure

7

Rate limit

10

Missing or invalid private configuration

Results go to stdout, errors as JSON to stderr. Selection changes local output, not the original API response or quota charge. API success is not proof of notification delivery or a completed export.

7. MCP or CLI and token cost

MCP and CLI use the same schemas, validation and HTTP handlers: Slipway builds the MCP server, over stdio or --http, and the CLI from each tool's one definition; there is no second API implementation.

Measured on 2026-10-05 against 2.0.1, 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.1

3.0.0

Claude Code, every tool loaded, every message

175,141

147,760

Claude Code's default, tool search, every message

2,606

2,608

SKILL.md, read once

1,413

1,492

Codex over the CLI, one task, median of five

86,367

83,866

Codex over MCP, the same task, median of five

48,777

48,646

The task was "find the command that imports media from a URL, and the flags it requires". Every tool loaded costs less because parts that several tools repeated, such as the player plugin settings, are written once. Over the CLI, 3.0.0's runs asked which, whose answer carries the command's help, where every 2.0.1 run read the 11,488-character command list. Over MCP, 3.0.0 cost slightly less. SKILL.md costs 79 more because it says how approval works over MCP and how which finds a command, 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.

8. Every tool and argument

All 167 stable HTTP operations derive from the pinned official September schema. The uploader has separate URL-form and local-file commands. list_accounts is local. Schemas validate complete body requirements whichever body input route you use. Each tool maps to its dashed CLI name. The permission column summarizes the provider requirements, not a substitute for the full endpoint reference.

Tool

API operation

Mode

Permission requirement

upload_media

POST /

Write, confirms

See current endpoint/account permission

upload_media_file

POST /

Write, confirms

See current endpoint/account permission

list_review_bundles

GET /review_bundles

Read

Read all folder and media data

create_review_bundle

POST /review_bundles

Write, confirms

Read, update & delete anything

delete_review_bundle

DELETE /review_bundles/{reviewBundleHashedId}

Write, confirms

Read, update & delete anything

list_deleted_media

GET /deleted_media

Read

Read all folder and media data

restore_deleted_media

POST /deleted_media/restore

Write, confirms

Upload and view media

list_media

GET /medias

Read

Read all folder and media data

get_media

GET /medias/{mediaHashedId}

Read

Read all folder and media data

update_media

PUT /medias/{mediaHashedId}

Write, confirms

Read, update & delete anything

delete_media

DELETE /medias/{mediaHashedId}

Write, confirms

Read, update & delete anything

copy_media

POST /medias/{mediaHashedId}/copy

Write, confirms

Read, update & delete anything

swap_media

PUT /medias/{mediaHashedId}/swap

Write, confirms

Read, update & delete anything

get_media_stats

GET /medias/{mediaHashedId}/stats

Read

Read all folder and media data

translate_media

POST /medias/{mediaHashedId}/translate

Write, confirms

Read, update & delete anything

import_media_from_url

POST /medias/import_url

Write, confirms

Read, update & delete anything

archive_media

PUT /medias/archive

Write, confirms

Read, update & delete anything

move_media

PUT /medias/move

Write, confirms

Read, update & delete anything

restore_media

PUT /medias/restore

Write, confirms

Read, update & delete anything

bulk_copy_media

PUT /medias/copy

Write, confirms

Read, update & delete anything

get_customizations

GET /medias/{mediaId}/customizations

Read

Read all folder and media data

create_customizations

POST /medias/{mediaId}/customizations

Write, confirms

Read, update & delete anything

update_customizations

PUT /medias/{mediaId}/customizations

Write, confirms

Read, update & delete anything

delete_customizations

DELETE /medias/{mediaId}/customizations

Write, confirms

Read, update & delete anything

get_appearance_customizations

GET /medias/{mediaId}/customizations/appearance

Read

Read all folder and media data

update_appearance_customizations

PUT /medias/{mediaId}/customizations/appearance

Write, confirms

Read, update & delete anything

get_playback_customizations

GET /medias/{mediaId}/customizations/playback

Read

Read all folder and media data

update_playback_customizations

PUT /medias/{mediaId}/customizations/playback

Write, confirms

Read, update & delete anything

get_thumbnail_customizations

GET /medias/{mediaId}/customizations/thumbnail

Read

Read all folder and media data

update_thumbnail_customizations

PUT /medias/{mediaId}/customizations/thumbnail

Write, confirms

Read, update & delete anything

get_accessibility_customizations

GET /medias/{mediaId}/customizations/accessibility

Read

Read all folder and media data

update_accessibility_customizations

PUT /medias/{mediaId}/customizations/accessibility

Write, confirms

Read, update & delete anything

get_chapters_customizations

GET /medias/{mediaId}/customizations/chapters

Read

Read all folder and media data

update_chapters_customizations

PUT /medias/{mediaId}/customizations/chapters

Write, confirms

Read, update & delete anything

get_engagement_customizations

GET /medias/{mediaId}/customizations/engagement

Read

Read all folder and media data

update_engagement_customizations

PUT /medias/{mediaId}/customizations/engagement

Write, confirms

Read, update & delete anything

get_related_media_customizations

GET /medias/{mediaId}/customizations/related_media

Read

Read all folder and media data

update_related_media_customizations

PUT /medias/{mediaId}/customizations/related_media

Write, confirms

Read, update & delete anything

get_sharing_customizations

GET /medias/{mediaId}/customizations/sharing

Read

Read all folder and media data

update_sharing_customizations

PUT /medias/{mediaId}/customizations/sharing

Write, confirms

Read, update & delete anything

get_lead_capture_customizations

GET /medias/{mediaId}/customizations/lead_capture

Read

Read all folder and media data

update_lead_capture_customizations

PUT /medias/{mediaId}/customizations/lead_capture

Write, confirms

Read, update & delete anything

get_access_customizations

GET /medias/{mediaId}/customizations/access

Read

Read all folder and media data

update_access_customizations

PUT /medias/{mediaId}/customizations/access

Write, confirms

Read, update & delete anything

resolve_share_link

GET /share_links/{identifier}

Read

Read all folder and media data

get_share_link

GET /medias/{mediaId}/share_link

Read

Read all folder and media data

update_share_link

PUT /medias/{mediaId}/share_link

Write, confirms

Read, update & delete anything

delete_share_link

DELETE /medias/{mediaId}/share_link

Write, confirms

Read, update & delete anything

list_captions

GET /medias/{mediaHashedId}/captions

Read

Read all folder and media data

create_captions

POST /medias/{mediaHashedId}/captions

Write, confirms

Read, update & delete anything

list_all_captions

GET /captions

Read

Read all folder and media data

find_caption_matches

POST /caption_matches

Read

Read all folder and media data

purchase_captions

POST /medias/{mediaHashedId}/captions/purchase

Write, confirms

Read, update & delete anything

get_captions

GET /medias/{mediaHashedId}/captions/{languageCode}

Read

Read all folder and media data

update_captions

PUT /medias/{mediaHashedId}/captions/{languageCode}

Write, confirms

Read, update & delete anything

delete_captions

DELETE /medias/{mediaHashedId}/captions/{languageCode}

Write, confirms

Read, update & delete anything

edit_captions_text

POST /medias/{mediaHashedId}/captions/{languageCode}/edits

Write, confirms

Read, update & delete anything

list_localizations

GET /medias/{mediaHashedId}/localizations

Read

Read all data

create_localization

POST /medias/{mediaHashedId}/localizations

Write, confirms

Read, update & delete anything

get_localization

GET /medias/{mediaHashedId}/localizations/{localizationHashedId}

Read

Read all data

delete_localization

DELETE /medias/{mediaHashedId}/localizations/{localizationHashedId}

Write, confirms

Read, update & delete anything

create_media_from_trims

POST /medias/{mediaHashedId}/trims

Write, confirms

Read, update & delete anything

list_media_extended_audio_descriptions

GET /media_extended_audio_descriptions

Read

See current endpoint/account permission

get_media_extended_audio_description

GET /media_extended_audio_descriptions/{id}

Read

See current endpoint/account permission

delete_media_extended_audio_description

DELETE /media_extended_audio_descriptions/{id}

Write, confirms

See current endpoint/account permission

order_extended_audio_description

POST /media_extended_audio_descriptions/order

Write, confirms

See current endpoint/account permission

get_order_status

GET /media_extended_audio_descriptions/order_status/{id}

Read

See current endpoint/account permission

list_brands

GET /brands

Read

Read all data

create_brand

POST /brands

Write, confirms

All data

get_brand

GET /brands/{brandId}

Read

Read all data

update_brand

PUT /brands/{brandId}

Write, confirms

All data

delete_brand

DELETE /brands/{brandId}

Write, confirms

All data

apply_brand

POST /brands/{brandId}/apply

Write, confirms

All data

list_speakers

GET /speakers

Read

Read all data

list_tags

GET /tags

Read

Read all data

create_tags

POST /tags

Write, confirms

Read, update & delete anything

delete_tag

DELETE /tags/{name}

Write, confirms

Read, update & delete anything

create_bulk_actions

POST /bulk

Write, confirms

Read, update & delete anything

create_bulk_purchase

POST /bulk/purchase

Write, confirms

Read, update & delete anything

bulk_tag

POST /taggings/bulk_create

Write, confirms

Read, update & delete anything

list_folders

GET /folders

Read

Read all folder and media data

create_folder

POST /folders

Write, confirms

Read, update & delete anything

get_folder

GET /folders/{id}

Read

Read all folder and media data

update_folder

PUT /folders/{id}

Write, confirms

Read, update & delete anything

delete_folder

DELETE /folders/{id}

Write, confirms

Read, update & delete anything

copy_folder

POST /folders/{id}/copy

Write, confirms

Read, update & delete anything

list_folder_sharings

GET /folders/{folderId}/sharings

Read

Read all data

create_folder_sharing

POST /folders/{folderId}/sharings

Write, confirms

Read, update & delete anything

get_folder_sharing

GET /folders/{folderId}/sharings/{sharingId}

Read

Read all data

update_folder_sharing

PUT /folders/{folderId}/sharings/{sharingId}

Write, confirms

Read, update & delete anything

delete_folder_sharing

DELETE /folders/{folderId}/sharings/{sharingId}

Write, confirms

Read, update & delete anything

list_subfolders

GET /folders/{folderId}/subfolders

Read

Read all folder and media data

create_subfolder

POST /folders/{folderId}/subfolders

Write, confirms

Read, update & delete anything

get_subfolder

GET /folders/{folderId}/subfolders/{subfolderId}

Read

Read all folder and media data

update_subfolder

PUT /folders/{folderId}/subfolders/{subfolderId}

Write, confirms

Read, update & delete anything

delete_subfolder

DELETE /folders/{folderId}/subfolders/{subfolderId}

Write, confirms

Read, update & delete anything

bulk_delete_subfolders

DELETE /folders/{folderId}/subfolders/bulk_delete

Write, confirms

Read, update & delete anything

list_channels

GET /channels

Read

Read all folder and media data

create_channel

POST /channels

Write, confirms

See current endpoint/account permission

get_channel

GET /channels/{channelHashedId}

Read

Read all folder and media data

update_channel

PUT /channels/{channelHashedId}

Write, confirms

See current endpoint/account permission

delete_channel

DELETE /channels/{channelHashedId}

Write, confirms

See current endpoint/account permission

get_channel_episode

GET /channels/{channelHashedId}/channel_episodes/{channelEpisodeId}

Read

Read all folder and media data

list_channel_episodes_by_channel

GET /channels/{channelHashedId}/channel_episodes

Read

Read all folder and media data

create_channel_episode

POST /channels/{channelHashedId}/channel_episodes

Write, confirms

Read, update & delete anything

list_channel_episodes

GET /channel_episodes

Read

Read all folder and media data

update_channel_episode

PUT /channel_episodes/{channelEpisodeHashedId}

Write, confirms

Read, update & delete anything

delete_channel_episode

DELETE /channel_episodes/{channelEpisodeHashedId}

Write, confirms

Read, update & delete anything

publish_channel_episode

PUT /channel_episodes/{channelEpisodeHashedId}/publish

Write, confirms

Read, update & delete anything

un_publish_channel_episode

PUT /channel_episodes/{channelEpisodeHashedId}/unpublish

Write, confirms

Read, update & delete anything

list_channel_collaborators

GET /channels/{channelHashedId}/collaborators

Read

Read all data

create_channel_collaborator

POST /channels/{channelHashedId}/collaborators

Write, confirms

Read, update & delete anything

delete_channel_collaborator

DELETE /channels/{channelHashedId}/collaborators/{id}

Write, confirms

Read, update & delete anything

list_webinars

GET /webinars

Read

Read all data

create_webinar

POST /webinars

Write, confirms

Read, update & delete anything

get_webinar

GET /webinars/{id}

Read

Read all data

update_webinar

PUT /webinars/{id}

Write, confirms

Read, update & delete anything

delete_webinar

DELETE /webinars/{id}

Write, confirms

Read, update & delete anything

list_webinar_registrations

GET /webinars/{webinarId}/registrations

Read

Read all data

create_webinar_registration

POST /webinars/{webinarId}/registrations

Write, confirms

Read, update & delete anything

list_webinar_collaborators

GET /webinars/{webinarId}/collaborators

Read

Read all data

create_webinar_collaborator

POST /webinars/{webinarId}/collaborators

Write, confirms

Read, update & delete anything

delete_webinar_collaborator

DELETE /webinars/{webinarId}/collaborators/{id}

Write, confirms

Read, update & delete anything

get_account

GET /account

Read

(any scope allowed)

get_account_usage

GET /account_usage

Read

(any scope allowed)

get_credit_balance

GET /credits/balance

Read

(any scope allowed)

get_brand_preload

GET /brand_preload

Read

(any scope allowed)

update_brand_preload

PUT /brand_preload

Write, confirms

(any scope allowed)

get_brand_kit_colors

GET /brand_kit_colors

Read

(any scope allowed)

invite_contacts

POST /contacts

Write, confirms

Read, update & delete anything

dismiss_desktop_install_prompt

POST /contact/dismiss_desktop_install_prompt

Write, confirms

Read, update & delete anything

start_account_trial

POST /account/trials

Write, confirms

Read, update & delete anything

get_current_token

GET /token

Read

See current endpoint/account permission

search

GET /search

Read

Read all data

resolve_resource_urls

GET /resource_urls

Read

Read all data

create_expiring_access_token

POST /expiring_token

Write, confirms

Read, update & delete anything

get_job_status

GET /background_job_status/{backgroundJobStatusId}

Read

Read all data

list_allowed_domains

GET /allowed_domains

Read

Read all data

create_allowed_domain

POST /allowed_domains

Write, confirms

Read, update & delete anything

get_allowed_domain

GET /allowed_domains/{domain}

Read

Read all data

delete_allowed_domain

DELETE /allowed_domains/{domain}

Write, confirms

Read, update & delete anything

get_account_stats

GET /stats/account

Read

Read detailed stats

get_account_stats_by_date

GET /stats/account/by_date

Read

Read detailed stats

get_project_stats

GET /stats/projects/{projectId}

Read

Read detailed stats

get_media_stats_stats_media

GET /stats/medias/{mediaId}

Read

Read detailed stats

get_media_stats_by_date

GET /stats/medias/{mediaId}/by_date

Read

Read detailed stats

get_media_engagement

GET /stats/medias/{mediaId}/engagement

Read

Read detailed stats

list_visitors

GET /stats/visitors

Read

Read detailed stats

get_visitor

GET /stats/visitors/{visitorKey}

Read

Read detailed stats

list_events

GET /stats/events

Read

Read detailed stats

get_event

GET /stats/events/{eventKey}

Read

Read detailed stats

get_account_analytics

GET /analytics/account

Read

Read detailed stats

get_account_analytics_timeseries

GET /analytics/account/timeseries

Read

Read detailed stats

get_account_top_content

GET /analytics/account/top_content

Read

Read detailed stats

get_account_embed_locations

GET /analytics/account/embed_locations

Read

Read detailed stats

find_media_by_embed_location

GET /analytics/account/media_by_embed_location

Read

Read detailed stats

get_media_analytics

GET /analytics/medias/{mediaId}

Read

Read detailed stats

get_media_analytics_timeseries

GET /analytics/medias/{mediaId}/timeseries

Read

Read detailed stats

get_media_embed_locations

GET /analytics/medias/{mediaId}/embed_locations

Read

Read detailed stats

get_media_embed_locations_timeseries

GET /analytics/medias/{mediaId}/embed_locations_timeseries

Read

Read detailed stats

get_media_traffic_breakdown

GET /analytics/medias/{mediaId}/traffic

Read

Read detailed stats

get_media_form_conversions

GET /analytics/medias/{mediaId}/conversions

Read

Read detailed stats

get_media_languages

GET /analytics/medias/{mediaId}/languages

Read

Read detailed stats

get_webinar_analytics

GET /analytics/webinars/{webinarId}

Read

Read detailed stats

get_webinar_registration_timeseries

GET /analytics/webinars/{webinarId}/registration

Read

Read detailed stats

get_webinar_traffic_breakdown

GET /analytics/webinars/{webinarId}/traffic

Read

Read detailed stats

get_webinar_audience

GET /analytics/webinars/{webinarId}/audience

Read

Read detailed stats

get_webinar_histograms

GET /analytics/webinars/{webinarId}/histograms

Read

Read detailed stats

list_accounts

Local, no network

Read

No remote permission

upload_media

wistia-cli upload-media

Argument

Required

Type

Details

project_id

No; body/guard rules still apply

string

The hashed id of the project to upload media into.

name

No; body/guard rules still apply

string

A display name to use for the media in Wistia. maxLength: 255.

description

No; body/guard rules still apply

string

A description to use for the media in Wistia.

contact_id

No; body/guard rules still apply

integer

A Wistia contact id.

url

No; body/guard rules still apply

string

The publicly accessible web location of the media file to import. format: uri.

low_priority

No; body/guard rules still apply

boolean

Inform the encoding service that this upload can be considered lower priority than others. This is especially useful for platform customers doing bulk uploads or migrations. Setting this to "false" has no effect.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: url.

payload_file

No; body/guard rules still apply

string

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

Body requires: url.

upload_media_file

wistia-cli upload-media-file

Argument

Required

Type

Details

project_id

No; body/guard rules still apply

string

The hashed id of the project to upload media into.

name

No; body/guard rules still apply

string

A display name to use for the media in Wistia. maxLength: 255.

description

No; body/guard rules still apply

string

A description to use for the media in Wistia.

contact_id

No; body/guard rules still apply

integer

A Wistia contact id.

file

No; body/guard rules still apply

string

Absolute regular local file, no symlinks, at most 250 MiB locally. Bytes are sent after explicit confirmation. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: file.

payload_file

No; body/guard rules still apply

string

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

Body requires: file.

list_review_bundles

wistia-cli list-review-bundles

Argument

Required

Type

Details

hashed_ids

No; body/guard rules still apply

array

Restrict the results to the review bundles with these hashed IDs. Array items: string.

name

No; body/guard rules still apply

string

Restrict the results to review bundles whose name contains this value (case-insensitive).

media_hashed_id

No; body/guard rules still apply

string

Restrict the results to review bundles that include the media with this hashed ID.

folder_hashed_id

No; body/guard rules still apply

string

Restrict the results to review bundles that include any media from the folder with this hashed ID.

sort_by

No; body/guard rules still apply

string

Field to order by. The default is id. Values: id, name, created, updated.

sort_direction

No; body/guard rules still apply

integer

Direction to order by. (0 = desc, 1 = asc; default is 1) Values: 0, 1.

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

create_review_bundle

wistia-cli create-review-bundle

Argument

Required

Type

Details

media_hashed_ids

No; body/guard rules still apply

array

The hashed ids of the media to include in the bundle. Limited to 25 media. Array items: string.

name

No; body/guard rules still apply

string

The bundle display name.

allow_downloads

No; body/guard rules still apply

boolean

Whether the videos in the bundle can be downloaded.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: media_hashed_ids, name.

payload_file

No; body/guard rules still apply

string

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

Body requires: media_hashed_ids, name.

delete_review_bundle

wistia-cli delete-review-bundle

Argument

Required

Type

Details

review_bundle_hashed_id

Yes

string

The hashed id of the review bundle. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

list_deleted_media

wistia-cli list-deleted-media

Argument

Required

Type

Details

hashed_ids

No; body/guard rules still apply

array

Restrict the results to the deleted media with these hashed IDs. Array items: string.

sort_by

No; body/guard rules still apply

string

Field to order by. When omitted, results are ordered most-recently-deleted first. Values: id, deleted, name, type, created.

sort_direction

No; body/guard rules still apply

integer

Direction to order by. (0 = desc, 1 = asc; default is 1) Values: 0, 1.

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

restore_deleted_media

wistia-cli restore-deleted-media

Argument

Required

Type

Details

media_hashed_ids

No; body/guard rules still apply

array

The hashed ids of the soft-deleted media to restore. Up to 1000 at a time. Array items: string.

folder_id

No; body/guard rules still apply

string

Optional hashed id of the folder to restore the media into. If omitted, each media returns to the folder it was deleted from.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: media_hashed_ids.

payload_file

No; body/guard rules still apply

string

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

Body requires: media_hashed_ids.

list_media

wistia-cli list-media

Argument

Required

Type

Details

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

sort_by

No; body/guard rules still apply

string

Ordering. When using cursor pagination (see cursor param), only id and created are supported. All other sort_by options (name, updated, position) require offset pagination. Values: name, created, updated, position.

sort_direction

No; body/guard rules still apply

integer

Ordering Sort Direction (0 = desc, 1 = asc; default is 1) Values: 0, 1.

folder_id

No; body/guard rules still apply

string

A hashed ID specifying the folder from which you would like to get results.

name

No; body/guard rules still apply

string

Find a media or medias whose name exactly matches this parameter.

description_format

No; body/guard rules still apply

string

Format for media descriptions

include

No; body/guard rules still apply

string

Set to speakers to include active transcript speaker assignments used for diarization. Webinar hosts and panelists are not included. Values: speakers.

type

No; body/guard rules still apply

string

A string specifying which type of media you would like to get. Values: Video, Audio, Image, PdfDocument, MicrosoftOfficeDocument, Swf, UnknownType.

hashed_ids

No; body/guard rules still apply

array

Find all of the medias by these hashed_ids. Array items: string.

tags

No; body/guard rules still apply

array

Find all of the medias that match all of these tag names. Array items: string.

archived

No; body/guard rules still apply

boolean

Filter by archived status. True will return only archived medias, while false will return only active medias.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

get_media

wistia-cli get-media

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media. minLength: 1.

description_format

No; body/guard rules still apply

string

Format for media descriptions

include

No; body/guard rules still apply

string

Set to speakers to include active transcript speaker assignments used for diarization. Webinar hosts and panelists are not included. Values: speakers.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_media

wistia-cli update-media

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media. minLength: 1.

name

No; body/guard rules still apply

string

The media’s new name.

new_still_media_id

No; body/guard rules still apply

string

The Wistia hashed ID of an image that will replace the still that’s displayed before the player starts playing.

description

No; body/guard rules still apply

string

A new description for this media. Accepts plain text or markdown.

tags

No; body/guard rules still apply

array

An array of tag names to apply to the media. This replaces any existing tags. To add tags without replacing existing tags, use bulk-tag-media. Array items: string.

custom_metadata

No; body/guard rules still apply

object

Custom metadata field values to set, keyed by field key. Values take the same shapes as the Set Custom Metadata Field Value endpoint; a null value clears that field and omitted fields are untouched. Requires the custom metadata feature on the account.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

delete_media

wistia-cli delete-media

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

copy_media

wistia-cli copy-media

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media. minLength: 1.

folder_id

No; body/guard rules still apply

integer

The ID of the folder where you want the new copy placed. Defaults to the source media’s current folder if omitted or invalid.

owner

No; body/guard rules still apply

string

An email address specifying the owner of the new media. Defaults to the source media’s current owner if omitted or invalid. format: email.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

swap_media

wistia-cli swap-media

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media to be replaced. minLength: 1.

replacement_media_id

No; body/guard rules still apply

string

The hashed ID of the media that will replace the original media. Must be the same media type as the original.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: replacement_media_id.

payload_file

No; body/guard rules still apply

string

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

Body requires: replacement_media_id.

get_media_stats

wistia-cli get-media-stats

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the video. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

translate_media

wistia-cli translate-media

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media. minLength: 1.

target_language

No; body/guard rules still apply

string

The language to translate the transcript to. Use the bibliographic ISO 639-2 form or a supported regional or script IETF tag.

source_language

No; body/guard rules still apply

string

The language of the source transcript. Use the bibliographic ISO 639-2 form or a supported regional or script IETF tag. If not provided, the media's default transcript language will be used.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: target_language.

payload_file

No; body/guard rules still apply

string

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

Body requires: target_language.

import_media_from_url

wistia-cli import-media-from-url

Argument

Required

Type

Details

url

No; body/guard rules still apply

string

The publicly accessible URL of the media file to import. format: uri.

folder_id

No; body/guard rules still apply

string

The hashed ID of the folder (project) to import the media into. If not provided, a new folder will be created.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: url.

payload_file

No; body/guard rules still apply

string

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

Body requires: url.

archive_media

wistia-cli archive-media

Argument

Required

Type

Details

hashed_ids

No; body/guard rules still apply

array

An array of the media hashed IDs to be archived. Array items: string.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: hashed_ids.

payload_file

No; body/guard rules still apply

string

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

Body requires: hashed_ids.

move_media

wistia-cli move-media

Argument

Required

Type

Details

hashed_ids

No; body/guard rules still apply

array

An array of the media hashed IDs to be moved. Array items: string.

folder_id

No; body/guard rules still apply

string

The hashed ID of the folder where you want the media moved.

subfolder_id

No; body/guard rules still apply

string

Optional. The hashed ID of the subfolder where you want the media moved. If not provided, media will be moved to the folder's default subfolder. The subfolder must belong to the specified folder.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: hashed_ids, folder_id.

payload_file

No; body/guard rules still apply

string

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

Body requires: hashed_ids, folder_id.

restore_media

wistia-cli restore-media

Argument

Required

Type

Details

hashed_ids

No; body/guard rules still apply

array

An array of the media hashed IDs to be restored. Array items: string.

folder_id

No; body/guard rules still apply

string

The hashed ID of the folder to restore the medias to.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: hashed_ids, folder_id.

payload_file

No; body/guard rules still apply

string

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

Body requires: hashed_ids, folder_id.

bulk_copy_media

wistia-cli bulk-copy-media

Argument

Required

Type

Details

hashed_ids

No; body/guard rules still apply

array

An array of the media hashed IDs to be copied. Array items: string.

folder_id

No; body/guard rules still apply

string

The hashed ID of the destination folder where the copies will be placed.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: hashed_ids, folder_id.

payload_file

No; body/guard rules still apply

string

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

Body requires: hashed_ids, folder_id.

get_customizations

wistia-cli get-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

create_customizations

wistia-cli create-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

autoPlay

No; body/guard rules still apply

boolean

If set to true, the video will play as soon as it’s ready. Note that autoplay might not work on some devices and browsers.

controlsVisibleOnLoad

No; body/guard rules still apply

boolean

If set to true, controls like the big play button, playbar, volume, etc. will be visible as soon as the video is embedded.

copyLinkAndThumbnailEnabled

No; body/guard rules still apply

boolean

If set to false, the option to “Copy Link and Thumbnail” will be removed when right-clicking on the video.

doNotTrack

No; body/guard rules still apply

boolean

If set to true, data for each viewing session will not be tracked.

email

No; body/guard rules still apply

string

Associate a specific email address with this video’s viewing sessions.

endVideoBehavior

No; body/guard rules still apply

string

Determines what happens when the video ends. Options are default (stays on the last frame), reset (shows thumbnail and controls), and loop (plays again from the start).

fakeFullscreen

No; body/guard rules still apply

boolean

If set to true, the video will try to play in a pseudo-fullscreen mode on certain mobile devices.

fitStrategy

No; body/guard rules still apply

string

Resizes the video when there's a discrepancy between its aspect ratio and that of its parent container. Options are contain, cover, fill, and none.

fullscreenButton

No; body/guard rules still apply

boolean

If set to true, the fullscreen button will be available as a video control.

fullscreenOnRotateToLandscape

No; body/guard rules still apply

boolean

If set to false, the video will not automatically go to fullscreen mode on mobile when rotated to landscape.

keyMoments

No; body/guard rules still apply

boolean

If set to false, the key moments feature will be disabled.

muted

No; body/guard rules still apply

boolean

If set to true, the video will start in a muted state.

playbackRateControl

No; body/guard rules still apply

boolean

If set to false, the playback speed controls in the settings menu will be hidden.

playbar

No; body/guard rules still apply

boolean

If set to true, the playbar will be available. If set to false, it will be hidden.

playButton

No; body/guard rules still apply

boolean

Indicates if the play button is visible.

playerColor

No; body/guard rules still apply

string

Changes the base color of the player. Expects a hexadecimal rgb string.

playlistLinks

No; body/guard rules still apply

boolean

Enables the use of specially crafted links on the page to associate with a video, turning them into a playlist.

playlistLoop

No; body/guard rules still apply

boolean

If set to true and this video has a playlist, it will loop back to the first video after the last one has finished.

playsinline

No; body/guard rules still apply

boolean

If set to false, videos will play within the native mobile player.

playPauseNotifier

No; body/guard rules still apply

boolean

If set to false, animations for the Pause and Play symbols will be removed.

playSuspendedOffScreen

No; body/guard rules still apply

boolean

If set to false for a muted autoplay video, the video won't pause when out of view.

plugin

No; body/guard rules still apply

object

Current schema

preload

No; body/guard rules still apply

string

Sets the video’s preload property. Possible values are metadata, auto, none, true, and false.

qualityControl

No; body/guard rules still apply

boolean

If set to false, the video quality selector in the settings menu will be hidden.

qualityMax

No; body/guard rules still apply

integer

Specifies the maximum quality the video will play at.

qualityMin

No; body/guard rules still apply

integer

Specifies the minimum quality the video will play at.

resumable

No; body/guard rules still apply

string

Determines if the video should resume from where the viewer left off. Options are true, false, and auto.

seo

No; body/guard rules still apply

boolean

If set to true, the video’s metadata will be injected into the page’s markup for SEO.

settingsControl

No; body/guard rules still apply

boolean

If set to true, the settings control will be available.

silentAutoPlay

No; body/guard rules still apply

string

Determines how videos handle autoplay in contexts where normal autoplay might be blocked. Options are true, allow, and false.

smallPlayButton

No; body/guard rules still apply

boolean

Current schema

stillUrl

No; body/guard rules still apply

string

Overrides the thumbnail image that appears before the video plays.

time

No; body/guard rules still apply

string

Sets the starting time of the video.

thumbnailAltText

No; body/guard rules still apply

string

Sets the Thumbnail Alt Text for the media.

videoFoam

No; body/guard rules still apply

JSON union

When set to true, the video will adjust its size according to its parent element. It can also be an object specifying min/max width or height. At least one schema branch must match.

volume

No; body/guard rules still apply

number

Sets the volume of the video.

volumeControl

No; body/guard rules still apply

boolean

When set to true, a volume control is available over the video.

wmode

No; body/guard rules still apply

string

If set to transparent, the background behind the player will be transparent instead of black.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

plugin.videoThumbnail

No

object

Current schema

plugin.videoThumbnail.clickToPlayButton

No

boolean

If set to false, removes the “Click to Play” button on video thumbnails.

plugin.socialbar-v1

No

object

Current schema

plugin.socialbar-v1.buttons

No

string

Current schema

plugin.socialbar-v1.showTweetCount

No

boolean

Current schema

plugin.socialbar-v1.tweetText

No

string

Current schema

plugin.socialbar-v1.height

No

integer

Current schema

plugin.chapters

No

object

Current schema

plugin.chapters.visibleOnLoad

No

boolean

Current schema

plugin.chapters.chapterList

No

array

Array items: object.

plugin.chapters.chapterList[].id

No

string

Current schema

plugin.chapters.chapterList[].title

No

string

Current schema

plugin.chapters.chapterList[].time

No

string

Current schema

plugin.chapters.chapterList[].deleted

No

string

Current schema

plugin.chapters.on

No

boolean

Current schema

plugin.postRoll-v1

No

object

Adds a Call To Action to your Video

plugin.postRoll-v1.rewatch

No

boolean

If set to true, allows the video to be rewatched.

plugin.postRoll-v1.text

No

string

The URL of the text to be displayed.

plugin.postRoll-v1.link

No

string

The URL of the link to be displayed.

plugin.postRoll-v1.time

No

JSON union

The time when the post-roll should be displayed. Can be a string like "end" or a number representing seconds. Exactly one of 2 schema branches; inspect the complete schema.

plugin.postRoll-v1.autoSize

No

boolean

If set to true, the post-roll will automatically adjust its size.

plugin.postRoll-v1.style

No

object

Current schema

plugin.postRoll-v1.style.backgroundColor

No

string

The background color of the post-roll.

plugin.postRoll-v1.ctaType

No

string

The type of call-to-action to be displayed. Typically set to "text". Other options are "image" which allows for "altText", and "html".

plugin.postRoll-v1.on

No

boolean

If set to true, the post-roll is enabled.

plugin.postRoll-v1.conversionOpportunityKey

No

string

The key used for tracking conversion opportunities.

plugin.captions-v1

No

object

Enables closed captions for the video

plugin.captions-v1.on

No

boolean

If set to true, the captions plugin is enabled and captions controls will be available to viewers.

plugin.captions-v1.onByDefault

No

boolean

If set to true, captions will be turned on automatically when the video loads. Only takes effect when the captions plugin is enabled.

update_customizations

wistia-cli update-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video to be customized. minLength: 1.

autoPlay

No; body/guard rules still apply

boolean

If set to true, the video will play as soon as it’s ready. Note that autoplay might not work on some devices and browsers.

controlsVisibleOnLoad

No; body/guard rules still apply

boolean

If set to true, controls like the big play button, playbar, volume, etc. will be visible as soon as the video is embedded.

copyLinkAndThumbnailEnabled

No; body/guard rules still apply

boolean

If set to false, the option to “Copy Link and Thumbnail” will be removed when right-clicking on the video.

doNotTrack

No; body/guard rules still apply

boolean

If set to true, data for each viewing session will not be tracked.

email

No; body/guard rules still apply

string

Associate a specific email address with this video’s viewing sessions.

endVideoBehavior

No; body/guard rules still apply

string

Determines what happens when the video ends. Options are default (stays on the last frame), reset (shows thumbnail and controls), and loop (plays again from the start).

fakeFullscreen

No; body/guard rules still apply

boolean

If set to true, the video will try to play in a pseudo-fullscreen mode on certain mobile devices.

fitStrategy

No; body/guard rules still apply

string

Resizes the video when there's a discrepancy between its aspect ratio and that of its parent container. Options are contain, cover, fill, and none.

fullscreenButton

No; body/guard rules still apply

boolean

If set to true, the fullscreen button will be available as a video control.

fullscreenOnRotateToLandscape

No; body/guard rules still apply

boolean

If set to false, the video will not automatically go to fullscreen mode on mobile when rotated to landscape.

keyMoments

No; body/guard rules still apply

boolean

If set to false, the key moments feature will be disabled.

muted

No; body/guard rules still apply

boolean

If set to true, the video will start in a muted state.

playbackRateControl

No; body/guard rules still apply

boolean

If set to false, the playback speed controls in the settings menu will be hidden.

playbar

No; body/guard rules still apply

boolean

If set to true, the playbar will be available. If set to false, it will be hidden.

playButton

No; body/guard rules still apply

boolean

Indicates if the play button is visible.

playerColor

No; body/guard rules still apply

string

Changes the base color of the player. Expects a hexadecimal rgb string.

playlistLinks

No; body/guard rules still apply

boolean

Enables the use of specially crafted links on the page to associate with a video, turning them into a playlist.

playlistLoop

No; body/guard rules still apply

boolean

If set to true and this video has a playlist, it will loop back to the first video after the last one has finished.

playsinline

No; body/guard rules still apply

boolean

If set to false, videos will play within the native mobile player.

playPauseNotifier

No; body/guard rules still apply

boolean

If set to false, animations for the Pause and Play symbols will be removed.

playSuspendedOffScreen

No; body/guard rules still apply

boolean

If set to false for a muted autoplay video, the video won't pause when out of view.

plugin

No; body/guard rules still apply

object

Current schema

preload

No; body/guard rules still apply

string

Sets the video’s preload property. Possible values are metadata, auto, none, true, and false.

qualityControl

No; body/guard rules still apply

boolean

If set to false, the video quality selector in the settings menu will be hidden.

qualityMax

No; body/guard rules still apply

integer

Specifies the maximum quality the video will play at.

qualityMin

No; body/guard rules still apply

integer

Specifies the minimum quality the video will play at.

resumable

No; body/guard rules still apply

string

Determines if the video should resume from where the viewer left off. Options are true, false, and auto.

seo

No; body/guard rules still apply

boolean

If set to true, the video’s metadata will be injected into the page’s markup for SEO.

settingsControl

No; body/guard rules still apply

boolean

If set to true, the settings control will be available.

silentAutoPlay

No; body/guard rules still apply

string

Determines how videos handle autoplay in contexts where normal autoplay might be blocked. Options are true, allow, and false.

smallPlayButton

No; body/guard rules still apply

boolean

Current schema

stillUrl

No; body/guard rules still apply

string

Overrides the thumbnail image that appears before the video plays.

time

No; body/guard rules still apply

string

Sets the starting time of the video.

thumbnailAltText

No; body/guard rules still apply

string

Sets the Thumbnail Alt Text for the media.

videoFoam

No; body/guard rules still apply

JSON union

When set to true, the video will adjust its size according to its parent element. It can also be an object specifying min/max width or height. At least one schema branch must match.

volume

No; body/guard rules still apply

number

Sets the volume of the video.

volumeControl

No; body/guard rules still apply

boolean

When set to true, a volume control is available over the video.

wmode

No; body/guard rules still apply

string

If set to transparent, the background behind the player will be transparent instead of black.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

plugin.videoThumbnail

No

object

Current schema

plugin.videoThumbnail.clickToPlayButton

No

boolean

If set to false, removes the “Click to Play” button on video thumbnails.

plugin.socialbar-v1

No

object

Current schema

plugin.socialbar-v1.buttons

No

string

Current schema

plugin.socialbar-v1.showTweetCount

No

boolean

Current schema

plugin.socialbar-v1.tweetText

No

string

Current schema

plugin.socialbar-v1.height

No

integer

Current schema

plugin.chapters

No

object

Current schema

plugin.chapters.visibleOnLoad

No

boolean

Current schema

plugin.chapters.chapterList

No

array

Array items: object.

plugin.chapters.chapterList[].id

No

string

Current schema

plugin.chapters.chapterList[].title

No

string

Current schema

plugin.chapters.chapterList[].time

No

string

Current schema

plugin.chapters.chapterList[].deleted

No

string

Current schema

plugin.chapters.on

No

boolean

Current schema

plugin.postRoll-v1

No

object

Adds a Call To Action to your Video

plugin.postRoll-v1.rewatch

No

boolean

If set to true, allows the video to be rewatched.

plugin.postRoll-v1.text

No

string

The URL of the text to be displayed.

plugin.postRoll-v1.link

No

string

The URL of the link to be displayed.

plugin.postRoll-v1.time

No

JSON union

The time when the post-roll should be displayed. Can be a string like "end" or a number representing seconds. Exactly one of 2 schema branches; inspect the complete schema.

plugin.postRoll-v1.autoSize

No

boolean

If set to true, the post-roll will automatically adjust its size.

plugin.postRoll-v1.style

No

object

Current schema

plugin.postRoll-v1.style.backgroundColor

No

string

The background color of the post-roll.

plugin.postRoll-v1.ctaType

No

string

The type of call-to-action to be displayed. Typically set to "text". Other options are "image" which allows for "altText", and "html".

plugin.postRoll-v1.on

No

boolean

If set to true, the post-roll is enabled.

plugin.postRoll-v1.conversionOpportunityKey

No

string

The key used for tracking conversion opportunities.

plugin.captions-v1

No

object

Enables closed captions for the video

plugin.captions-v1.on

No

boolean

If set to true, the captions plugin is enabled and captions controls will be available to viewers.

plugin.captions-v1.onByDefault

No

boolean

If set to true, captions will be turned on automatically when the video loads. Only takes effect when the captions plugin is enabled.

delete_customizations

wistia-cli delete-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the media whose customizations are to be deleted. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

get_appearance_customizations

wistia-cli get-appearance-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_appearance_customizations

wistia-cli update-appearance-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video to be customized. minLength: 1.

playerColor

No; body/guard rules still apply

string

Base color of the player as a hexadecimal RGB string (no leading '#').

playerColorGradient

No; body/guard rules still apply

object

Optional gradient applied to the player color.

roundedPlayer

No; body/guard rules still apply

integer

Corner radius of the player in pixels. 0 disables rounding.

opaqueControls

No; body/guard rules still apply

boolean

If true, player controls render on an opaque background.

contrastIcons

No; body/guard rules still apply

boolean

If true, control icons use a higher-contrast treatment.

branding

No; body/guard rules still apply

boolean

If false, Wistia branding is hidden on the player.

showCustomerLogo

No; body/guard rules still apply

boolean

If true, your customer logo is shown on the player.

customerLogoImageUrl

No; body/guard rules still apply

string

URL of the customer logo image to display on the player.

customerLogoTargetUrl

No; body/guard rules still apply

string

URL the customer logo links to when clicked.

customerLogoPlacement

No; body/guard rules still apply

string

Placement of the customer logo on the player (e.g. top-right).

customerLogoSizePercent

No; body/guard rules still apply

integer

Size of the customer logo as a percentage of the player.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

playerColorGradient.on

No

boolean

Whether the gradient is enabled.

playerColorGradient.colors

No

array

Ordered list of [hex color, stop] pairs defining the gradient. Array items: array.

get_playback_customizations

wistia-cli get-playback-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_playback_customizations

wistia-cli update-playback-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video to be customized. minLength: 1.

autoPlay

No; body/guard rules still apply

boolean

If set to true, the video will play as soon as it’s ready. Note that autoplay might not work on some devices and browsers.

silentAutoPlay

No; body/guard rules still apply

string

Determines how videos handle autoplay in contexts where normal autoplay might be blocked. Options are "true", "allow", and "false".

muted

No; body/guard rules still apply

boolean

If set to true, the video will start in a muted state.

volume

No; body/guard rules still apply

number

Sets the volume of the video.

controlsVisibleOnLoad

No; body/guard rules still apply

boolean

If set to true, controls like the big play button, playbar, volume, etc. will be visible as soon as the video is embedded.

playButton

No; body/guard rules still apply

boolean

Indicates if the play button is visible.

smallPlayButton

No; body/guard rules still apply

boolean

If set to true, the small play button control is shown.

playbar

No; body/guard rules still apply

boolean

If set to true, the playbar will be available. If set to false, it will be hidden.

volumeControl

No; body/guard rules still apply

boolean

When set to true, a volume control is available over the video.

fullscreenButton

No; body/guard rules still apply

boolean

If set to true, the fullscreen button will be available as a video control.

settingsControl

No; body/guard rules still apply

boolean

If set to true, the settings control will be available.

playbackRateControl

No; body/guard rules still apply

boolean

If set to false, the playback speed controls in the settings menu will be hidden.

qualityControl

No; body/guard rules still apply

boolean

If set to false, the video quality selector in the settings menu will be hidden.

qualityMin

No; body/guard rules still apply

integer

Specifies the minimum quality the video will play at.

qualityMax

No; body/guard rules still apply

integer

Specifies the maximum quality the video will play at.

videoQuality

No; body/guard rules still apply

string

Sets the default video quality the video will play at.

hls

No; body/guard rules still apply

boolean

If set to true, HLS adaptive bitrate streaming is enabled.

endVideoBehavior

No; body/guard rules still apply

string

Determines what happens when the video ends. Options are "default" (stays on the last frame), "reset" (shows thumbnail and controls), and "loop" (plays again from the start).

playsinline

No; body/guard rules still apply

boolean

If set to false, videos will play within the native mobile player.

playlistLoop

No; body/guard rules still apply

boolean

If set to true and this video has a playlist, it will loop back to the first video after the last one has finished.

playlistLinks

No; body/guard rules still apply

boolean

Enables the use of specially crafted links on the page to associate with a video, turning them into a playlist.

playPauseNotifier

No; body/guard rules still apply

boolean

If set to false, animations for the Pause and Play symbols will be removed.

playSuspendedOffScreen

No; body/guard rules still apply

boolean

If set to false for a muted autoplay video, the video won’t pause when out of view.

resumable

No; body/guard rules still apply

string

Determines if the video should resume from where the viewer left off. Options are "true", "false", and "auto".

preload

No; body/guard rules still apply

string

Sets the video’s preload property. Possible values are metadata, auto, none, true, and false.

time

No; body/guard rules still apply

string

Sets the starting time of the video.

keyMoments

No; body/guard rules still apply

boolean

If set to false, the key moments feature will be disabled.

fullscreenOnRotateToLandscape

No; body/guard rules still apply

boolean

If set to false, the video will not automatically go to fullscreen mode on mobile when rotated to landscape.

fakeFullScreen

No; body/guard rules still apply

boolean

If set to true, the video will try to play in a pseudo-fullscreen mode on certain mobile devices.

videoFoam

No; body/guard rules still apply

JSON union

When set to true, the video will adjust its size according to its parent element. It can also be an object specifying min/max width or height. At least one schema branch must match.

wmode

No; body/guard rules still apply

string

If set to transparent, the background behind the player will be transparent instead of black.

bpbTime

No; body/guard rules still apply

string

Controls when the big play button appears, expressed as a string.

spherical

No; body/guard rules still apply

boolean

If set to true, the video is rendered as a spherical (360-degree) video.

clickForSound

No; body/guard rules still apply

boolean

If set to true, viewers can click to enable sound on a muted video.

seo

No; body/guard rules still apply

boolean

If set to true, the video’s metadata will be injected into the page’s markup for SEO.

doNotTrack

No; body/guard rules still apply

boolean

If set to true, data for each viewing session will not be tracked.

copyLinkAndThumbnailEnabled

No; body/guard rules still apply

boolean

If set to false, the option to “Copy Link and Thumbnail” will be removed when right-clicking on the video.

email

No; body/guard rules still apply

string

Associate a specific email address with this video’s viewing sessions.

googleAnalytics

No; body/guard rules still apply

string

Google Analytics tracking configuration to associate with this video’s viewing sessions.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

get_thumbnail_customizations

wistia-cli get-thumbnail-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_thumbnail_customizations

wistia-cli update-thumbnail-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video to be customized. minLength: 1.

stillUrl

No; body/guard rules still apply

string

Overrides the thumbnail image that appears before the video plays.

thumbnailAltText

No; body/guard rules still apply

string

Alt text for the thumbnail image, used for accessibility.

fitStrategy

No; body/guard rules still apply

string

Resizes the thumbnail when there's a discrepancy between its aspect ratio and that of its parent container. Options are contain, cover, fill, and none.

unalteredStillImageAsset

No; body/guard rules still apply

string

Reference to the original, unaltered still image asset.

plugin

No; body/guard rules still apply

object

Container for thumbnail-related player plugin configurations.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

plugin.videoThumbnail

No

object

Looping video thumbnail (a short clip used as the poster).

plugin.videoThumbnail.clickToPlayButton

No

boolean

If set to false, removes the “Click to Play” button on video thumbnails.

plugin.videoThumbnail.clickForSound

No

boolean

If set to true, shows a click-for-sound affordance on the video thumbnail.

plugin.videoThumbnail.hashedId

No

string

The hashed ID of the media used as the looping video thumbnail.

plugin.videoThumbnail.trimStart

No

string

Start time of the trimmed clip used as the video thumbnail.

plugin.videoThumbnail.trimEnd

No

string

End time of the trimmed clip used as the video thumbnail.

plugin.videoThumbnail.priorityMode

No

string

Priority mode controlling how the video thumbnail is loaded.

plugin.thumbnailTextOverlay-v2

No

object

Text overlay rendered on top of the thumbnail.

plugin.thumbnailTextOverlay-v2.on

No

boolean

If set to true, the text overlay is enabled.

plugin.thumbnailTextOverlay-v2.text

No

string

The text displayed in the overlay.

get_accessibility_customizations

wistia-cli get-accessibility-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_accessibility_customizations

wistia-cli update-accessibility-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video to be customized. minLength: 1.

captionsBackgroundColor

No; body/guard rules still apply

string

Background color of the captions as a hexadecimal RGB string (no leading '#').

captionsBorderRadius

No; body/guard rules still apply

integer

Corner radius of the captions background in pixels.

captionsTextColor

No; body/guard rules still apply

string

Color of the captions text as a hexadecimal RGB string (no leading '#').

captionsTextSize

No; body/guard rules still apply

integer

Size of the captions text in pixels.

captionsFontFamily

No; body/guard rules still apply

string

Font family used for the captions text.

transcriptEnabled

No; body/guard rules still apply

boolean

If true, the interactive transcript is shown alongside the video.

showTranscriptSpeakers

No; body/guard rules still apply

boolean

If true, speaker labels are displayed in the transcript.

audioDescriptionControl

No; body/guard rules still apply

boolean

If true, the audio description control is available to viewers.

plugin

No; body/guard rules still apply

object

Current schema

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

plugin.captions

No

object

Modern captions plugin configuration.

plugin.captions.on

No

boolean

If set to true, the captions plugin is enabled and captions controls will be available to viewers.

plugin.captions.onByDefault

No

boolean

If set to true, captions will be turned on automatically when the video loads. Only takes effect when the captions plugin is enabled.

plugin.captions-v1

No

object

Enables closed captions for the video.

plugin.captions-v1.on

No

boolean

If set to true, the captions plugin is enabled and captions controls will be available to viewers.

plugin.captions-v1.onByDefault

No

boolean

If set to true, captions will be turned on automatically when the video loads. Only takes effect when the captions plugin is enabled.

plugin.extendedAudioDescription

No

object

Enables an extended audio description track for the video.

plugin.extendedAudioDescription.on

No

boolean

If set to true, the extended audio description plugin is enabled.

get_chapters_customizations

wistia-cli get-chapters-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the media. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_chapters_customizations

wistia-cli update-chapters-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the media to be customized. minLength: 1.

plugin

No; body/guard rules still apply

object

Current schema

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

plugin.chapters

No

object

Current schema

plugin.chapters.on

No

boolean

Whether chapters are enabled.

plugin.chapters.visibleOnLoad

No

boolean

Whether the chapter list is visible when the player loads.

plugin.chapters.chapterList

No

array

The ordered list of chapters. Array items: object.

plugin.chapters.chapterList[].id

No

string

Current schema

plugin.chapters.chapterList[].title

No

string

Current schema

plugin.chapters.chapterList[].time

No

string

Start time of the chapter, in seconds.

plugin.chapters.chapterList[].deleted

No

string

Current schema

plugin.audioChapters

No

object

Current schema

plugin.audioChapters.on

No

boolean

Current schema

plugin.audioChapters.visibleOnLoad

No

boolean

Current schema

plugin.audioChapters.chapterList

No

array

Array items: object.

plugin.audioChapters.chapterList[].id

No

string

Current schema

plugin.audioChapters.chapterList[].title

No

string

Current schema

plugin.audioChapters.chapterList[].time

No

string

Current schema

plugin.audioChapters.chapterList[].deleted

No

string

Current schema

get_engagement_customizations

wistia-cli get-engagement-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_engagement_customizations

wistia-cli update-engagement-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video to be customized. minLength: 1.

plugin

No; body/guard rules still apply

object

Container for engagement plugin configurations.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

plugin.postRoll-v1

No

object

Adds a Call To Action to your Video.

plugin.postRoll-v1.rewatch

No

boolean

If set to true, allows the video to be rewatched.

plugin.postRoll-v1.text

No

string

The text to be displayed.

plugin.postRoll-v1.link

No

string

The URL of the link to be displayed.

plugin.postRoll-v1.time

No

JSON union

The time when the post-roll should be displayed. Can be a string like "end" or a number representing seconds. Exactly one of 2 schema branches; inspect the complete schema.

plugin.postRoll-v1.autoSize

No

boolean

If set to true, the post-roll will automatically adjust its size.

plugin.postRoll-v1.style

No

object

Current schema

plugin.postRoll-v1.style.backgroundColor

No

string

The background color of the post-roll.

plugin.postRoll-v1.ctaType

No

string

The type of call-to-action to be displayed. Typically set to "text". Other options are "image" which allows for "altText", and "html".

plugin.postRoll-v1.on

No

boolean

If set to true, the post-roll is enabled.

plugin.postRoll-v1.conversionOpportunityKey

No

string

The key used for tracking conversion opportunities.

plugin.midrollLink-v1

No

object

Timed annotation links that appear over the video at specific times.

plugin.midrollLink-v1.on

No

boolean

If set to true, the timed annotation links are enabled.

plugin.midrollLink-v1.links

No

array

The set of annotation links. Array items: object.

plugin.midrollLink-v1.links[].text

No

string

The text of the annotation link.

plugin.midrollLink-v1.links[].url

No

string

The URL the annotation link points to.

plugin.midrollLink-v1.links[].time

No

string

The time (in seconds) at which the link appears.

plugin.midrollLink-v1.links[].duration

No

string

How long (in seconds) the link remains visible.

wistia-cli get-related-media-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

wistia-cli update-related-media-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video to be customized. minLength: 1.

plugin

No; body/guard rules still apply

object

Current schema

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

plugin.relatedMedia

No

object

Configuration for the related-media recommendations plugin.

plugin.relatedMedia.on

No

boolean

Whether related-media recommendations are enabled.

plugin.relatedMedia.hashedIdList

No

array

Ordered list of media hashed IDs to recommend. Array items: string.

plugin.relatedMedia.shouldShowOnPause

No

boolean

If true, recommendations are shown when the video is paused.

plugin.relatedMedia.shouldShowOnEnd

No

boolean

If true, recommendations are shown when the video ends.

plugin.relatedMedia.mediaLabelText

No

string

Label text displayed above the recommended media.

plugin.relatedMedia.watchButtonText

No

string

Text shown on the watch button for a recommended media.

get_sharing_customizations

wistia-cli get-sharing-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_sharing_customizations

wistia-cli update-sharing-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video to be customized. minLength: 1.

plugin

No; body/guard rules still apply

object

Current schema

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

plugin.share

No

object

Configuration for the share bar plugin.

plugin.share.on

No

boolean

Whether the share bar is enabled.

plugin.share.channels

No

array

Complete ordered list of share channels to enable on the share bar. This replaces the entire list : include every channel you want active. To enable downloads, include "download" here AND set downloadType. Array items: string.

plugin.share.tweetText

No

string

Default text used when sharing the video to X/Twitter.

plugin.share.downloadType

No

string

Which download quality is offered to viewers. Only takes effect when "download" is included in the channels array. Values: sd_mp4, hd_mp4, original, all_qualities.

plugin.share.overrideUrl

No

string

URL used in place of the default share URL.

plugin.share.pageUrl

No

string

URL of the page the share bar should reference.

plugin.share.pageTitle

No

string

Title of the page the share bar should reference.

plugin.share.conversionOpportunityKey

No

string

The key used for tracking conversion opportunities. Managed by Wistia when the share bar is enabled.

get_lead_capture_customizations

wistia-cli get-lead-capture-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_lead_capture_customizations

wistia-cli update-lead-capture-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video to be customized. minLength: 1.

provider

No; body/guard rules still apply

string

Which lead-capture mechanism to configure. Values: wistia_form, hubspot, marketo, pardot.

enabled

No; body/guard rules still apply

boolean

Whether the selected provider is turned on. Defaults to true.

settings

No; body/guard rules still apply

object

Provider-specific settings. Only the fields relevant to the chosen provider are used.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: provider.

payload_file

No; body/guard rules still apply

string

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

Body requires: provider.

Nested body fields:

Field

Required

Type

Details

settings.time

No

string

When the form appears: "start"/"before", a number of seconds, or "end".

settings.allowSkip

No

boolean

Whether the viewer may skip the form.

settings.hashedId

No

string

(Wistia Form) The hashed ID of the Wistia form to embed.

settings.displayMode

No

string

(Wistia Form) How the form is displayed.

settings.showLogo

No

boolean

(Wistia Form) Whether to show the Wistia logo on the form.

settings.backgroundColor

No

string

Background color of the form as a hex string.

settings.formId

No

string

(HubSpot/Marketo/Pardot) The external form identifier.

settings.portalId

No

string

(HubSpot) The HubSpot portal/account identifier.

get_access_customizations

wistia-cli get-access-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_access_customizations

wistia-cli update-access-customizations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video to be customized. minLength: 1.

private

No; body/guard rules still apply

object

Current schema

encrypted

No; body/guard rules still apply

object

Current schema

plugin

No; body/guard rules still apply

object

Current schema

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

private.password_protect_on

No

boolean

Whether password protection is enabled for the video.

encrypted.password_protect_password

No

string

The password viewers must enter. Stored encrypted; also returned by the show endpoint.

plugin.passwordProtectedVideo

No

object

Current schema

plugin.passwordProtectedVideo.on

No

boolean

Whether the password-protection plugin is enabled.

plugin.passwordProtectedVideo.challenge

No

string

Optional challenge/prompt text shown to viewers.

plugin.passwordProtectedVideo.src

No

string

Internal source marker for the protection plugin.

plugin.passwordProtectedVideo.async

No

boolean

Whether the password check is performed asynchronously.

wistia-cli resolve-share-link

Argument

Required

Type

Details

identifier

Yes

string

The share link's URL segment : its hashed ID or custom slug. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

wistia-cli get-share-link

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the media. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

wistia-cli update-share-link

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the media. minLength: 1.

visibility

No; body/guard rules still apply

string

Controls who can view the media via this share link. - unlocked: anyone with the link can view the media. - account: only signed-in members of the media's account can view. - locked: only contacts with access to the media's folder can view. - domain_verified: only viewers signed in with an email address at a domain verified on the media's account can view. Requires the account to be enrolled in the domain validation gate; otherwise setting this value returns 400. Values: unlocked, account, locked, domain_verified.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: visibility.

payload_file

No; body/guard rules still apply

string

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

Body requires: visibility.

wistia-cli delete-share-link

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the media. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

list_captions

wistia-cli list-captions

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media for which captions are to be retrieved. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

create_captions

wistia-cli create-captions

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media for which captions are to be added. minLength: 1.

caption_file

No; body/guard rules still apply

string

Either an attached SRT file or a string parameter with the contents of an SRT file.

language

No; body/guard rules still apply

string

An optional parameter that denotes which language this file represents. Should conform to ISO-639–2. If left unspecified, the language code will be detected automatically.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: caption_file.

payload_file

No; body/guard rules still apply

string

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

Body requires: caption_file.

list_all_captions

wistia-cli list-all-captions

Argument

Required

Type

Details

media_id

No; body/guard rules still apply

string

Find captions for a particular media by providing the media hashed ID

media_ids

No; body/guard rules still apply

array

Find captions belonging to any of these media hashed IDs. IDs that don't match a media the token can access are ignored rather than returning an error. Array items: string.

languages

No; body/guard rules still apply

array

Find captions in any of these languages, using the codes returned in each caption's language field (for example eng or spa). When combined with media_ids[], captions must match both. Array items: string.

include

No; body/guard rules still apply

string

Set to metadata to omit caption text and return only track metadata. Omitting this parameter preserves the existing response, including SRT text. Values: metadata.

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

sort_by

No; body/guard rules still apply

string

Ordering. When using cursor pagination (see cursor param), only id is supported. default: id. Values: id, created, updated, language.

sort_direction

No; body/guard rules still apply

integer

Ordering Sort Direction (0 = desc, 1 = asc; default is 1) default: 1. Values: 0, 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

find_caption_matches

wistia-cli find-caption-matches

Argument

Required

Type

Details

media_ids

No; body/guard rules still apply

array

Explicit hashed IDs of the media whose captions should be searched. minItems: 1. maxItems: 50. Array items: string.

target_text

No; body/guard rules still apply

string

Exact caption wording to locate. minLength: 1. maxLength: 500.

language_code

No; body/guard rules still apply

string

Exact IETF language tag. Omit when each media has only one caption track. minLength: 1.

occurrence

No; body/guard rules still apply

integer

One-based exact occurrence to return, including occurrences after the first 10. minimum: 1.

start_ms

No; body/guard rules still apply

integer

Optional start of a time range used to disambiguate the match. minimum: 0.

end_ms

No; body/guard rules still apply

integer

Optional end of a time range used to disambiguate the match. minimum: 0.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: media_ids, target_text.

payload_file

No; body/guard rules still apply

string

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

Body requires: media_ids, target_text.

purchase_captions

wistia-cli purchase-captions

Argument

Required

Type

Details

media_hashed_id

Yes

string

Unique identifier for the media. minLength: 1.

automated

No; body/guard rules still apply

boolean

Order computer-generated captions or human-reviewed ones. What each costs depends on the account's plan and billing settings; computer-generated captions are included at no cost on some plans and billed per minute on others. default: False.

rush

No; body/guard rules still apply

boolean

Enable rush order for one business day turnaround instead of the standard four, for human-reviewed captions only. Rush bills at the account's higher per-minute rate. default: True.

automatically_enable

No; body/guard rules still apply

boolean

Automatically enable captions for the media once the order is ready or hold the captions for review before manually enabling. default: True.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

get_captions

wistia-cli get-captions

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media from which captions are to be retrieved. minLength: 1.

language_code

Yes

string

The 3-character ISO 639-2 language code of the captions to be retrieved (e.g., eng, fra, spa). Some languages use extended IETF subtags (e.g., zh-Hant). minLength: 1.

include

No; body/guard rules still apply

string

Set to segments for time-coded caption cues or diarized_segments for speaker-turn segments in JSON responses. Values: segments, diarized_segments.

include_speakers

No; body/guard rules still apply

boolean

For TXT responses, set to true to group the transcript by speaker turns and include speaker labels. Ignored for other response formats. default: False.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_captions

wistia-cli update-captions

Argument

Required

Type

Details

media_hashed_id

Yes

string

Unique identifier for the media. minLength: 1.

language_code

Yes

string

Language code conforming to ISO-639-2 for which the captions should be updated. minLength: 1. pattern: ^[a-z]{3}$.

caption_file

No; body/guard rules still apply

string

Either an attached SRT file or a string parameter with the contents of an SRT file.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: caption_file.

payload_file

No; body/guard rules still apply

string

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

Body requires: caption_file.

delete_captions

wistia-cli delete-captions

Argument

Required

Type

Details

media_hashed_id

Yes

string

Unique identifier for the media. minLength: 1.

language_code

Yes

string

Language code conforming to ISO-639-2 for which the captions should be removed. minLength: 1. pattern: ^[a-z]{3}$.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

edit_captions_text

wistia-cli edit-captions-text

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media whose transcript should be edited. minLength: 1.

language_code

Yes

string

The 3-character ISO 639-2 language code of the caption track to edit (e.g., eng, fra, spa). Some languages use extended IETF subtags (e.g., zh-Hant). minLength: 1.

edits

No; body/guard rules still apply

array

The corrections to apply, all-or-nothing, in one new version. minItems: 1. maxItems: 20. Array items: object.

expected_version

No; body/guard rules still apply

integer

The active caption version returned with the caption content used to prepare these edits. The edit applies only if that is still the active version; otherwise it returns 409 so you re-read and retry.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: edits, expected_version.

payload_file

No; body/guard rules still apply

string

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

Body requires: edits, expected_version.

Nested body fields:

Field

Required

Type

Details

edits[].target_text

Yes inside object

string

The exact transcript text to replace. Matched exactly after normalization (case, punctuation, and whitespace are ignored). Fuzzy matches are never applied : they are only returned as suggestions.

edits[].replacement_text

Yes inside object

string

The text to substitute for the target. Use an empty string to delete the target.

edits[].start_ms

No

integer

Optional lower bound (inclusive, in the requested media's coordinate space) restricting the match to a time window. Must be sent with end_ms.

edits[].end_ms

No

integer

Optional upper bound (inclusive) restricting the match to a time window. Must be sent with start_ms.

list_localizations

wistia-cli list-localizations

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media to list localizations for. minLength: 1.

include_transcript

No; body/guard rules still apply

boolean

Whether to include the transcript in the response. default: False.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

create_localization

wistia-cli create-localization

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media to create a localization for. minLength: 1.

output_language

No; body/guard rules still apply

string

The language to localize the media to as a 3-character IETF language code.

auto_enable

No; body/guard rules still apply

boolean

Whether to automatically enable the localization. default: True.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: output_language.

payload_file

No; body/guard rules still apply

string

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

Body requires: output_language.

get_localization

wistia-cli get-localization

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the localization's media. minLength: 1.

localization_hashed_id

Yes

string

The hashed ID of the localization. minLength: 1.

include_transcript

No; body/guard rules still apply

boolean

Whether to include the transcript in the response. default: False.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

delete_localization

wistia-cli delete-localization

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the localization's media. minLength: 1.

localization_hashed_id

Yes

string

The hashed ID of the localization to delete. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

create_media_from_trims

wistia-cli create-media-from-trims

Argument

Required

Type

Details

media_hashed_id

Yes

string

The hashed ID of the media. minLength: 1.

trims

No; body/guard rules still apply

array

An array of strings matching the format of HH:MM:SS.mmm-HH:MM:SS.mmm where HH is hours, MM is minutes, SS is seconds and mmm is milliseconds. When keep_trims is false (default), the ranges specify parts of the media to remove. When keep_trims is true, the ranges specify parts of the media to keep. Array items: string.

keep_trims

No; body/guard rules still apply

boolean

When set to true, the trims parameter is treated as ranges to keep rather than ranges to remove. Defaults to false. default: False.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: trims.

payload_file

No; body/guard rules still apply

string

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

Body requires: trims.

list_media_extended_audio_descriptions

wistia-cli list-media-extended-audio-descriptions

Argument

Required

Type

Details

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

hashed_ids

No; body/guard rules still apply

array

Filter extended audio descriptions to only those matching these hashed ids. Array items: string.

sort_by

No; body/guard rules still apply

string

Field to order by. The default is id. Values: language, created, updated, id.

sort_direction

No; body/guard rules still apply

integer

Direction to order by. (0 = desc, 1 = asc; default is 1) Values: 0, 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

get_media_extended_audio_description

wistia-cli get-media-extended-audio-description

Argument

Required

Type

Details

id

Yes

string

The hashed id of the Media Extended Audio Description minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

delete_media_extended_audio_description

wistia-cli delete-media-extended-audio-description

Argument

Required

Type

Details

id

Yes

string

The hashed id of the Media Extended Audio Description minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

order_extended_audio_description

wistia-cli order-extended-audio-description

Argument

Required

Type

Details

media_id

No; body/guard rules still apply

string

The hashed id of the media to order the extended audio description for.

enabled

No; body/guard rules still apply

boolean

Whether the extended audio description should be automatically enabled once the order is complete. default: True.

ai_enabled

No; body/guard rules still apply

boolean

Whether to use AI-generated audio descriptions (cheaper) or human-generated (higher quality). AI is only available for English orders. default: True.

order_instructions

No; body/guard rules still apply

string

Optional instructions for the audio description provider.

ietf_language_tag

No; body/guard rules still apply

string

IETF language tag for the audio description. Defaults to eng (English). Non-English orders must set ai_enabled: false : AI-generated audio descriptions are only available in English. Spanish (es-419) orders are only accepted when the source media is tagged as a Spanish-language variant or has no detected language (e.g. silent videos). Spanish orders against a media in another language return 400. default: eng. Values: eng, es-419.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: media_id.

payload_file

No; body/guard rules still apply

string

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

Body requires: media_id.

get_order_status

wistia-cli get-order-status

Argument

Required

Type

Details

id

Yes

string

The hashed ID of the order returned from the order endpoint. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

list_brands

wistia-cli list-brands

Argument

Required

Type

Details

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

sort_by

No; body/guard rules still apply

string

Ordering. When using cursor pagination (see cursor param), only id, updated and created are supported. All other sort_by options require offset pagination. Values: name, created, updated, id.

sort_direction

No; body/guard rules still apply

integer

Ordering Sort Direction (0 = desc, 1 = asc) Values: 0, 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

create_brand

wistia-cli create-brand

Argument

Required

Type

Details

name

No; body/guard rules still apply

string

The brand's display name. Renaming the account-level default brand is ignored; its name is managed by Wistia.

primary_color

No; body/guard rules still apply

JSON union

The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Exactly one of 3 schema branches; inspect the complete schema.

page_background_color

No; body/guard rules still apply

JSON union

The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Exactly one of 3 schema branches; inspect the complete schema.

body_font_family

No; body/guard rules still apply

string/null

The brand font family for body text.

headline_font_family

No; body/guard rules still apply

string/null

The brand font family for headlines.

button_font_family

No; body/guard rules still apply

string/null

The brand font family for buttons.

border_radius

No; body/guard rules still apply

integer/null

The border radius in pixels for rounded corners.

contrast_icons

No; body/guard rules still apply

string/null

Controls whether the player icon color is always white or uses an accessible contrast color when necessary. Values: enabled, disabled, unset, None.

opaque_controls

No; body/guard rules still apply

string/null

Controls the opacity of the video player control bar and big play button. Values: enabled, disabled, unset, None.

page_logo

No; body/guard rules still apply

object/null

The brand logo used for pages. url must be a Wistia delivery URL : see the note on uploading below. On accounts without custom branding the player logo is ignored, but the page logo is always applied.

player_logo

No; body/guard rules still apply

object/null

The brand logo used for the player. url must be a Wistia delivery URL : see the note on uploading below. Ignored on accounts whose plan doesn't include custom branding.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

page_logo.url

No

string

The Wistia delivery URL of the logo image, e.g. https://embed-ssl.wistia.com/deliveries/abc123def456.png. When writing, this must reference an image already in the account; the API cannot upload one.

page_logo.dimensions

No

object/null

Current schema

page_logo.dimensions.width

No

integer

Current schema

page_logo.dimensions.height

No

integer

Current schema

page_logo.size

No

number/null

The size multiplier of the logo.

player_logo.url

No

string

The Wistia delivery URL of the logo image, e.g. https://embed-ssl.wistia.com/deliveries/abc123def456.png. When writing, this must reference an image already in the account; the API cannot upload one.

player_logo.dimensions

No

object/null

Current schema

player_logo.dimensions.width

No

integer

Current schema

player_logo.dimensions.height

No

integer

Current schema

player_logo.size

No

number/null

The size multiplier of the logo.

get_brand

wistia-cli get-brand

Argument

Required

Type

Details

brand_id

Yes

string

The id of the brand. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_brand

wistia-cli update-brand

Argument

Required

Type

Details

brand_id

Yes

string

The id of the brand minLength: 1.

name

No; body/guard rules still apply

string

The brand's display name. Renaming the account-level default brand is ignored; its name is managed by Wistia.

primary_color

No; body/guard rules still apply

JSON union

The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Exactly one of 3 schema branches; inspect the complete schema.

page_background_color

No; body/guard rules still apply

JSON union

The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Exactly one of 3 schema branches; inspect the complete schema.

body_font_family

No; body/guard rules still apply

string/null

The brand font family for body text.

headline_font_family

No; body/guard rules still apply

string/null

The brand font family for headlines.

button_font_family

No; body/guard rules still apply

string/null

The brand font family for buttons.

border_radius

No; body/guard rules still apply

integer/null

The border radius in pixels for rounded corners.

contrast_icons

No; body/guard rules still apply

string/null

Controls whether the player icon color is always white or uses an accessible contrast color when necessary. Values: enabled, disabled, unset, None.

opaque_controls

No; body/guard rules still apply

string/null

Controls the opacity of the video player control bar and big play button. Values: enabled, disabled, unset, None.

page_logo

No; body/guard rules still apply

object/null

The brand logo used for pages. url must be a Wistia delivery URL : see the note on uploading below. On accounts without custom branding the player logo is ignored, but the page logo is always applied.

player_logo

No; body/guard rules still apply

object/null

The brand logo used for the player. url must be a Wistia delivery URL : see the note on uploading below. Ignored on accounts whose plan doesn't include custom branding.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

page_logo.url

No

string

The Wistia delivery URL of the logo image, e.g. https://embed-ssl.wistia.com/deliveries/abc123def456.png. When writing, this must reference an image already in the account; the API cannot upload one.

page_logo.dimensions

No

object/null

Current schema

page_logo.dimensions.width

No

integer

Current schema

page_logo.dimensions.height

No

integer

Current schema

page_logo.size

No

number/null

The size multiplier of the logo.

player_logo.url

No

string

The Wistia delivery URL of the logo image, e.g. https://embed-ssl.wistia.com/deliveries/abc123def456.png. When writing, this must reference an image already in the account; the API cannot upload one.

player_logo.dimensions

No

object/null

Current schema

player_logo.dimensions.width

No

integer

Current schema

player_logo.dimensions.height

No

integer

Current schema

player_logo.size

No

number/null

The size multiplier of the logo.

delete_brand

wistia-cli delete-brand

Argument

Required

Type

Details

brand_id

Yes

string

The id of the brand minLength: 1.

sync_to_customizations

No; body/guard rules still apply

boolean

When true, the brand's values are baked into the customizations of everything it was applied to before it is deleted, so those items keep their current appearance. Defaults to false.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

apply_brand

wistia-cli apply-brand

Argument

Required

Type

Details

brand_id

Yes

string

The id of the brand to apply minLength: 1.

resource_type

No; body/guard rules still apply

string

The kind of resource being branded. Webinars can't be branded through this endpoint yet. Values: media, folder, channel.

resource_id

No; body/guard rules still apply

string

The id of the resource being branded.

clear_overrides

No; body/guard rules still apply

boolean

When true (the default), appearance settings the resource had set directly are cleared for the fields the brand controls, so the brand is what shows. Set to false to leave them in place, in which case they continue to win over the brand. default: True.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: resource_type, resource_id.

payload_file

No; body/guard rules still apply

string

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

Body requires: resource_type, resource_id.

list_speakers

wistia-cli list-speakers

Argument

Required

Type

Details

name

No; body/guard rules still apply

string

Restrict the results to speaker profiles whose name contains this value (case-insensitive).

sort_by

No; body/guard rules still apply

string

Field to order by. The default is id. Values: id, name, created, updated.

sort_direction

No; body/guard rules still apply

integer

Direction to order by. (0 = desc, 1 = asc; default is 1) Values: 0, 1.

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

list_tags

wistia-cli list-tags

Argument

Required

Type

Details

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

sort_by

No; body/guard rules still apply

string

Ordering. When using cursor pagination (see cursor param), only id, updated and created are supported. All other sort_by options require offset pagination. Values: name, created, updated, taggingsCount, id.

sort_direction

No; body/guard rules still apply

integer

Ordering Sort Direction (0 = desc, 1 = asc) Values: 0, 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

create_tags

wistia-cli create-tags

Argument

Required

Type

Details

name

No; body/guard rules still apply

string

The tag name. Stored lowercased with whitespace squished, 50 characters max, and must not already exist on the account.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: name.

payload_file

No; body/guard rules still apply

string

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

Body requires: name.

delete_tag

wistia-cli delete-tag

Argument

Required

Type

Details

name

Yes

string

Name of the tag to delete minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

create_bulk_actions

wistia-cli create-bulk-actions

Argument

Required

Type

Details

actions

No; body/guard rules still apply

array

An array of actions to process, one per record. Maximum 1000 actions per request, and the request body must stay under 2 MB -- whichever limit is reached first. An oversized body is rejected with a 413 and no action in it runs. Each action specifies an operation (create, update, delete, or move), a resource type, and the relevant payload or record ID. Use job instead when every record takes the same payload. minItems: 1. maxItems: 1000. Array items: object.

job

No; body/guard rules still apply

object

One change applied to many records, named by a parent (scope) or listed explicitly (ids). The server resolves the target and runs one action per record, so a folder of 400 media takes one job rather than 400 actions. A scope resolves to exactly what the matching list endpoint returns for that parent, including its defaults -- so a folder scope on media reaches media in that folder's subfolders, and includes archived media. A job resolves to at most 5000 records. Beyond that it is rejected rather than truncated, so a job never silently acts on part of the set you named -- narrow the scope, or send the records as an actions array. Cannot be used with create, which has no record to address, and is not available to external contacts. Object requires: operation, resource_type.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

actions[].operation

Yes inside object

string

The operation to perform. Media creation is not supported here -- uploads and URL imports have their own endpoints. delete also soft-deletes media inside a folder or subfolder. An account owner or manager can restore it from the trash until it purges. move applies to media only, one action per media. Each action carries its own destination, so a single request can move media into many different folders. Values: create, update, delete, move.

actions[].resource_type

Yes inside object

string

The type of resource to operate on. folder means a top-level folder (previously called a project); use subfolder for a folder nested inside one. captions operates on a single caption track -- one media in one language. The customization_* types each write one concern of a media's player customizations and accept update only. Their id is the media's hashed ID, and their payload matches the corresponding Update Customizations endpoint (for example, customization_appearance takes the same fields as Update Appearance Customizations). Sending a field another concern owns fails that action rather than writing it, so a batch can never quietly overwrite unrelated player settings. Values: media, folder, subfolder, channel, channel_episode, captions, customization_access, customization_accessibility, customization_appearance, customization_chapters, customization_engagement, customization_lead_capture, customization_playback, customization_related_media, customization_sharing, customization_thumbnail.

actions[].id

No

string

The hashed ID of the resource. Required for update, delete, and move operations. For captions this is the caption track's own ID (the id field returned by List Captions), not the media's -- a media can have a track per language.

actions[].payload

No

object

The data for the operation. Required for create, update, and move operations. The accepted fields depend on the resource type and match the corresponding create or update endpoint's request body (for example, a channel_episode create takes the same fields as the Create Channel Episode endpoint, including channel_id). Creating a subfolder requires folder_id (the parent folder's hashed ID) and name. Creating captions requires media_id and caption_file (the SRT contents as a string; the multipart file upload the Create Captions endpoint accepts is not available here) and takes an optional language, detected from the file when omitted. Updating captions takes caption_file; the track's language is fixed by the record. Creating captions for a language that already has a track replaces it, matching the Create Captions endpoint. Moving a media requires folder_id (the destination folder's hashed ID) and accepts an optional subfolder_id, which must belong to that folder. Omit subfolder_id to move the media to the folder's root level. A customization_* payload is a partial update of that concern only: just the fields you send are changed, and a field naming another concern's setting fails the action. A media update payload can also carry a custom_metadata object mapping field keys to the values to set, in the same shapes the Set Custom Metadata Field Value endpoint accepts for each field's type. A null value clears that field; fields the object omits are left untouched. Requires the custom metadata feature on the account, and each write is recorded with its actor and source.

job.operation

Yes inside object

string

The operation to apply to every matching record. create is not accepted here. Values: update, delete, move.

job.resource_type

Yes inside object

string

The type of record to operate on, using the same vocabulary as a single action. Which parents are valid depends on it -- see scope. Values: media, folder, subfolder, channel, channel_episode, captions, customization_access, customization_accessibility, customization_appearance, customization_chapters, customization_engagement, customization_lead_capture, customization_playback, customization_related_media, customization_sharing, customization_thumbnail.

job.scope

No

object

The parent whose records the job applies to. Which parent types are valid depends on the job's resource_type and operation: - media and the customization_* types: account, folder, subfolder, channel. - captions with update or delete, which address a caption track: account, media, folder, channel. - channel_episode: account, channel, media. - subfolder: account, folder. - folder and channel: account. An invalid combination is rejected with the valid parents listed. Object requires: type.

job.scope.type

Yes inside object

string

The kind of parent id names. Required, because a hashed ID does not say what it belongs to -- the same value could name a folder or a channel. Use account to mean every record the job could reach, with no id. Values: account, folder, subfolder, channel, media.

job.scope.id

No

string

The parent's hashed ID. Required for every scope type except account.

job.ids

No

array

The records to apply the change to, named explicitly. Use this instead of scope when the records do not share a parent -- it is still far cheaper than one action each, since only the ids repeat and the payload is stated once. Give either scope or ids, never both. minItems: 1. maxItems: 1000. Array items: string.

job.payload

No

object

The data applied to every matching record, in the same shape a single action's payload takes for this resource type. Required for update and move.

create_bulk_purchase

wistia-cli create-bulk-purchase

Argument

Required

Type

Details

actions

No; body/guard rules still apply

array

The orders to place, one per media. Maximum 1000 per request, and the request body must stay under 2 MB -- whichever limit is reached first. An oversized body is rejected with a 413 and no order in it is placed. Every order is priced and placed independently: one failing (an ineligible media, an account without a saved card, a language that already has a localization) does not stop the rest of the batch. Use job instead to order for a whole folder, channel, or account. minItems: 1. maxItems: 1000. Array items: object.

job

No; body/guard rules still apply

object

One order placed for many media, named by a parent (scope) or listed explicitly (ids), so ordering captions for a folder of 47 videos takes one job rather than 47 orders. A scope resolves to exactly what List Media returns for that parent, including media in the folder's subfolders and archived media, and to at most 5000 media -- beyond that the job is rejected rather than truncated. The job attempts one order for every media it resolves to. Ineligible media fail individually without placing an order; successful orders are metered and may incur charges according to the account's plan. Confirm the scope and potential cost with the customer before submitting. Not available to external contacts. Object requires: operation, resource_type.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

actions[].operation

Yes inside object

string

Always purchase. This endpoint places orders only; to create, update, or delete records in bulk use the Create Bulk Actions endpoint, which does not accept purchase. Values: purchase.

actions[].resource_type

Yes inside object

string

What to order for the media. captions orders Wistia-generated English captions -- computer-generated or human-reviewed. localization orders a dubbed, language-specific version of the media. extended_audio_description orders an extended audio description track. text_translation translates the media's existing transcript into another language, leaving the audio alone. Values: captions, localization, extended_audio_description, text_translation.

actions[].id

Yes inside object

string

The hashed ID of the media to order for. Always the media's own ID: what the order produces does not exist yet.

actions[].payload

No

object

Order options. The accepted fields depend on the resource type and match the corresponding single-media endpoint's request body. Omit it to take every default. captions accepts automated (order computer-generated captions instead of human-reviewed ones), rush (one business day turnaround instead of four, human-reviewed only, at a higher per-minute rate), and automatically_enable (show the captions on the video as soon as they are ready). Each is treated as false when omitted or unrecognized. What each option costs depends on the account's plan and billing settings. localization requires output_language, a 3-character IETF language code, and accepts auto_enable (default true). extended_audio_description accepts enabled (default true), ai_enabled (default true), ietf_language_tag (default eng), and order_instructions. text_translation requires target_language and accepts source_language (which transcript to translate from, defaulting to the media's own language). Use the bibliographic ISO 639-2 form or a supported regional or script IETF tag for either value.

job.operation

Yes inside object

string

Always purchase. Values: purchase.

job.resource_type

Yes inside object

string

What to order for the media. captions orders Wistia-generated English captions -- computer-generated or human-reviewed. localization orders a dubbed, language-specific version of the media. extended_audio_description orders an extended audio description track. text_translation translates the media's existing transcript into another language, leaving the audio alone. Values: captions, localization, extended_audio_description, text_translation.

job.scope

No

object

The parent whose media the order applies to. An order always addresses the media, so the valid parent types are the same for every resource type here. Object requires: type.

job.scope.type

Yes inside object

string

The kind of parent id names. Required, because a hashed ID does not say what it belongs to -- the same value could name a folder or a channel. Use account to order for every media in the account. Values: account, folder, subfolder, channel.

job.scope.id

No

string

The parent's hashed ID. Required for every scope type except account.

job.ids

No

array

The media to order for, named explicitly. Use this instead of scope when the media do not share a parent. Give either scope or ids, never both. minItems: 1. maxItems: 1000. Array items: string.

job.payload

No

object

Order options applied to every matching media, in the same shape a single order's payload takes for this resource type.

bulk_tag

wistia-cli bulk-tag

Argument

Required

Type

Details

hashed_ids

No; body/guard rules still apply

array

An array of the media hashed IDs to be tagged. Array items: string.

tag_names

No; body/guard rules still apply

array

An array of tag names to add to each media. Array items: string.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: hashed_ids, tag_names.

payload_file

No; body/guard rules still apply

string

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

Body requires: hashed_ids, tag_names.

list_folders

wistia-cli list-folders

Argument

Required

Type

Details

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

sort_by

No; body/guard rules still apply

string

Ordering. When using cursor pagination (see cursor param), only id, updated and created are supported. All other sort_by options require offset pagination. Values: name, created, updated, mediaCount, id.

sort_direction

No; body/guard rules still apply

integer

Ordering Sort Direction (0 = desc, 1 = asc; default is 1) Values: 0, 1.

hashed_ids

No; body/guard rules still apply

array

A collection of hashed ids belonging to folders to fetch Array items: string.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

create_folder

wistia-cli create-folder

Argument

Required

Type

Details

name

No; body/guard rules still apply

string

The name of the folder you want to create.

adminEmail

No; body/guard rules still apply

string

The email address of the person you want to set as the owner of this folder. Defaults to the Wistia Account Owner.

description

No; body/guard rules still apply

string

The folder’s description.

anonymousCanUpload

No; body/guard rules still apply

boolean

Whether anonymous users can upload media to the folder.

anonymousCanDownload

No; body/guard rules still apply

boolean

Whether anonymous users can download media from the folder.

public

No; body/guard rules still apply

boolean

A flag indicating whether or not the folder is enabled for public access.

personalLibrary

No; body/guard rules still apply

boolean

When true, creates the folder inside the requesting user's personal "My Library" (owned by them) instead of a shared account folder.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

get_folder

wistia-cli get-folder

Argument

Required

Type

Details

id

Yes

string

Folder Hashed ID minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_folder

wistia-cli update-folder

Argument

Required

Type

Details

id

Yes

string

Folder Hashed ID minLength: 1.

name

No; body/guard rules still apply

string

The folder’s new name.

description

No; body/guard rules still apply

string

The folder’s new description.

anonymousCanUpload

No; body/guard rules still apply

boolean

Whether anonymous users can upload media to the folder.

anonymousCanDownload

No; body/guard rules still apply

boolean

Whether anonymous users can download media from the folder.

public

No; body/guard rules still apply

boolean

A flag indicating whether or not the folder is enabled for public access.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

delete_folder

wistia-cli delete-folder

Argument

Required

Type

Details

id

Yes

string

Folder Hashed ID minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

copy_folder

wistia-cli copy-folder

Argument

Required

Type

Details

id

Yes

string

Folder Hashed ID minLength: 1.

adminEmail

No; body/guard rules still apply

string

The email address of the account Manager that will be the owner of the new folder. Defaults to the Account Owner if invalid or omitted.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

list_folder_sharings

wistia-cli list-folder-sharings

Argument

Required

Type

Details

folder_id

Yes

string

Folder Hashed ID minLength: 1.

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

sort_by

No; body/guard rules still apply

string

Ordering. When using cursor pagination (see cursor param), only id is supported. default: id. Values: created, updated, id.

sort_direction

No; body/guard rules still apply

integer

Ordering Sort Direction (0 = desc, 1 = asc; default is 1) default: 1. Values: 0, 1.

hashed_ids

No; body/guard rules still apply

array

Filter sharings by their hashed IDs Array items: string.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

create_folder_sharing

wistia-cli create-folder-sharing

Argument

Required

Type

Details

folder_id

Yes

string

Hashed ID of the folder to be shared minLength: 1.

sharing

No; body/guard rules still apply

object

Object requires: with.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: sharing.

payload_file

No; body/guard rules still apply

string

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

Body requires: sharing.

Nested body fields:

Field

Required

Type

Details

sharing.with

Yes inside object

string

The email address of the person with whom you want to share the folder. format: email.

sharing.requirePassword

No

boolean

A flag indicating whether or not a password is required. Defaults to true.

sharing.canShare

No

boolean

Whether the user is allowed to share the folder with others. Defaults to false.

sharing.canDownload

No

boolean

Whether the user is allowed to download files from the folder. Defaults to false.

sharing.canUpload

No

boolean

Whether the user is allowed to upload files to the folder. Defaults to false.

sharing.sendEmailNotification

No

string

Deprecated! Email notifications are always sent now. Values: 0, 1.

get_folder_sharing

wistia-cli get-folder-sharing

Argument

Required

Type

Details

folder_id

Yes

string

Hashed ID for the folder for which you'd like to see sharings. minLength: 1.

sharing_id

Yes

integer

The ID of the specific sharing object that you want to see.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_folder_sharing

wistia-cli update-folder-sharing

Argument

Required

Type

Details

folder_id

Yes

string

ID of the folder minLength: 1.

sharing_id

Yes

string

ID of the sharing to be updated minLength: 1.

sharing

No; body/guard rules still apply

object

Current schema

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

sharing.canShare

No

boolean

Allow the user or group to share the folder with others.

sharing.canDownload

No

boolean

Allow the user or group to download media from the folder.

sharing.canUpload

No

boolean

Allow the user or group to upload media to the folder.

sharing.isAdmin

No

boolean

Give this user admin rights to the folder.

delete_folder_sharing

wistia-cli delete-folder-sharing

Argument

Required

Type

Details

folder_id

Yes

string

Hashed ID of the folder minLength: 1.

sharing_id

Yes

string

ID of the sharing to be deleted minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

list_subfolders

wistia-cli list-subfolders

Argument

Required

Type

Details

folder_id

Yes

string

The hashed ID of the folder minLength: 1.

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

sort_by

No; body/guard rules still apply

string

Field to sort by. When using cursor pagination (see cursor param), only id is supported. default: position. Values: name, created, updated, position, id.

sort_direction

No; body/guard rules still apply

integer

Sort direction (0 = desc, 1 = asc; default is 1) default: 1. Values: 0, 1.

hashed_ids

No; body/guard rules still apply

array

Filter subfolders by their hashed IDs Array items: string.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

create_subfolder

wistia-cli create-subfolder

Argument

Required

Type

Details

folder_id

Yes

string

The hashed ID of the folder minLength: 1.

name

No; body/guard rules still apply

string

The display name of the subfolder. maxLength: 255.

description

No; body/guard rules still apply

string/null

A description for the subfolder. maxLength: 1000.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: name.

payload_file

No; body/guard rules still apply

string

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

Body requires: name.

get_subfolder

wistia-cli get-subfolder

Argument

Required

Type

Details

folder_id

Yes

string

The hashed ID of the folder minLength: 1.

subfolder_id

Yes

string

The hashed ID of the subfolder minLength: 1.

description_format

No; body/guard rules still apply

string

Format for media descriptions

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_subfolder

wistia-cli update-subfolder

Argument

Required

Type

Details

folder_id

Yes

string

The hashed ID of the folder minLength: 1.

subfolder_id

Yes

string

The hashed ID of the subfolder minLength: 1.

name

No; body/guard rules still apply

string

The new name for the subfolder maxLength: 255.

description

No; body/guard rules still apply

string/null

The new description for the subfolder maxLength: 1000.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

delete_subfolder

wistia-cli delete-subfolder

Argument

Required

Type

Details

folder_id

Yes

string

The hashed ID of the folder minLength: 1.

subfolder_id

Yes

string

The hashed ID of the subfolder minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

bulk_delete_subfolders

wistia-cli bulk-delete-subfolders

Argument

Required

Type

Details

folder_id

Yes

string

The hashed ID of the folder containing the subfolders minLength: 1.

hashed_ids

No; body/guard rules still apply

array

An array of the subfolder hashed IDs to be deleted. Array items: string.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: hashed_ids.

payload_file

No; body/guard rules still apply

string

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

Body requires: hashed_ids.

list_channels

wistia-cli list-channels

Argument

Required

Type

Details

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

page

No; body/guard rules still apply

integer

Page number to retrieve minimum: 1.

per_page

No; body/guard rules still apply

integer

Number of channels per page minimum: 1. maximum: 100.

sort_by

No; body/guard rules still apply

string

Ordering. Default is ID ASC. Note: Only 'id' and 'created' are supported when using cursor pagination. Values: created, id, updated, name.

sort_direction

No; body/guard rules still apply

integer

Ordering Sort Direction (0 = desc, 1 = asc; default is 1) Values: 0, 1.

hashed_ids

No; body/guard rules still apply

array

Find all of the channels limited to these hashed_ids. Array items: string.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

create_channel

wistia-cli create-channel

Argument

Required

Type

Details

name

No; body/guard rules still apply

string/null

The display name for the channel

description

No; body/guard rules still apply

string/null

The channel's description.

auto_publish_enabled

No; body/guard rules still apply

boolean

Whether the episodes are automatically published when added to the channel. Cannot be enabled if podcasting is on.

podcast_enabled

No; body/guard rules still apply

boolean

Whether podcasting is enabled for this channel.

custom_url

No; body/guard rules still apply

string/null

Use if embedding the channel on your own site. The custom URL ensures links always direct to your page and not Wistia's.

podcast_settings

No; body/guard rules still apply

object

Podcast specific settings for a channel. These settings only take effect if podcasting is enabled for the channel. These values appear in the channel's publicly accessible podcast RSS feed.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

podcast_settings.copyright

No

string/null

The channel's copyright information, published in the RSS feed as ``.

podcast_settings.episode_format

No

JSON union

The format for episodes for the podcast channel, published in the RSS feed as ``. episodic_with_seasons is published as episodic. Exactly one of 2 schema branches; inspect the complete schema.

podcast_settings.author_name

No

string/null

The name of the author(s) for the channel, published in the RSS feed as ``.

podcast_settings.explicit

No

boolean/null

Whether the channel contains explicit content, published in the RSS feed as ``.

podcast_settings.owner_name

No

string/null

The podcast owner's name, published in the channel's public RSS feed as ``. Podcast directories use this as the show's administrative contact.

podcast_settings.owner_email

No

string/null

The podcast owner's email address, published in the channel's public RSS feed as ``. Podcast directories such as Apple Podcasts require it for ownership verification.

podcast_settings.category1

No

JSON union

The primary category for the channel, published in the RSS feed as ``. Exactly one of 2 schema branches; inspect the complete schema.

podcast_settings.category2

No

JSON union

The secondary category for the channel, published in the RSS feed as ``. Exactly one of 2 schema branches; inspect the complete schema.

podcast_settings.category3

No

JSON union

The third category for the channel, published in the RSS feed as ``. Exactly one of 2 schema branches; inspect the complete schema.

podcast_settings.language

No

string/null

The ISO 639-1 language code for the channel, published in the RSS feed as ``. Values: af, be, bg, ca, cs, da, de-at, de-ch, de-de, de-li, de-lu, de, el, en-au, en-bz, en-ca, en-gb, en-ie, en-jm, en-nz, en-ph, en-tt, en-us, en-za, en-zw, en, es-ar, es-bo, es-cl, es-co, es-cr, es-do, es-ec, es-es, es-gt, es-hn, es-mx, es-ni, es-pa, es-pe, es-pr, es-py, es-sv, es-uy, es-ve, es, et, eu, fi, fo, fr-be, fr-ca, fr-ch, fr-fr, fr-lu, fr-mc, fr, ga, gd, gl, haw, hr, hu, in, is, it-ch, it-it, it, ja, ko, mk, nl-be, nl-nl, nl, no, pl, pt-br, pt-pt, pt, ro-mo, ro-ro, ro, ru-mo, ru-ru, ru, sk, sl, sq, sr, sv-fi, sv-se, sv, tr, uk, zh-cn, zh-tw.

get_channel

wistia-cli get-channel

Argument

Required

Type

Details

channel_hashed_id

Yes

string

The hashed ID of the channel. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_channel

wistia-cli update-channel

Argument

Required

Type

Details

channel_hashed_id

Yes

string

The hashed id of the Channel minLength: 1.

name

No; body/guard rules still apply

string/null

The display name for the channel

description

No; body/guard rules still apply

string/null

The channel's description.

auto_publish_enabled

No; body/guard rules still apply

boolean

Whether the episodes are automatically published when added to the channel. Cannot be enabled if podcasting is on.

podcast_enabled

No; body/guard rules still apply

boolean

Whether podcasting is enabled for this channel.

custom_url

No; body/guard rules still apply

string/null

Use if embedding the channel on your own site. The custom URL ensures links always direct to your page and not Wistia's.

podcast_settings

No; body/guard rules still apply

object

Podcast specific settings for a channel. These settings only take effect if podcasting is enabled for the channel. These values appear in the channel's publicly accessible podcast RSS feed.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

podcast_settings.copyright

No

string/null

The channel's copyright information, published in the RSS feed as ``.

podcast_settings.episode_format

No

JSON union

The format for episodes for the podcast channel, published in the RSS feed as ``. episodic_with_seasons is published as episodic. Exactly one of 2 schema branches; inspect the complete schema.

podcast_settings.author_name

No

string/null

The name of the author(s) for the channel, published in the RSS feed as ``.

podcast_settings.explicit

No

boolean/null

Whether the channel contains explicit content, published in the RSS feed as ``.

podcast_settings.owner_name

No

string/null

The podcast owner's name, published in the channel's public RSS feed as ``. Podcast directories use this as the show's administrative contact.

podcast_settings.owner_email

No

string/null

The podcast owner's email address, published in the channel's public RSS feed as ``. Podcast directories such as Apple Podcasts require it for ownership verification.

podcast_settings.category1

No

JSON union

The primary category for the channel, published in the RSS feed as ``. Exactly one of 2 schema branches; inspect the complete schema.

podcast_settings.category2

No

JSON union

The secondary category for the channel, published in the RSS feed as ``. Exactly one of 2 schema branches; inspect the complete schema.

podcast_settings.category3

No

JSON union

The third category for the channel, published in the RSS feed as ``. Exactly one of 2 schema branches; inspect the complete schema.

podcast_settings.language

No

string/null

The ISO 639-1 language code for the channel, published in the RSS feed as ``. Values: af, be, bg, ca, cs, da, de-at, de-ch, de-de, de-li, de-lu, de, el, en-au, en-bz, en-ca, en-gb, en-ie, en-jm, en-nz, en-ph, en-tt, en-us, en-za, en-zw, en, es-ar, es-bo, es-cl, es-co, es-cr, es-do, es-ec, es-es, es-gt, es-hn, es-mx, es-ni, es-pa, es-pe, es-pr, es-py, es-sv, es-uy, es-ve, es, et, eu, fi, fo, fr-be, fr-ca, fr-ch, fr-fr, fr-lu, fr-mc, fr, ga, gd, gl, haw, hr, hu, in, is, it-ch, it-it, it, ja, ko, mk, nl-be, nl-nl, nl, no, pl, pt-br, pt-pt, pt, ro-mo, ro-ro, ro, ru-mo, ru-ru, ru, sk, sl, sq, sr, sv-fi, sv-se, sv, tr, uk, zh-cn, zh-tw.

delete_channel

wistia-cli delete-channel

Argument

Required

Type

Details

channel_hashed_id

Yes

string

The hashed id of the Channel minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

get_channel_episode

wistia-cli get-channel-episode

Argument

Required

Type

Details

channel_hashed_id

Yes

string

The hashed ID of the channel. minLength: 1.

channel_episode_id

Yes

string

The hashed ID of the channel episode. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

list_channel_episodes_by_channel

wistia-cli list-channel-episodes-by-channel

Argument

Required

Type

Details

channel_hashed_id

Yes

string

The hashed ID of the channel to grab channel episodes from. minLength: 1.

sort_by

No; body/guard rules still apply

string

Ordering. Default is ID ASC. When using cursor pagination (see cursor param), only id and created are supported. All other sort_by options (position, title, updated, published_at) require offset pagination. Values: position, title, created, updated, published_at, id.

sort_direction

No; body/guard rules still apply

integer

Ordering Sort Direction (0 = desc, 1 = asc; default is 1) Values: 0, 1.

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

media_id

No; body/guard rules still apply

array

Filter by media id. Accepts either the numeric id or the hashed id of a media. Array items: string.

hashed_ids

No; body/guard rules still apply

array

Filter by hashed id Array items: string.

published

No; body/guard rules still apply

boolean

Filter by published status.

title

No; body/guard rules still apply

string

Filter by channel episode name/title.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

create_channel_episode

wistia-cli create-channel-episode

Argument

Required

Type

Details

channel_hashed_id

Yes

string

The hashed ID of the channel to add the episode to. minLength: 1.

media_id

No; body/guard rules still apply

string

The alphanumeric hashed ID of the media to be added as a channel episode.

title

No; body/guard rules still apply

string

The episode's title. If not provided, the channel episode uses the title of the media used to create it.

description

No; body/guard rules still apply

string

The episode's description or episode notes.

summary

No; body/guard rules still apply

string

A short summary of the episode that is displayed when space is limited.

publish_status

No; body/guard rules still apply

string

The status of whether or not the episode has been published to your channel. Values: draft, published, scheduled.

publish_at

No; body/guard rules still apply

string

The date and time when the episode should be published in UTC timezone. Required when publish_status is 'scheduled'. Must be a valid ISO8601 timestamp in UTC (ending with 'Z'). Can only be provided when publish_status is 'scheduled.' format: date-time.

podcast_settings

No; body/guard rules still apply

object

Podcast specific settings for a channel episode. These settings only take effect if podcasting is enabled for the channel.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

podcast_settings.episode_type

No

JSON union

The type of episode. Exactly one of 2 schema branches; inspect the complete schema.

podcast_settings.episode_number

No

integer/null

The number of the episode.

podcast_settings.season_number

No

integer/null

The season number of the episode.

podcast_settings.explicit_content

No

boolean

Whether the episode contains explicit content.

podcast_settings.hide_from_feed

No

boolean

Whether to hide the episode from the podcast feed.

list_channel_episodes

wistia-cli list-channel-episodes

Argument

Required

Type

Details

channel_id

No; body/guard rules still apply

string

The hashed ID of the channel to grab channel episodes from.

sort_by

No; body/guard rules still apply

string

Ordering. Default is ID ASC. When using cursor pagination (see cursor param), only id and created are supported. All other sort_by options (position, title, updated, published_at) require offset pagination. Values: position, title, created, updated, published_at, id.

sort_direction

No; body/guard rules still apply

integer

Ordering Sort Direction (0 = desc, 1 = asc; default is 1) Values: 0, 1.

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

media_id

No; body/guard rules still apply

array

Filter by media id. Accepts either the numeric id or the hashed id of a media. Array items: string.

hashed_ids

No; body/guard rules still apply

array

Filter by hashed id Array items: string.

published

No; body/guard rules still apply

boolean

Filter by published status.

title

No; body/guard rules still apply

string

Filter by channel episode name/title.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

update_channel_episode

wistia-cli update-channel-episode

Argument

Required

Type

Details

channel_episode_hashed_id

Yes

string

The hashed id of the Channel Episode minLength: 1.

description

No; body/guard rules still apply

string/null

The episode's description or episode notes.

title

No; body/guard rules still apply

string/null

The episode's title. If not provided, the channel episode uses the title of the media used to create it.

media_hashed_id

No; body/guard rules still apply

string

The unique alphanumeric identifier for the media associated with this channel episode.

live_stream_event_hashed_id

No; body/guard rules still apply

string

The unique alphanumeric identifier for the live stream event associated with this channel episode.

summary

No; body/guard rules still apply

string/null

A short summary of the episode that is displayed when space is limited.

publish_status

No; body/guard rules still apply

string

The status of whether or not the episode has been published to your channel. Values: draft, published, scheduled.

publish_at

No; body/guard rules still apply

string

The date and time when the episode is scheduled to be published in UTC timezone. format: date-time.

episode_notes

No; body/guard rules still apply

string

Additional notes for the episode.

podcast_settings

No; body/guard rules still apply

object

Podcast specific settings for a channel episode. These settings only take effect if podcasting is enabled for the channel.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

podcast_settings.episode_type

No

JSON union

The type of episode. Exactly one of 2 schema branches; inspect the complete schema.

podcast_settings.episode_number

No

integer/null

The number of the episode.

podcast_settings.season_number

No

integer/null

The season number of the episode.

podcast_settings.explicit_content

No

boolean

Whether the episode contains explicit content.

podcast_settings.hide_from_feed

No

boolean

Whether to hide the episode from the podcast feed.

delete_channel_episode

wistia-cli delete-channel-episode

Argument

Required

Type

Details

channel_episode_hashed_id

Yes

string

The hashed id of the Channel Episode minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

publish_channel_episode

wistia-cli publish-channel-episode

Argument

Required

Type

Details

channel_episode_hashed_id

Yes

string

The hashed id of the Channel Episode minLength: 1.

publish_at

No; body/guard rules still apply

string

The date and time when the episode is scheduled to be published in UTC timezone. format: date-time.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

un_publish_channel_episode

wistia-cli un-publish-channel-episode

Argument

Required

Type

Details

channel_episode_hashed_id

Yes

string

The hashed id of the Channel Episode minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

list_channel_collaborators

wistia-cli list-channel-collaborators

Argument

Required

Type

Details

channel_hashed_id

Yes

string

Channel Hashed ID minLength: 1.

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

sort_by

No; body/guard rules still apply

string

Ordering. When using cursor pagination (see cursor param), only id is supported. default: id. Values: created, updated, id.

sort_direction

No; body/guard rules still apply

integer

Ordering Sort Direction (0 = desc, 1 = asc; default is 1) default: 1. Values: 0, 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

create_channel_collaborator

wistia-cli create-channel-collaborator

Argument

Required

Type

Details

channel_hashed_id

Yes

string

Hashed ID of the channel minLength: 1.

email

No; body/guard rules still apply

string

Email address of the contact to invite. Creates a new contact if one doesn't exist. format: email.

role

No; body/guard rules still apply

string

The role to grant the collaborator. Values: admin, viewer.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: email, role.

payload_file

No; body/guard rules still apply

string

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

Body requires: email, role.

delete_channel_collaborator

wistia-cli delete-channel-collaborator

Argument

Required

Type

Details

channel_hashed_id

Yes

string

Channel Hashed ID minLength: 1.

id

Yes

integer

Collaborator ID

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

list_webinars

wistia-cli list-webinars

Argument

Required

Type

Details

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

sort_by

No; body/guard rules still apply

string

Field to sort by. When using cursor pagination (see cursor param), only id and scheduled_for are supported. All other sort_by options (title, created, updated) require offset pagination. Values: scheduled_for, title, created, updated, id.

sort_direction

No; body/guard rules still apply

integer

Sort direction (0 = desc, 1 = asc; default is 1) Values: 0, 1.

hashed_ids

No; body/guard rules still apply

array

Filter by specific webinars IDs Array items: string.

started

No; body/guard rules still apply

string

Filter by whether the webinar has started. Use "true" for webinars that have started, "false" for webinars that have not started yet Values: true, false.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

create_webinar

wistia-cli create-webinar

Argument

Required

Type

Details

title

No; body/guard rules still apply

string

The title of the webinar

description

No; body/guard rules still apply

string

The description of the webinar

scheduled_for

No; body/guard rules still apply

string

The scheduled start time as a UTC formatted ISO 8601 string (offset Z or +00:00). format: date-time.

event_duration

No; body/guard rules still apply

integer

Duration of the event in minutes (minimum 15) minimum: 15.

time_zone

No; body/guard rules still apply

string

The IANA time zone identifier the webinar is scheduled in.

folder_id

No; body/guard rules still apply

string

Hashed ID of the folder to place this webinar in. Defaults to the account's default webinar folder if not provided.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: title, scheduled_for, event_duration, time_zone.

payload_file

No; body/guard rules still apply

string

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

Body requires: title, scheduled_for, event_duration, time_zone.

get_webinar

wistia-cli get-webinar

Argument

Required

Type

Details

id

Yes

string

The hashed ID of the webinar minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_webinar

wistia-cli update-webinar

Argument

Required

Type

Details

id

Yes

string

The hashed ID of the webinar minLength: 1.

webinar

No; body/guard rules still apply

object

Current schema

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

webinar.title

No

string

The title of the webinar

webinar.description

No

string

The description of the webinar

webinar.scheduled_for

No

string

The scheduled start time as a UTC formatted ISO 8601 string (offset Z or +00:00). format: date-time.

webinar.event_duration

No

integer

Duration of the webinar in minutes (minimum 15) minimum: 15.

webinar.time_zone

No

string

The IANA time zone identifier the webinar is scheduled in.

webinar.folder_id

No

string

Hashed ID of the folder to move this webinar to. Can only be changed before the webinar has started.

delete_webinar

wistia-cli delete-webinar

Argument

Required

Type

Details

id

Yes

string

The hashed ID of the webinar minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

list_webinar_registrations

wistia-cli list-webinar-registrations

Argument

Required

Type

Details

webinar_id

Yes

string

Hashed ID of the webinar. minLength: 1.

per_page

No; body/guard rules still apply

integer

Number of results to return per page (max 100). minimum: 1. maximum: 100. default: 100.

cursor

No; body/guard rules still apply

string

Cursor for pagination. Use the value from the previous response's page_info.end_cursor or page_info.start_cursor.

sort_direction

No; body/guard rules still apply

integer

Sort direction (0 = desc/previous page, 1 = asc/next page; default is 1) default: 1. Values: 0, 1.

attendance

No; body/guard rules still apply

string

Filter registrations by attendance status. default: all. Values: all, attendees, non_attendees.

restriction

No; body/guard rules still apply

string

Filter registrations by restriction status. default: all. Values: all, restricted, allowed.

emails

No; body/guard rules still apply

array

Filter registrations by email addresses. Array items: string.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

create_webinar_registration

wistia-cli create-webinar-registration

Argument

Required

Type

Details

webinar_id

Yes

string

Hashed ID of the webinar minLength: 1.

email

No; body/guard rules still apply

string

Email address of the registrant format: email.

first_name

No; body/guard rules still apply

string

First name of the registrant

last_name

No; body/guard rules still apply

string

Last name of the registrant

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: email, first_name, last_name.

payload_file

No; body/guard rules still apply

string

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

Body requires: email, first_name, last_name.

list_webinar_collaborators

wistia-cli list-webinar-collaborators

Argument

Required

Type

Details

webinar_id

Yes

string

Webinar Hashed ID minLength: 1.

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

sort_by

No; body/guard rules still apply

string

Ordering. When using cursor pagination (see cursor param), only id is supported. default: id. Values: created, updated, id.

sort_direction

No; body/guard rules still apply

integer

Ordering Sort Direction (0 = desc, 1 = asc; default is 1) default: 1. Values: 0, 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

create_webinar_collaborator

wistia-cli create-webinar-collaborator

Argument

Required

Type

Details

webinar_id

Yes

string

Hashed ID of the webinar minLength: 1.

email

No; body/guard rules still apply

string

Email address of the contact to invite. Creates a new contact if one doesn't exist. Note that viewers cannot be webinar collaborators. format: email.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: email.

payload_file

No; body/guard rules still apply

string

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

Body requires: email.

delete_webinar_collaborator

wistia-cli delete-webinar-collaborator

Argument

Required

Type

Details

webinar_id

Yes

string

Webinar Hashed ID minLength: 1.

id

Yes

integer

Collaborator ID

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

get_account

wistia-cli get-account

Argument

Required

Type

Details

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_account_usage

wistia-cli get-account-usage

Argument

Required

Type

Details

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_credit_balance

wistia-cli get-credit-balance

Argument

Required

Type

Details

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_brand_preload

wistia-cli get-brand-preload

Argument

Required

Type

Details

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

update_brand_preload

wistia-cli update-brand-preload

Argument

Required

Type

Details

selected_player_color

No; body/guard rules still apply

string

Hex color string (e.g. "#3366FF") for the account's default player color : 6 hex digits, with or without the leading #. Omit or send an empty string to leave the current color untouched (there is no clear operation : color always has a value). Malformed values are rejected at the API boundary; without this check, the model's sanitize step would return nil and silently reset the account color to the global default. pattern: ^(#?[0-9a-fA-F]{6})?$.

selected_logo_hashed_id

No; body/guard rules still apply

string

Bakery hashed_id of an uploaded logo image, which will become the account's default page logo. Omit to leave the current logo untouched. Pass an empty string to clear the logo.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

get_brand_kit_colors

wistia-cli get-brand-kit-colors

Argument

Required

Type

Details

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

invite_contacts

wistia-cli invite-contacts

Argument

Required

Type

Details

contacts

No; body/guard rules still apply

string

A comma-, whitespace-, or newline-separated list of email addresses to invite to the account. Each entry becomes a new contact if one does not already exist for that email.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: contacts.

payload_file

No; body/guard rules still apply

string

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

Body requires: contacts.

dismiss_desktop_install_prompt

wistia-cli dismiss-desktop-install-prompt

Argument

Required

Type

Details

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

start_account_trial

wistia-cli start-account-trial

Argument

Required

Type

Details

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

get_current_token

wistia-cli get-current-token

Argument

Required

Type

Details

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

wistia-cli search

Argument

Required

Type

Details

q

Yes

string

The search query string

tags

No; body/guard rules still apply

array

Filter results by one or more tag names. When multiple tags are provided, results matching any of the specified tags are returned (OR logic). Array items: string.

resource_type

No; body/guard rules still apply

array

Filter results by one or more resource types. Array items: string.

custom_metadata

No; body/guard rules still apply

object

Filter media by custom metadata field value, keyed by field key: custom_metadata[]=. Only available on accounts with access to custom metadata (other accounts receive a 403 when this parameter is passed). Custom metadata only exists on media, so results contain media only and resource_type must include media. Use an empty q to match all media. The value shape depends on the field's type: - Select, text, url, and email fields take a value (custom_metadata[region]=emea) or an array of values matched as OR (custom_metadata[region][]=emea&custom_metadata[region][]=amer). Select fields match on option keys. - Boolean fields take true or false. - Number, money, and time fields take an exact number (custom_metadata[year]=2026) or a range object (custom_metadata[budget][min]=100&custom_metadata[budget][max]=500; either bound may be omitted). - Date and datetime fields take a YYYY-MM-DD date matching that UTC day, or a range object with ISO8601 bounds (custom_metadata[shoot_date][after]=2026-01-01, custom_metadata[shoot_date][before]=2026-02-01T00:00:00Z). A bare-date bound covers its whole UTC day: after starts at the day's beginning and before runs through the day's end. - Contact fields (contact_ref, contact_multi_ref) only support the presence filter below; a value filter on them is rejected. - Any field type accepts a presence filter: custom_metadata[region][exists]=false returns media missing the field entirely (useful for metadata coverage audits), and exists=true returns media that have any value for it. Unknown or archived field keys return a 400, as do select option keys that don't exist on the field. The primary match set holds at most 100 media with no pagination; a non-blank q can add up to 100 more transcript-only matches, and an empty-q audit returns at most 100. Narrow large audits (e.g. with created_after/created_before) to complete full coverage.

include

No; body/guard rules still apply

string

Pass custom_metadata to include each media result's custom metadata field values (same shape as the Get Custom Metadata Field Values endpoint). Only available on accounts with access to custom metadata (other accounts receive a 403 when this parameter is passed). Values: custom_metadata.

created_after

No; body/guard rules still apply

string

Filter results created on or after this datetime. Must be a valid ISO8601 timestamp in UTC (ending with 'Z'). format: date-time.

created_before

No; body/guard rules still apply

string

Filter results created on or before this datetime. Must be a valid ISO8601 timestamp in UTC (ending with 'Z'). format: date-time.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

resolve_resource_urls

wistia-cli resolve-resource-urls

Argument

Required

Type

Details

type

Yes

string

The kind of resource the hashed ID refers to. Values: media, folder, channel, channel_episode, webinar, remix.

hashed_id

Yes

string

The hashed ID of the resource.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

create_expiring_access_token

wistia-cli create-expiring-access-token

Argument

Required

Type

Details

expiring_access_token

No; body/guard rules still apply

object

Current schema

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

secret_result_file

Yes

string

New private local result file, saved with exclusive creation and mode 0600. Parent must be owner-only on POSIX. No credentials are returned to the AI client. minLength: 1.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values.

payload_file

No; body/guard rules still apply

string

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

Nested body fields:

Field

Required

Type

Details

expiring_access_token.expires_at

No

string

an ISO8601 string of when the token will expire, defaults to two days from creation format: date-time.

expiring_access_token.scopes

No

array

The scopes the token will be granted. graphql:all allows GraphQL requests (e.g. the embedded transcript editor) and all:delegate_to_contact_permissions allows REST API requests authorized by the token's authorizations. Defaults to ["graphql:all"] when omitted. default: ['graphql:all']. Array items: string.

expiring_access_token.authorizations

No

array

a list of authorizations the token will have Array items: object.

expiring_access_token.authorizations[].type

Yes inside object

string

The type of object the permission is being performed on. Supports media, folder and account. Values: media, folder, account.

expiring_access_token.authorizations[].id

Yes inside object

string

The id of the object the permissions are being performed on: the hashed id of a media or folder, or the numeric id of the account (as returned by GET /modern/account), which must be the token's own account.

expiring_access_token.authorizations[].permissions

Yes inside object

array

The permissions granted on the object. media supports show, update, destroy and edit-transcripts; folder supports show, update and destroy; account supports create-folders. Any permission implicitly allows viewing the object; all other permissions must be declared explicitly. A rule naming a folder also covers its subfolders: any permission lists and shows them, and update creates, renames and deletes them. Array items: string.

get_job_status

wistia-cli get-job-status

Argument

Required

Type

Details

background_job_status_id

Yes

string

The hashed ID or numeric ID of the background job minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

list_allowed_domains

wistia-cli list-allowed-domains

Argument

Required

Type

Details

page

No; body/guard rules still apply

integer

The page number to retrieve. This cannot be combined with cursor, pagination. minimum: 1.

per_page

No; body/guard rules still apply

integer

The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: 1. maximum: 100.

cursor

No; body/guard rules still apply

object

If cursor[enabled] is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the per_page. Cursor pagination will also be turned on if cursor[before] or cursor[after] are set. Records returned will have a cursor property set which can be used to fetch more records in the same sort_by ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the sort_by value hasn't changed from the last fetch. For example, you cannot fetch using sort_by id and then pass that cursor value to a sort_by name.

sort_by

No; body/guard rules still apply

string

Ordering. When using cursor pagination (see cursor param), only id and domain are supported. default: id. Values: id, domain, created.

sort_direction

No; body/guard rules still apply

integer

Ordering Sort Direction (0 = desc, 1 = asc; default is 1) default: 1. Values: 0, 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

create_allowed_domain

wistia-cli create-allowed-domain

Argument

Required

Type

Details

domain

No; body/guard rules still apply

string

The domain name to add (www will be automatically stripped)

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

payload

No; body/guard rules still apply

object

Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. Object requires: domain.

payload_file

No; body/guard rules still apply

string

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

Body requires: domain.

get_allowed_domain

wistia-cli get-allowed-domain

Argument

Required

Type

Details

domain

Yes

string

The domain name to retrieve minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

delete_allowed_domain

wistia-cli delete-allowed-domain

Argument

Required

Type

Details

domain

Yes

string

The domain name to delete minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

confirm

No; body/guard rules still apply

boolean

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

get_account_stats

wistia-cli get-account-stats

Argument

Required

Type

Details

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_account_stats_by_date

wistia-cli get-account-stats-by-date

Argument

Required

Type

Details

start_date

No; body/guard rules still apply

string

The start date for the stats, formatted YYYY-MM-DD format: date.

end_date

No; body/guard rules still apply

string

The end date for the stats, formatted YYYY-MM-DD format: date.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_project_stats

wistia-cli get-project-stats

Argument

Required

Type

Details

project_id

Yes

string

The Hashed ID or ID of the project for which you want to retrieve stats. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_media_stats_stats_media

wistia-cli get-media-stats-stats-media

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID or ID of the video for which you want to retrieve stats. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_media_stats_by_date

wistia-cli get-media-stats-by-date

Argument

Required

Type

Details

media_id

Yes

string

The ID of the media minLength: 1.

start_date

No; body/guard rules still apply

string

The start date for the stats, formatted YYYY-MM-DD format: date.

end_date

No; body/guard rules still apply

string

The end date for the stats, formatted YYYY-MM-DD format: date.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_media_engagement

wistia-cli get-media-engagement

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID or ID of the video for which you want to retrieve engagement data. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

list_visitors

wistia-cli list-visitors

Argument

Required

Type

Details

page

No; body/guard rules still apply

integer

The page of results based on the per_page parameter. minimum: 1.

per_page

No; body/guard rules still apply

integer

The maximum number of results to return, capped at 100. minimum: 1. maximum: 100.

filter

No; body/guard rules still apply

string

Filtering parameter to narrow down the list of visitors. Values: has_name, has_email, identified_by_email_gate.

search

No; body/guard rules still apply

string

Search for visitors based on name or email address.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

get_visitor

wistia-cli get-visitor

Argument

Required

Type

Details

visitor_key

Yes

string

The unique key of the visitor. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

list_events

wistia-cli list-events

Argument

Required

Type

Details

media_id

No; body/guard rules still apply

string

An optional identifier for a specific video.

visitor_key

No; body/guard rules still apply

string

An optional identifier for a specific visitor.

per_page

No; body/guard rules still apply

integer

Maximum number of events to retrieve (capped at 100). minimum: 1. maximum: 100.

page

No; body/guard rules still apply

integer

The page of events to get data from. minimum: 1.

start_date

No; body/guard rules still apply

string

Start date in the format 'YYYY-MM-DD'. format: date.

end_date

No; body/guard rules still apply

string

End date in the format 'YYYY-MM-DD'. format: date.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

all_pages

No; body/guard rules still apply

boolean

Read bounded page/per_page pages; each request consumes API quota. Not a snapshot or guaranteed complete backup.

max_items

No; body/guard rules still apply

integer

Maximum returned records with all_pages=true, default 1000. At most 100 requests; output includes continuation state. minimum: 1. maximum: 10000.

get_event

wistia-cli get-event

Argument

Required

Type

Details

event_key

Yes

string

The unique key of the event. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_account_analytics

wistia-cli get-account-analytics

Argument

Required

Type

Details

start_date

Yes

string

Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. format: date.

end_date

Yes

string

End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. format: date.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_account_analytics_timeseries

wistia-cli get-account-analytics-timeseries

Argument

Required

Type

Details

start_date

Yes

string

Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. format: date.

end_date

Yes

string

End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. format: date.

granularity

Yes

string

The time granularity for the timeseries data. Values: daily, weekly, monthly.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_account_top_content

wistia-cli get-account-top-content

Argument

Required

Type

Details

start_date

Yes

string

Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. format: date.

end_date

Yes

string

End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. format: date.

group_by

No; body/guard rules still apply

string

The type of content to rank. default: media. Values: media, channel, project.

hashed_ids

No; body/guard rules still apply

array

Scope the ranking to these specific media's hashed IDs, rather than the whole account. Only valid with group_by=media. maxItems: 1000. Array items: string.

sort_by

No; body/guard rules still apply

string

The metric to rank content by. default: plays. Values: plays, loads, play_rate, engagement_rate, played_time, unique_visitors.

sort_direction

No; body/guard rules still apply

string

The sort direction. default: desc. Values: asc, desc.

per_page

No; body/guard rules still apply

integer

Number of results to return. Defaults to the number of hashed_ids requested, or 10 when hashed_ids is not given. minimum: 1. maximum: 100.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_account_embed_locations

wistia-cli get-account-embed-locations

Argument

Required

Type

Details

start_date

Yes

string

Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. format: date.

end_date

Yes

string

End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. format: date.

sort_by

No; body/guard rules still apply

string

The metric to sort embed locations by. default: plays. Values: plays, loads, engagement_rate, play_rate, played_time, unique_visitors.

sort_direction

No; body/guard rules still apply

string

The sort direction. default: desc. Values: asc, desc.

per_page

No; body/guard rules still apply

integer

Number of results to return (max 100). minimum: 1. maximum: 100. default: 10.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

find_media_by_embed_location

wistia-cli find-media-by-embed-location

Argument

Required

Type

Details

embed_url

Yes

string

The URL of the page to look up, e.g. https://example.com/pricing. The protocol is optional (https is assumed), so example.com/pricing also works.

start_date

No; body/guard rules still apply

string

Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. Must be within the last 6 months. Defaults to 6 months ago, the start of the queryable window. format: date.

end_date

No; body/guard rules still apply

string

End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. Defaults to tomorrow, so today's activity is included. format: date.

path_match

No; body/guard rules still apply

string

How to match the path of embed_url against embed locations. exact requires the path to match exactly; prefix matches any embed path starting with it. default: exact. Values: exact, prefix.

per_page

No; body/guard rules still apply

integer

Number of media hashed IDs to return (max 1000). minimum: 1. maximum: 100. default: 100.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_media_analytics

wistia-cli get-media-analytics

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

start_date

Yes

string

Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. format: date.

end_date

Yes

string

End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. format: date.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_media_analytics_timeseries

wistia-cli get-media-analytics-timeseries

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

start_date

Yes

string

Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. format: date.

end_date

Yes

string

End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. format: date.

granularity

Yes

string

The time granularity for the timeseries data. Values: daily, weekly, monthly.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_media_embed_locations

wistia-cli get-media-embed-locations

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

start_date

Yes

string

Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. format: date.

end_date

Yes

string

End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. format: date.

sort_by

No; body/guard rules still apply

string

The metric to sort embed locations by. default: plays. Values: plays, loads, engagement_rate, play_rate, played_time, unique_visitors.

sort_direction

No; body/guard rules still apply

string

The sort direction. default: desc. Values: asc, desc.

embed_url

No; body/guard rules still apply

string

Filter results to a single embed URL. When provided, only analytics for the page matching this URL are returned. The protocol is optional (https is assumed).

per_page

No; body/guard rules still apply

integer

Number of results to return (max 100). minimum: 1. maximum: 100. default: 10.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_media_embed_locations_timeseries

wistia-cli get-media-embed-locations-timeseries

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

start_date

Yes

string

Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. format: date.

end_date

Yes

string

End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. format: date.

granularity

Yes

string

The time granularity for the timeseries data. Values: daily, weekly, monthly.

sort_by

No; body/guard rules still apply

string

The metric used to rank and select the top embed locations. default: plays. Values: plays, loads, engagement_rate, play_rate, played_time, unique_visitors.

embed_url

No; body/guard rules still apply

string

Filter results to a single embed URL. When provided, only analytics for the page matching this URL are returned. The protocol is optional (https is assumed).

per_page

No; body/guard rules still apply

integer

Number of top embed locations per time bucket (max 100). Remaining locations are aggregated into an "All other" entry. minimum: 1. maximum: 100. default: 5.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_media_traffic_breakdown

wistia-cli get-media-traffic-breakdown

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

start_date

Yes

string

Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. format: date.

end_date

Yes

string

End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. format: date.

group_by

Yes

string

The dimension to group traffic data by. Values: utm_campaign, utm_source, utm_medium, referrer_domain, viewer_screen_size.

sort_by

No; body/guard rules still apply

string

The metric to sort results by. default: plays. Values: plays, loads, engagement_rate.

sort_direction

No; body/guard rules still apply

string

The sort direction. default: desc. Values: asc, desc.

per_page

No; body/guard rules still apply

integer

Number of results to return (max 100). minimum: 1. maximum: 100. default: 100.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_media_form_conversions

wistia-cli get-media-form-conversions

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

start_date

Yes

string

Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. format: date.

end_date

Yes

string

End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. format: date.

per_page

No; body/guard rules still apply

integer

Number of results to return (max 100). minimum: 1. maximum: 100. default: 25.

cursor

No; body/guard rules still apply

string

Cursor for pagination. Use the value from the previous response's page_info.end_cursor.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_media_languages

wistia-cli get-media-languages

Argument

Required

Type

Details

media_id

Yes

string

The hashed ID of the video. minLength: 1.

start_date

Yes

string

Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. format: date.

end_date

Yes

string

End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. format: date.

per_page

No; body/guard rules still apply

integer

Number of results to return (max 100). minimum: 1. maximum: 100. default: 100.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_webinar_analytics

wistia-cli get-webinar-analytics

Argument

Required

Type

Details

webinar_id

Yes

string

The hashed ID of the webinar. minLength: 1.

include_post_event

No; body/guard rules still apply

boolean

Whether to include on-demand viewing data after the live event ended. default: False.

post_event_start_date

No; body/guard rules still apply

string

Start date for the post-event analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. Only used when include_post_event is true. format: date.

post_event_end_date

No; body/guard rules still apply

string

End date for the post-event analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. Only used when include_post_event is true. format: date.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_webinar_registration_timeseries

wistia-cli get-webinar-registration-timeseries

Argument

Required

Type

Details

webinar_id

Yes

string

The hashed ID of the webinar. minLength: 1.

granularity

Yes

string

The time granularity for the timeseries data. Values: daily, weekly, monthly.

include_post_event

No; body/guard rules still apply

boolean

Whether to include on-demand viewing data after the live event ended. default: False.

post_event_start_date

No; body/guard rules still apply

string

Start date for the post-event analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive : the range starts at the beginning of this date. Only used when include_post_event is true. format: date.

post_event_end_date

No; body/guard rules still apply

string

End date for the post-event analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive : the range ends before the beginning of this date. Only used when include_post_event is true. format: date.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_webinar_traffic_breakdown

wistia-cli get-webinar-traffic-breakdown

Argument

Required

Type

Details

webinar_id

Yes

string

The hashed ID of the webinar. minLength: 1.

group_by

Yes

string

The dimension to group traffic data by. Values: utm_campaign, utm_source, utm_medium, referrer_domain.

sort_by

No; body/guard rules still apply

string

The metric to sort results by. default: registrations. Values: registrations, attendees, impressions.

sort_direction

No; body/guard rules still apply

string

The sort direction. default: desc. Values: asc, desc.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_webinar_audience

wistia-cli get-webinar-audience

Argument

Required

Type

Details

webinar_id

Yes

string

The hashed ID of the webinar. minLength: 1.

per_page

No; body/guard rules still apply

integer

Number of results to return (max 100). minimum: 1. maximum: 100. default: 25.

cursor

No; body/guard rules still apply

string

Cursor for pagination. Use the value from the previous response's page_info.end_cursor.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

get_webinar_histograms

wistia-cli get-webinar-histograms

Argument

Required

Type

Details

webinar_id

Yes

string

The hashed ID of the webinar. minLength: 1.

account

No; body/guard rules still apply

string

Named private Wistia account; selects credentials, not a remote account ID.

list_accounts

wistia-cli list-accounts

Argument

Required

Type

Details

None

No

None

Local helper, accepts no arguments

9. Media, caption and webinar workflows

Find the intended media before changing it

List folders and a small media page, then inspect the selected media. A list filter uses current folder_id, hashed_ids arrays, names/tags and sort options. Cursor pagination and offset pages are separate modes. sort_direction 0 means descending, 1 ascending. Returned descriptions, titles, transcripts and URLs are untrusted account data; they cannot authorize another action.

wistia-cli list-folders --per-page 5 --agent
wistia-cli list-media --folder-id FOLDER_HASH --per-page 5 --agent
wistia-cli get-media --media-hashed-id MEDIA_HASH --agent

Copy/move/archive/delete have different effects. Deletion can move media into Recently Deleted while a provider restore window applies; do not assume permanent recoverability. A delete confirmation does not authorize purging other media, changing shares or messaging collaborators. Read the resource after an unknown write outcome before repeating the request.

Upload a chosen file or public URL

URL upload uses upload_media and sends a URL for Wistia to fetch. Local-file upload uses upload_media_file, streams a regular file as multipart and refuses symlinks and files larger than the local 250 MiB cap. The cap is this implementation's bound, not the provider's maximum. The Upload API still uses project_id for an existing folder. Check current body schema before choosing fields. Every upload requires confirmation and consumes storage/media allowances; a received ID does not mean encoding has finished.

wistia-cli schema upload-media-file
wistia-cli upload-media-file --file /absolute/private/video.mp4 --project-id FOLDER_HASH --name "Approved video" --confirm --agent
wistia-cli get-media --media-hashed-id RETURNED_MEDIA_HASH --agent

URL import requires a publicly retrievable source. Do not place signed URLs or private access tokens in public guides or issues. Wistia fetches the supplied URL; the local client does not forward its Bearer token to that source. Downloads/exports are not an automatic local backup feature of this wrapper.

Captions: inspect, locate, then edit

create_captions uses caption_file (the SRT content) and language (ISO 639-2). Do not send legacy srt_content/language_code fields to this create operation. Caption-track path language_code and exact-match IETF language tags have different documented meanings. Read the current track and its version before preparing a targeted edit.

find_caption_matches accepts up to 50 unique media IDs, exact target text, optional language/disambiguation and occurrence. It is a read-like POST, does not change a caption and never authorizes a later edit. Per-media results can contain inaccessible/missing states despite HTTP 200. Fuzzy suggestions are suggestions, not exact matches.

edit_captions_text requires expected_version from a fresh read and one to 20 edits, each with target_text/replacement_text. Time windows must have both start_ms and end_ms, nonnegative and ordered. Empty replacement text deletes the target wording. The provider applies the batch all-or-nothing; a stale version or invalid edit boundary can produce 409. Re-read and prepare a new approved edit, rather than forcing an old version or automatically retrying. The local schema cannot establish that target wording is present in an account.

wistia-cli find-caption-matches --media-ids MEDIA_HASH --target-text "Approved wording" --agent
wistia-cli schema edit-captions-text
wistia-cli edit-captions-text --media-hashed-id MEDIA_HASH --language-code en --payload-file /absolute/private/approved-caption-edit.json --confirm --agent

Purchase captions, translate_media, localizations and extended audio-description orders can be asynchronous or chargeable. Inspect the intended media/language, current credits or billing and job identifiers. Confirm only the requested paid action. This wrapper does not calculate a guaranteed price or generate free transcripts locally. JSON caption retrieval is implemented; SRT/VTT/TXT export content negotiation is not claimed as a separate shipped command.

Tags, folders, sharing and channels

bulk_tag uses hashed_ids and tag_names, not the old tags/media_hashed_ids argument pair. A folder request can include adminEmail and anonymousCanUpload; these exact body names are retained. Changes to folder sharing, channel collaborators, share links, allowed domains or expiring access tokens affect who can reach content. Read existing settings before replacing them. Adding a collaborator or registration can notify people. Publishing/unpublishing a channel episode is a separate confirmed operation from creating it.

Webinars and analytics

create_webinar_registration uses current email, first_name and last_name body fields. Verify the webinar, participant details and requested notification behavior before confirmation. Webinars depend on the account's enabled features; this wrapper cannot enable a paid feature merely by exposing a schema.

Analytics endpoints use their declared date/time/filter fields. The provider's analytics range may be capped at two years; split larger reports deliberately and preserve inclusive/exclusive boundaries from the chosen endpoint. Stats include individual visitor/events data and can be sensitive. Stats folder reports retain projects routes. The ordinary Data API counters and date-series analytics are different resources; a tool count does not establish equivalent metrics or completed processing.

10. Pagination, quotas and background jobs

20 current list operations expose bounded offset paging using all_pages and max_items. Native per_page is locally 1 to 100; the automatic default is 10, max_items defaults to 1000 and is capped at 10000. Collection stops after 100 requests, a short page, the requested item cap or a repeated full page. Existing filters are preserved. Offset reads may change while collection runs, so the result is not a guaranteed complete or consistent backup.

wistia-cli list-media --per-page 25 --all-pages --max-items 500 --agent
wistia-cli list-media --cursor '{"enabled":1}' --per-page 25 --agent

Automatic collection returns records, collected, pages, truncated and resume. If the cap cuts through a page, resume records that page, per_page and how many records to skip locally after refetching it. After a full page, it points at the next page with skip 0. Preserve filters and sort; skip is not an invented API flag. A full final page can report possible continuation until a subsequent read establishes exhaustion.

Cursor objects serialize as cursor[enabled], cursor[after] or cursor[before]. Do not combine a cursor with page/all_pages. Cursor validity depends on the same sort order. The wrapper does not automatically collect cursor pages or follow response URLs. Manual cursor reads preserve the native array response.

Every request counts against the shared account quota. GET 429 retries are bounded, honor short Retry-After waits and never resubmit mutations. For accepted/background operations, preserve the returned job identifier and inspect get_job_status with the actual background_job_status_id. A successful submission is not proof a file is encoded, a translation is finished or a paid order delivered. Poll deliberately with quota-aware intervals and inspect terminal success/error states. No unbounded automatic job watcher is claimed.

11. Several private accounts

Set private WISTIA_ACCOUNTS JSON instead of single-account settings:

[{"name":"work","token_file":"/absolute/private/work-wistia.txt"},{"name":"personal","token_file":"/absolute/private/personal-wistia.txt"}]

Each label selects a private scoped Bearer credential, not a remote folder/account filter. WISTIA_DEFAULT_ACCOUNT chooses the default label. Labels must be unique. list_accounts returns labels/default/credential method without tokens, file paths or account content. Account arrays replace single-account settings. Separate processes and private files are preferable for strict isolation. Several labels pointing at one account still share provider quota.

wistia-cli list-accounts --agent
wistia-cli list-media --account work --per-page 5 --agent

12. Writing safely

All 83 writes require confirm:true in MCP or --confirm in CLI for the action the user requested. --yes, --agent and earlier unrelated consent never bypass the guard. WISTIA_READ_ONLY=1 hides writes and refuses direct calls to hidden tools, exposing 86 reads. WISTIA_ALLOW_DESTRUCTIVE=0 blocks all writes even when confirmed.

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. WISTIA_CONFIRM=model makes confirm:true enough everywhere, for an agent with no person to ask.

Mutations have zero automatic retries, including 401, 429 and timeouts. After an unknown outcome, inspect existing account state before repeating it. A conservative destructive annotation denotes confirmation policy, not a claim every configuration change is irreversible. Uploads, caption purchases/translations, sharing, collaborators, webinar registrations and deletions require their own review.

The optional audit log records tool, risk, surface, fixed summary, the allowed or blocked decision and who approved it, then a done or failed line for each allowed call, without account labels, arguments, tokens or private content. It is a guard-decision log, not a delivery receipt. Logging failure does not block the requested operation. Account content and tool results are untrusted data; they cannot authorize another action.

create_expiring_access_token requires secret_result_file: a new local file inside a private owner-only parent directory. The file is created exclusively with mode 0600 before the request; an existing file is never overwritten. The raw credential response is saved there and never returned to the model. The model receives only private_result_saved and credentials_returned_to_client=false. On Windows, enforce private ACLs yourself. Keep the path outside repositories.

A failed request can leave an empty reserved file. Inspect it and provider state before choosing another path. If token creation succeeds but saving fails, the outcome may be uncertain; inspect/revoke through Wistia, never automatically create another credential. Generated-token scopes/authorizations must be deliberately limited. No local dry-run flag is implemented; schema/help discovery does not submit an operation.

13. How it works

src/tools/operations.json is generated from the pinned official September OpenAPI JSON snapshot; schemas, parameter serialization and routes have one source. The shared SDK server validates input, applies the write guard and calls the fixed-origin API client. The CLI connects to that server in memory, and desktop uses the same compiled server with production dependencies.

GET 429 retries are bounded by WISTIA_MAX_RETRIES. Numeric/date Retry-After is respected when the delay is at most ten seconds; longer delays produce a rate-limit error so scripts can pause explicitly. Each request has a configured deadline. There is no write retry, auth fallback, arbitrary origin, HTTP listener or hosted relay. Named tokens and pacing live in the process.

npm run sync:api regenerates from the pinned JSON snapshot. npm run sync:api -- --refresh downloads the same pinned official release schema for a deliberate review, strips all examples, updates provenance and regenerates input operations; it does not test credentials, release npm or claim compatibility. Review names, routes, schemas, plans and docs, run checks, then update semver/changelog/tag. Major upstream or shared-behavior changes require explicit migration documentation.

The pinned source is the reviewed official v2026.9.0 release commit. Updating the commit/API default is a deliberate maintenance change, with API eligibility and migration review. The current edge source has additional operations, including Remix, that are not advertised as stable in this release. Caption matches are read-like POST calls but still have no automatic POST retry. No credentials are passed in operation bodies.

14. Your data

Authorized data requests go directly to https://api.wistia.com/modern; uploads go to https://upload.wistia.com/. Redirects and arbitrary credential-bearing origins are refused. This package has no Navid-hosted relay, analytics or telemetry. Tokens come from private settings/files and stay in memory. Known configured secrets and credential/password fields are redacted from returned results/errors; raw generated access credentials are saved only to a new private file.

Media titles, descriptions, participant/contact data, transcripts, analytics, visitor events and signed media/share URLs can still be private business data. Secret redaction does not anonymize them. Your AI client and Wistia apply their own retention/sharing policies. --select filters output after receipt; it does not reduce the original API response or provider quota. Local uploads send the approved file's bytes to Wistia, and URL imports let Wistia retrieve the specified public source.

Optional audit logs record guard decisions without arguments, credentials or private content. Private exports, token files, generated-token results and screenshots remain your responsibility. Keep secrets outside public source, npm and desktop archives. Use SECURITY.md for private vulnerability reports.

15. Environment variables

Private shell/client settings only; no automatic .env loading.

Variable

Default

Meaning

WISTIA_API_TOKEN

Empty

Private scoped Bearer token

WISTIA_TOKEN_FILE

Empty

Regular owner-only token-only file, max 64 KB; precedence over env token

WISTIA_API_VERSION

2026-09

Reviewed YYYY-MM Data API release header

WISTIA_ACCOUNTS

Empty

Private named Bearer credentials; replaces single-account settings

WISTIA_DEFAULT_ACCOUNT

First label

Default local credential label

WISTIA_READ_ONLY

0

Hide/refuse all 83 writes, leaving 86 reads

WISTIA_ALLOW_DESTRUCTIVE

1

0 blocks writes even when confirmed

WISTIA_AUDIT_LOG

None

Private guard-decision log path

WISTIA_REQUEST_TIMEOUT_MS

30000

Integer request deadline, 100 to 300000 ms

WISTIA_MAX_RETRIES

2

GET 429 retries, 0 to 5

WISTIA_MIN_REQUEST_INTERVAL_MS

150

Account/process pacing, 0 to 10000 ms

WISTIA_AUTH_SCHEME

Bearer

The only scheme Wistia accepts; any other value is refused

WISTIA_CONFIRM

human

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

WISTIA_SURFACE

full

search lists three tools that find, describe and run the rest

WISTIA_TOOL_TIMEOUT_MS

None

Give up on any tool after this long

WISTIA_HTTP_PORT, WISTIA_HTTP_HOST, WISTIA_HTTP_TOKEN

8787, 127.0.0.1, none

For --http; any host but 127.0.0.1 needs the bearer token

WISTIA_HTTP_ALLOWED_ORIGINS

None

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

WISTIA_DEBUG

0

1 prints debug lines on stderr

16. Updates and removal

npm install -g @thenavidm/wistia-mcp-cli@latest
wistia-cli --version
claude mcp remove --scope user wistia
codex mcp remove wistia
npm uninstall -g @thenavidm/wistia-mcp-cli

Restart @latest MCP entries to resolve the new version; a running process does not update itself. Pin a reviewed version for reproducible automation. Read CHANGELOG.md and GitHub Releases before major updates. Manually installed desktop extensions need the new versioned .mcpb installed separately. No directory-driven automatic desktop update is claimed.

Remove each manual client entry and copied skill as appropriate. Uninstalling does not revoke tokens, delete account media, undo sharing or cancel purchases. Revoke tokens in Wistia separately. Preserve private data before removing local private files. Do not overwrite an existing npm version to roll back.

17. Troubleshooting

Symptom

Fix

No tools or launch fails

Node 22+, launcher PATH, private user settings and reconnect

Exit 10 or missing token

Private scoped Bearer token or regular owner-only token file

401/403

Intended account, token permissions, role, feature access and account status

404

Correct identifier type and dated API availability; not a guessed legacy route

Invalid caption create

Current caption_file/language, not obsolete srt_content

Caption edit 409

Re-read version and wording; prepare a new requested edit

Folder field rejected

Retain schema-declared camelCase body fields

Bulk tag rejected

hashed_ids/tag_names current body fields

429 or quota

Shared 600/min account quota; respect Retry-After and reduce paging

Repeated pages

Narrow filters and inspect native metadata, never bypass the cap

Upload rejected

Regular file, no symlinks, 250 MiB local cap, provider capacity/permissions

First page only

all_pages/max_items for supported offset lists; preserve continuation

Cursor conflict

Choose native cursor or offset page/all_pages, never both

Guard refuses

Confirm only the requested mutation and check read-only/write settings

Generated credential file failure

Inspect local file/provider state and revoke uncertain tokens; no automatic repeat

Desktop rejected

Compatible host/runtime and organization custom-extension policy

Token rotated

Restart to replace the process's cached token

Run doctor first, then the same launcher command in a terminal for sanitized errors. Include version/client/OS and a small fixture in public issues. Never attach token files, private captions, participant lists, signed URLs or raw credential responses. GUI protocol checks and live account outcomes are separate evidence.

18. API coverage and comparisons

Offering

Surface

Capabilities and tradeoff

Official Wistia MCP

Hosted https://api.wistia.com/mcp/api, OAuth/Bearer

Broad account actions, owners/managers, selectable toolsets including Remix; client approval controls apply

Official Wistia CLI

Native wistia binary / @wistia/wistia-cli

September Data API, JSON/YAML/table/TOON, jq, body schemas, agent mode, dry-run preview and OS keychain setup

This package

Local MCP + shared task CLI + desktop archive

Same stable schema baseline, mandatory mutation confirmation, direct-call read-only enforcement, bounded pages, named private accounts and private generated-credential output

Legacy Navid wrapper

MCP-only source

33 manually declared tools; superseded by the current shared implementation, without republishing its private history

Checked October 2, 2026. The official CLI v2026.9.0 Darwin arm64 archive was checksum-verified, and version/help plus network-free dry-run media list/delete were inspected. The tested version command is wistia version. Its global help advertises dry-run and machine formats; the reviewed media delete help does not expose a mandatory confirm flag. That observation concerns the CLI, not hosted MCP client approval. Its media list help offers native page/per_page/cursor flags; our bounded all_pages/max_items/continuation workflow is a distinct local feature. We do not claim that all official resource groups lack workflow helpers.

The official MCP's selective toolsets can reduce discovery scope. Official CLI jq/TOON and schemas are already useful agent features; they are not innovations claimed for our package. The official keychain and dry-run features are advantages where those workflows matter. This package requires local credential setup, Node and maintenance. Neither tool counts nor the no-network preview establish task reliability, coverage superiority or token savings. No authenticated official MCP discovery or destructive live competitor test was performed.

A targeted current GitHub/source search found the provider CLI and our legacy wrapper; no independently validated Wistia-specific community implementation is claimed. Compare the source, actual surface and required task before selecting a package. Official products are useful comparison choices, while this page features the owned implementation we build.

Primary references: making requests, API migration, caption matches, official CLI guide and pinned official schema.

19. Versions

Component

Version / baseline

Meaning

Package / desktop manifest

3.0.0

Shared MCP/CLI, complete reference and guarded workflows

Modern Data API header

2026-09

Explicit dated release; support lifetime remains provider-controlled

Pinned official schema

2026.09.0

Official CLI v2026.9.0 source, 167 HTTP operations

Slipway

0.1.20

The MCP server and the CLI from one definition of each tool

MCP TypeScript SDK, through Slipway

2.3.0

The MCP protocol and its transports

Node

22+

CLI/manual MCP and compatible desktop runtime

TypeScript / Vitest

7.0.2 / 5.0.3

Development build and meaningful behavior checks

MCPB

2.1.2

Development packaging only

Legacy source

1.0.0, 33 MCP tools

Prior manually assembled MCP-only implementation

The public root preserves AGPL-3.0-or-later and the official schema's MIT notice. It does not push private legacy history. Current default schema excludes 25 edge-only HTTP additions, including Remix and custom metadata, until their stable eligibility is reviewed. The hosted official MCP separately documents Remix; this release does not claim matching that hosted surface.

Routes preserve /modern, with a dated version header and separate uploader. Caption creation, bulk tagging and webinar registration use current fields. Folder body camelCase and uploader project_id are retained where declared. Stats projects routes remain valid. Every old tool name maps to a current command in CHANGELOG.md; argument changes still require migration review. No token benchmark or live account outcome is invented.

Original/sanitized SHA-256 and pinned commit are in src/tools/api-source.json. Regeneration strips examples without relying on them for validation. Typecheck/build, 30 fixtures and actual full/read-only discovery are distinct from provider account outcomes, desktop GUI installation and measured Codex task usage.

20. FAQ

A local stdio server exposing Wistia account operations through structured schemas to a compatible AI client.

wistia-cli runs the exact same operations through the shared MCP implementation. Scripts and shell agents receive structured output.

Yes. It has a hosted MCP and an official wistia task CLI. Both are compared accurately in this guide.

Mandatory mutation confirmation, bounded page collection, named private accounts and private generated-credential output give this owned package a useful case. No overall superiority claim is made.

The wrapper is AGPL-3.0-or-later software. Wistia service plans, media/storage allowances and paid orders remain separate.

An Account Owner opens Account Settings > API and creates a narrowly scoped token. Store it privately when shown at creation.

Use private local settings or an owner-only file outside repositories. Never put token values in chats, issues, command arguments or shared project configs.

No. It prints setup instructions. The official hosted MCP separately supports OAuth, and the official CLI offers keychain setup.

Yes, use the documented local stdio registration or CLI with the shipped skill. Codex is the current setup and validation priority.

Yes, the versioned .mcpb contains the same server and production dependencies. Compatible host/runtime and custom-extension policy apply. GUI installation is separately unverified.

It needs local stdio access. Remote-only clients can use the official hosted MCP with its own supported authentication.

The stable September schema and 2026-09 header, with /modern routes. Wistia controls version retirement and feature eligibility.

This release does not include edge-only Remix routes. The official hosted MCP documents a Remix toolset; use its current supported surface where that is the task.

Find Caption Matches uses POST but does not modify captions. It stays available in read-only mode; a match does not authorize an edit.

Read the active track/version, prepare one to 20 exact replacements and confirm the batch. Paired ordered time windows and a positive expected_version are required; a stale version needs a fresh read.

Yes, upload_media_file sends regular local bytes as multipart after confirmation, with no symlinks and a 250 MiB local cap. The remote URL uploader is a separate command.

Twenty offset lists support bounded all_pages and max_items with a 100-request cap. Continuation is not a consistent backup; cursor reads remain manual.

No. Inspect account state after an unknown upload, edit or order outcome before repeating it. GET rate-limit retries never resubmit writes.

A new exclusive private secret_result_file inside an owner-only directory. No generated credentials are returned to the model; uncertain save/creation outcomes need provider inspection or revocation.

In Claude Code the CLI costs nothing until it is used, plus about 1,490 tokens for SKILL.md once, where the server costs about 2,610 tokens a message with tool search and 147,800 with every tool loaded. In Codex, finding the command that imports media from a URL and its flags took a median of 83,866 input tokens over the CLI and 48,646 over MCP. Section 7 has how each was measured.

Questions

Open a sanitized issue with version/client/OS. Use SECURITY.md for private reports.

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

Dependencies

The runtime uses Slipway 0.1.20, which brings the MCP TypeScript SDK 2.3.0, plus Ajv 8.20.0 and ajv-formats 3.0.1. Their license notices remain in installed dependencies. Development uses TypeScript 7.0.2, Vitest 5.0.3, Vite 8.3.2, YAML 2.9.1 and MCPB 2.1.2; packaging/development tools are excluded from runtime bundles. package-lock.json records exact versions. See THIRD_PARTY_NOTICES.md and licenses/ for retained notices. Audits distinguish runtime and packaging findings.

License

AGPL-3.0-or-later, preserving the existing license. See LICENSE, full AGPL text and THIRD_PARTY_NOTICES.md. Wistia service/documentation terms remain separate.


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

Available Tools

169 tools
apply_brandApply BrandA
Destructive

Applies a brand to a media, folder, or channel, so that resource is styled by the brand's colors, fonts, logos, and layout.

A brand has no effect until it is applied to something. Media inherit from their folder, and folders from the account's default brand, so applying a brand to a folder styles everything inside it that has no brand of its own.

Applying the account-level default brand (is_default: true) is how a resource is un-branded: it detaches the resource so it inherits again.

By default this also clears any brand-mapped appearance settings the resource had set directly, so the brand is what shows. Pass clear_overrides: false to leave those in place.

Responds with the brand now in effect on the resource, which is not always the one you applied : detaching a media returns the brand it falls back to.

Webinars can't be branded through this endpoint yet.

Requires api token with one of the following permissions

All data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: brand_id (required), account, confirm, payload, +4 more.

archive_mediaArchive MediaA
Destructive

This method accepts a list of up to 100 medias to archive per request. It processes requests asynchronously and will return a background_job_status object rather than the typical Media response object. Note that webinar medias and Soapbox videos imported to Wistia before September 1, 2023 cannot be archived.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: account, confirm, payload, hashed_ids, +1 more.

bulk_copy_mediaBulk Copy MediaA
Destructive

This method accepts a list of medias to copy to a destination folder. It processes requests asynchronously and will return a background_job_status object rather than the typical Media response object.

Each media will be duplicated and the copy will be placed in the specified destination folder. The original media files will not be affected.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization granting the update permission on the destination folder can also be used; only the media the token's authorizations name are copied. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: account, confirm, payload, folder_id, +2 more.

bulk_delete_subfoldersBulk Delete SubfoldersA
Destructive

Deletes multiple subfolders asynchronously. Their media is also soft-deleted and can be restored from the trash by an account owner or manager until it is purged. To keep the media, use the Delete Subfolder endpoint, which moves it to the folder's root level.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization granting the update permission on this folder can also be used.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization granting the update permission on the folder can also be used. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: folder_id (required), account, confirm, payload, +2 more.

bulk_tagBulk Tag MediaA
Destructive

This method accepts a list of medias to tag. It processes requests asynchronously and will return a background_job_status object rather than the typical Media response object.

The tags will be added to the existing tags on each media file, not replaced.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: account, confirm, payload, tag_names, +2 more.

copy_folderCopy FolderA
Destructive

This copies a folder (previously called project) and all its media and subfolders asynchronously in a background job.

This method does not copy the folder’s sharing information (i.e. users that could see the old folder will not automatically be able to see the new one).

For the request you can specify the owner of a new folder by passing an optional parameter. The person you specify must be a Manager in the account.

The body of the response will contain an object representing the background job that was created.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: id (required), account, confirm, payload, +2 more.

copy_mediaCopy MediaA
Destructive

This endpoint copies a media and its assets to a destination folder (defaults to source media).

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_hashed_id (required), owner, account, confirm, +3 more.

create_allowed_domainCreate Allowed DomainA
Destructive

Creates an allowed domain for the account.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: domain, account, confirm, payload, +1 more.

create_brandCreate BrandA
Destructive

Creates a brand. A brand is a saved set of branding options (colors, fonts, logos, and layout) that can then be applied to media, folders, and channels. name is required; every other field is optional and left unset when omitted.

A new brand isn't applied to anything : it has no effect until you apply it to a resource with POST /brands/{brandId}/apply.

Accounts whose plan doesn't include multiple brands can only hold one brand.

Requires api token with one of the following permissions

All data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: name, account, confirm, payload, +11 more.

create_bulk_actionsCreate Bulk ActionsA
Destructive

Submits a batch of up to 1000 create, update, delete, and move actions to be processed asynchronously. Returns a background job status whose Show endpoint reports aggregate progress and per-action results, including the hashed IDs of created records.

Supported resource types are media, folder, subfolder, channel, channel_episode, captions, and the ten customization_* concerns. A folder is a top-level folder (previously called a project); a subfolder is nested inside one and requires folder_id and name when created. A captions action operates on one caption track -- one media in one language.

Because caption actions carry SRT contents inline, they are the resource type most likely to reach the request body limit before the action cap. Purchasing captions is not available here -- it has its own endpoint.

A move action targets one media and accepts a destination folder_id and optional subfolder_id. Bulk moves can use different destinations and are not subject to the Move Media endpoint's 100-item limit or separate throttle.

Player customizations are addressed one concern at a time (customization_appearance, customization_playback, and so on), matching the Update Customizations endpoints; each accepts update only, takes the media's hashed ID as its id, and takes the same payload as its corresponding endpoint. There is no batch equivalent of the broad customize endpoint, so a batch always states which slice of the player it is changing.

A media update payload can also carry a custom_metadata object mapping field keys to the values to set (null clears a field; omitted fields are left untouched). Values are validated against each field's type exactly as the Set Custom Metadata Field Value endpoint validates them, and each write is recorded with its actor and source. Requires the custom metadata feature on the account; without it actions carrying custom_metadata fail individually.

Deleting a folder or subfolder also soft-deletes its media. An account owner or manager can restore that media from the trash until it purges. To keep the media when deleting a subfolder, use the Delete Subfolder endpoint; it moves the media to the folder's root level instead.

Each action in the batch is authorized and processed independently: failures (including authorization failures) are reported per action and do not prevent other actions from completing. Media creation is not supported -- uploads and URL imports have their own endpoints.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: job, account, actions, confirm, +2 more.

create_bulk_purchaseCreate Bulk PurchaseA
Destructive

Submits either an actions array of up to 1000 orders or one job that can resolve to up to 5000 media. Orders are placed asynchronously. Returns a background job status whose Show endpoint reports aggregate progress and per-order results.

Orders in the batch can incur charges, so a saved credit card is required. Supported resource types are captions (Wistia-generated English captions), localization (a dubbed, language-specific version of a media), extended_audio_description, and text_translation (the media's transcript translated into another language, audio untouched). Each order's id is the hashed ID of the media to order for.

What an order costs depends on the account, not on this endpoint. Automated captions are included at no cost on plans that provide them and billed at the account's configured per-minute rate otherwise; human-reviewed captions bill per minute at the account's standard or rush rate; localizations bill per minute once the account's free-dub allowance is used up; text translations bill as an overage once the account's included translation minutes are used up. Check the account's plan and billing settings for its actual rates.

Orders are priced and placed individually: failures -- an ineligible media, a language that already has a localization, an account not entitled to buy -- are reported per order and do not stop the rest of the batch. Pricing and eligibility match the equivalent single-media endpoints exactly.

Use the Create Bulk Actions endpoint for create, update, and delete work; it does not accept purchase, and this endpoint accepts nothing else.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: job, account, actions, confirm, +2 more.

create_captionsCreate CaptionsA
Destructive

Adds captions to a specified media by providing an SRT file or its contents directly.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_hashed_id (required), account, confirm, payload, +3 more.

create_channelCreate ChannelA
Destructive

Creates a channel. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: name, account, confirm, payload, +6 more.

create_channel_collaboratorCreate Channel CollaboratorA
Destructive

Invites a collaborator to a channel by specifying their email address and role. Creates a new contact if one doesn't exist with that email.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: channel_hashed_id (required), role, email, account, +3 more.

create_channel_episodeCreate Channel EpisodeA
Destructive

Creates a new channel episode in a channel.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: channel_hashed_id (required), title, account, confirm, +8 more.

create_customizationsCreate CustomizationsA
Destructive

Set customizations for a video. Replaces the customizations explicitly set for this video.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_id (required), seo, time, email, +39 more.

create_expiring_access_tokenCreate Expiring Access TokenA
Destructive
🚫 Alert
This API is still under development and can change at any time.

This endpoint is for creating expiring access tokens which can be used for some iframe embeds and, when granted the all:delegate_to_contact_permissions scope, for REST API requests authorized by the token's authorizations.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: secret_result_file (required), account, confirm, payload, +2 more.

create_folderCreate FolderA
Destructive

Creates a new folder (previously called project). If the folder is created successfully the Location HTTP header will point to the new folder.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an account authorization granting the create-folders permission can also be used. The folder's creator is the contact behind the token (the account owner for a token minted from an account-level token); adminEmail selects the folder's administrator (defaults to the account owner). personalLibrary creates the folder inside the My Library of the contact behind the token. The new folder is not covered by the token that created it, so follow-up requests need a token whose authorizations name the returned hashed id. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: name, public, account, confirm, +7 more.

create_folder_sharingCreate Folder SharingA
Destructive

Creates a new sharing object for a folder by specifying the email of the person to share with and other optional parameters.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: folder_id (required), account, confirm, payload, +2 more.

create_localizationCreate LocalizationA
Destructive

Creates a new localization.

Creating a localization can incur a charge on your account. Accounts get a free-dub allowance; once it is used up, dubs bill per minute at the account's configured rate.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_hashed_id (required), account, confirm, payload, +3 more.

create_media_from_trimsCreate Media from TrimsA
Destructive

Creates a new media that trims off parts of an existing media.

By default, the trims parameter specifies time ranges to remove from the media. When keep_trims is set to true, the trims parameter instead specifies time ranges to keep in the media.

NOTE: currently this endpoint only supports trimming video files.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_hashed_id (required), trims, account, confirm, +3 more.

create_review_bundleCreate Review BundleA
Destructive

Creates a review bundle from a set of existing media, producing a single link that can be shared for review. The media to include are specified by their hashed IDs and must already belong to the account. The media can come from any folder. Review Bundles are limited to 25 media.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: name, account, confirm, payload, +3 more.

create_subfolderCreate SubfolderA
Destructive

Creates a new subfolder within a folder. The subfolder will be created with the next available position.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization granting the update permission on this folder can also be used. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: folder_id (required), name, account, confirm, +3 more.

create_tagsCreate TagsA
Destructive

Creates a new tag.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: name, account, confirm, payload, +1 more.

create_webinarCreate WebinarA
Destructive

Creates a new webinar.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: title, account, confirm, payload, +6 more.

create_webinar_collaboratorCreate Webinar CollaboratorA
Destructive

Invites a collaborator (producer) to a webinar by specifying their email address. Creates a new contact if one doesn't exist with that email. Note that viewers cannot be webinar collaborators.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: webinar_id (required), email, account, confirm, +2 more.

create_webinar_registrationCreate Webinar RegistrationA
Destructive

Register a person for a webinar by providing their email, first name, and last name.

This endpoint generates a unique visitor key and returns a personalized webinar URL for the registrant.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: webinar_id (required), email, account, confirm, +4 more.

delete_allowed_domainDelete Allowed DomainA
Destructive

Deletes an allowed domain from the account.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: domain (required), account, confirm.

delete_brandDelete BrandA
Destructive

Deletes a brand. Anything the brand was applied to falls back to the account-level default brand, unless sync_to_customizations is set, in which case the brand's values are written into each item's own customizations first so they keep their current look.

The account-level default brand (is_default: true) can't be deleted.

Requires api token with one of the following permissions

All data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: brand_id (required), account, confirm, sync_to_customizations.

delete_captionsDelete CaptionsA
Destructive

Removes the captions file from a media for the specified language.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: language_code (required), media_hashed_id (required), account, confirm.

delete_channelDelete ChannelB
Destructive

Deletes a channel. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: channel_hashed_id (required), account, confirm.

delete_channel_collaboratorDelete Channel CollaboratorA
Destructive

Removes a collaborator's access to a channel.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: id (required), channel_hashed_id (required), account, confirm.

delete_channel_episodeDelete Channel EpisodeA
Destructive

Deletes an existing channel episode in a channel.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: channel_episode_hashed_id (required), account, confirm.

delete_customizationsDelete CustomizationsA
Destructive

Deletes all explicit customizations for a video, making it act as if it has never been customized.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_id (required), account, confirm.

delete_folderDelete FolderA
Destructive

Deletes a folder (previously called project) and the media inside it.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization granting the destroy permission on this folder can also be used. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: id (required), account, confirm.

delete_folder_sharingDelete Folder SharingA
Destructive

Deletes a sharing on a folder.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: folder_id (required), sharing_id (required), account, confirm.

delete_localizationDelete LocalizationA
Destructive

Deletes a localization.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_hashed_id (required), localization_hashed_id (required), account, confirm.

delete_mediaDelete MediaA
Destructive

Deletes a media. Deleted media moves to the account's Recently Deleted area, where it can be restored until the account's restore window ends, after which it is permanently purged.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization granting the destroy permission on this media can also be used. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_hashed_id (required), account, confirm.

delete_media_extended_audio_descriptionDelete Media Extended Audio DescriptionA
Destructive

Deletes an extended audio description by its hashed id. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: id (required), account, confirm.

delete_review_bundleDelete Review BundleA
Destructive

Permanently deletes a review bundle, identified by its hashed id. This removes the bundle and its shared review link; the media it contained are not deleted. This action cannot be undone.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: review_bundle_hashed_id (required), account, confirm.

delete_subfolderDelete SubfolderA
Destructive

Deletes one subfolder and moves its media to the folder's root level. The subfolder is soft-deleted and is no longer accessible via the API. To delete multiple subfolders and their media, use the Bulk Delete Subfolders endpoint.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization granting the update permission on this folder can also be used. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: folder_id (required), subfolder_id (required), account, confirm.

delete_tagDelete TagA
Destructive

Deletes a tag

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: name (required), account, confirm.

delete_webinarDelete WebinarA
Destructive

Deletes an existing webinar.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: id (required), account, confirm.

delete_webinar_collaboratorDelete Webinar CollaboratorA
Destructive

Removes a collaborator's producer access to a webinar.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: id (required), webinar_id (required), account, confirm.

dismiss_desktop_install_promptDismiss Desktop Install PromptB
Destructive

Marks the current contact's macOS install-prompt modal as dismissed. Called by the SPA when a teammate invited via the Wistia desktop app closes the "Wistia is even better on your Mac" modal : the modal never shows again for that contact.

Idempotent: a repeat call returns the timestamp of the first dismissal.

Requires api token with one of the following permissions

Read, update & delete anything

Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: account, confirm.

edit_captions_textEdit Captions TextA
Destructive

Applies targeted find-and-replace corrections to a media's transcript for the specified language, preserving the timings of unchanged words. The whole batch is applied atomically against a specific caption version, or nothing is.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: language_code (required), media_hashed_id (required), edits, account, +4 more.

find_caption_matchesFind Caption MatchesA
Read-onlyIdempotent

Finds exact text in caption tracks without modifying them. Matching uses the same normalization, composite-media boundaries, and time coordinates as the targeted caption edit endpoint. Fuzzy alternatives are returned separately as suggestions and are never reported as exact matches. A resolved match means the wording was located; a later write can still fail authorization, version, or edit-boundary checks.

When more than 10 exact matches exist, use the one-based occurrence parameter to retrieve a specific later match.

Authentication and request validation failures apply to the whole request. Missing, inaccessible, or otherwise unreadable media are reported as per-media statuses without exposing whether an inaccessible ID exists.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Read-only account operation.

Inputs: end_ms, account, payload, start_ms, +5 more.

find_media_by_embed_locationFind Media By Embed LocationA
Read-onlyIdempotent

Find the media embedded at a given URL. Returns the hashed IDs of the account's media that recorded activity at that embed location during the date range, ranked by plays. The resulting hashed IDs can be passed to other endpoints, such as Show Account Top Content's hashed_ids[] filter, to fetch analytics for those media.

The domain of embed_url is always matched exactly. Its path is matched exactly by default, or as a prefix with path_match=prefix (e.g. /pricing also matching /pricing/plans). A path that is empty or / is ignored, returning media across all paths on the domain.

Embed location data is retained for 6 months; a start_date older than that returns a 422 error. When start_date and end_date are omitted, the full 6-month queryable window is used.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: embed_url (required), account, end_date, per_page, +2 more.

get_access_customizationsShow Access CustomizationsA
Read-onlyIdempotent

Fetches the explicitly-set password-protection settings for the video, including the stored password.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account.

get_accessibility_customizationsShow Accessibility CustomizationsB
Read-onlyIdempotent

Fetches the explicitly-set accessibility customizations (caption display and styling, transcript display, and audio description) for the video.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account.

get_accountGet Current AccountA
Read-onlyIdempotent

Retrieves a summary of the Wistia account including account name, description, URL and counts of records.

Requires api token with one of the following permissions

(any scope allowed)

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: account.

get_account_analyticsShow Account AnalyticsA
Read-onlyIdempotent

Retrieve aggregate analytics for the entire account over a date range. This endpoint provides Bottler-powered analytics across all of the account's media including plays, loads, engagement rate, play rate, and conversion metrics.

The date range between start_date and end_date must not exceed 2 years.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: end_date (required), start_date (required), account.

get_account_analytics_timeseriesShow Account Analytics TimeseriesA
Read-onlyIdempotent

Retrieve analytics timeseries data for the entire account over a date range with configurable granularity. Returns an array of timestamped metric buckets aggregated across all of the account's media.

The date range between start_date and end_date must not exceed 2 years.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: end_date (required), start_date (required), granularity (required), account.

get_account_embed_locationsShow Account Embed LocationsA
Read-onlyIdempotent

Retrieve embed location analytics for the entire account. Returns a list of domains where the account's media are embedded, ranked by the chosen metric.

The date range between start_date and end_date must not exceed 2 years.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: end_date (required), start_date (required), account, sort_by, +2 more.

get_account_statsShow Current Account StatsA
Read-onlyIdempotent

Retrieve account-wide video stats. Get statistics like the number of video loads, plays, and hours watched for the entire account.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: account.

get_account_stats_by_dateShow Account Stats by DateA
Read-onlyIdempotent

Retrieve account-wide stats organized by day, between a start and end date parameter (inclusive). If start and end date are not provided, defaults to yesterday and today.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: account, end_date, start_date.

get_account_top_contentShow Account Top ContentA
Read-onlyIdempotent

Rank the account's content by a chosen metric over a date range. Returns the top media, channels, or folders (controlled by group_by) with their analytics, answering questions like "what were my most-played videos last month?".

Optionally pass hashed_ids to scope the ranking to a specific set of media instead of the whole account : useful for fetching analytics for a known list of videos, still sorted by sort_by.

The date range between start_date and end_date must not exceed 2 years.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: end_date (required), start_date (required), account, sort_by, +4 more.

get_account_usageGet Account UsageA
Read-onlyIdempotent

Retrieves plan, usage, and limit information for the current account.

The response includes plan tier, upload eligibility, and links to billing pages. Usage and limit details (media counts, storage, seats, bandwidth) are only visible to account owners and managers : other contacts receive null for the limits field.

Requires api token with one of the following permissions

(any scope allowed)

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: account.

get_allowed_domainShow Allowed DomainB
Read-onlyIdempotent

Returns the details of an allowed domain.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: domain (required), account.

get_appearance_customizationsShow Appearance CustomizationsA
Read-onlyIdempotent

Fetches the explicitly-set appearance customizations (player color, gradient, rounded corners, control contrast, and customer logo) for the video.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account.

get_brandShow BrandB
Read-onlyIdempotent

Returns the brand with the given id.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: brand_id (required), account.

get_brand_kit_colorsGet Brand Kit ColorsA
Read-onlyIdempotent

Retrieves the current account's brand colors for the Wistia desktop app's background picker.

colors lists solid colors: every brand kit's color tokens (the colors the web editor offers as "Brand colors"), then each brand's primary and page background color when it is solid, default brand first. Values are six-digit hex strings, and a repeated color is listed once. Tokens whose value isn't a hex color are left out. An account without a brand kit gets its player color in place of the kit, which is what its default brand kit would hold.

brand_gradients lists each brand's primary and page background color that is set to a gradient, as color stops sorted by position, default brand first. Stops whose color isn't a hex color are left out, and a gradient with fewer than two hex stops left isn't listed.

Requires api token with one of the following permissions

(any scope allowed)

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: account.

get_brand_preloadGet Brand PreloadA
Read-onlyIdempotent

Retrieves Brandfetch-derived brand info for the current account's contact domain, plus a boolean indicating whether the account already has any brand kits configured. Used by Glass onboarding to preload the brand kit for new signups on business-email domains.

Returns brandfetch_brand with nil primary_color/logo/domain for free-mail domains, Wistia's own domain, when the Brandfetch feature flag is off, or when Brandfetch has no data : the caller silently skips the preload in every such case. The object itself is always present; only its fields go nil.

Requires api token with one of the following permissions

(any scope allowed)

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: account.

get_captionsShow CaptionsA
Read-onlyIdempotent

Returns a media's captions in the specified language. Supports multiple formats: JSON (default), SRT, VTT, and TXT. Use file extensions (.srt, .vtt, .txt) or Accept headers to specify format.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: language_code (required), media_hashed_id (required), account, include, +1 more.

get_channelShow ChannelA
Read-onlyIdempotent

Returns the Channel associated with the hashedId.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: channel_hashed_id (required), account.

get_channel_episodeShow Channel EpisodeA
Read-onlyIdempotent

Returns the Channel Episode associated with a channel hashed id and channel episode hashed id.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: channel_hashed_id (required), channel_episode_id (required), account.

get_chapters_customizationsShow Chapters CustomizationsA
Read-onlyIdempotent

Fetches the explicitly-set chapter customizations (the chapter list and its visibility) for the media.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account.

get_credit_balanceGet Credit BalanceA
Read-onlyIdempotent

Retrieves the current account's available credit balance and expected next recurring credit grant time.

The balance is a near-real-time hint and can lag one in-flight metered operation. A 402 response from an operation is authoritative when deciding whether more credits are required. Negative ledger balances are returned as 0 available credits.

next_grant_at comes from the account's billing schedule, not an existing grant's expiration. It is null when no scheduled grant can be determined. Processing may occur later, and other grants may arrive sooner.

Requires api token with one of the following permissions

(any scope allowed)

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. The account is always derived from the authenticated token; this endpoint does not accept an account identifier. Read-only account operation.

Inputs: account.

get_current_tokenGet Current TokenA
Read-onlyIdempotent

Retrieves a summary of the token used to make the API request. This endpoint can primarily be used to debug permission issues with the API. Read-only account operation.

Inputs: account.

get_customizationsShow CustomizationsB
Read-onlyIdempotent

Fetches explicitly defined customizations for the video.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account.

get_engagement_customizationsShow Engagement CustomizationsA
Read-onlyIdempotent

Fetches the explicitly-set engagement customizations (the end/pause Call To Action and timed annotation links) for the video.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account.

get_eventShow EventA
Read-onlyIdempotent

Retrieve information for a single event. Please note that due to our data retention policy, only events from the last 2 years are available.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: event_key (required), account.

get_folderShow FolderB
Read-onlyIdempotent

Retrieves a single folder (previously called project).

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization for this folder can also be used; any permission granted on a folder allows showing it. Read-only account operation.

Inputs: id (required), account.

get_folder_sharingShow Folder SharingA
Read-onlyIdempotent

Retrieves the details of a specific sharing object for a given folder.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: folder_id (required), sharing_id (required), account.

get_job_statusShow Background Job StatusA
Read-onlyIdempotent

Retrieves the status of a background job.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: background_job_status_id (required), account.

get_lead_capture_customizationsShow Lead Capture CustomizationsB
Read-onlyIdempotent

Fetches the explicitly-set lead-capture plugins (Turnstile, Wistia Form, and HubSpot/Marketo/Pardot form embeds) for the video.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account.

get_localizationShow LocalizationB
Read-onlyIdempotent

Obtain detailed information about a localization.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_hashed_id (required), localization_hashed_id (required), account, include_transcript.

get_mediaShow MediaA
Read-onlyIdempotent

Fetches a single media by its hashed id.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization for this media can also be used; any permission granted on a media allows showing it. Read-only account operation.

Inputs: media_hashed_id (required), account, include, description_format.

get_media_analyticsShow Media AnalyticsA
Read-onlyIdempotent

Retrieve aggregate analytics for a video over a date range. This endpoint provides Bottler-powered analytics including plays, loads, engagement rate, play rate, and conversion metrics.

The date range between start_date and end_date must not exceed 2 years.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: end_date (required), media_id (required), start_date (required), account.

get_media_analytics_timeseriesShow Media Analytics TimeseriesB
Read-onlyIdempotent

Retrieve analytics timeseries data for a video over a date range with configurable granularity. Returns an array of timestamped metric buckets.

The date range between start_date and end_date must not exceed 2 years.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: end_date (required), media_id (required), start_date (required), granularity (required), +1 more.

get_media_embed_locationsShow Media Embed LocationsA
Read-onlyIdempotent

Retrieve embed location analytics for a video. Returns a list of pages where the video is embedded, ranked by the chosen metric.

The date range between start_date and end_date must not exceed 2 years.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: end_date (required), media_id (required), start_date (required), account, +4 more.

get_media_embed_locations_timeseriesShow Media Embed Locations TimeseriesA
Read-onlyIdempotent

Retrieve timeseries analytics for a video broken down by embed location. Returns an array of timestamped buckets, each containing metrics for the top embed locations (ranked by the chosen metric) plus an "All other" entry aggregating the remaining locations.

The date range between start_date and end_date must not exceed 2 years.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: end_date (required), media_id (required), start_date (required), granularity (required), +4 more.

get_media_engagementShow Media EngagementB
Read-onlyIdempotent

Retrieve engagement data for a video. This endpoint provides engagement data for a specific video identified by its media-id.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account.

get_media_extended_audio_descriptionShow Media Extended Audio DescriptionA
Read-onlyIdempotent

Retrieves a single extended audio description by its hashed id, including download links. Read-only account operation.

Inputs: id (required), account.

get_media_form_conversionsShow Media Form ConversionsA
Read-onlyIdempotent

Retrieve form conversion data for a video. Returns a paginated list of form submissions with visitor details and timestamps.

The date range between start_date and end_date must not exceed 2 years.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: end_date (required), media_id (required), start_date (required), cursor, +2 more.

get_media_languagesShow Media LanguagesA
Read-onlyIdempotent

Retrieve language analytics for a video. Returns a breakdown of plays by viewer browser language, sorted by number of plays in descending order.

The date range between start_date and end_date must not exceed 2 years.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: end_date (required), media_id (required), start_date (required), account, +1 more.

get_media_statsShow Media Aggregated StatsB
Read-onlyIdempotent

Aggregated tracking statistics for a video embedded on your site.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_hashed_id (required), account.

get_media_stats_by_dateShow Media Stats by DateA
Read-onlyIdempotent

Retrieve stats for a media organized by day, between a start and end date paramater (inclusive). If start and end date are not provided, defaults to yesterday and today.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account, end_date, start_date.

get_media_stats_stats_mediaShow Media StatsB
Read-onlyIdempotent

Retrieve stats for a video. This endpoint provides statistics for a specific video identified by its media-id.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account.

get_media_traffic_breakdownShow Media Traffic BreakdownA
Read-onlyIdempotent

Retrieve traffic breakdown analytics for a video, grouped by a specified dimension such as UTM campaign, UTM source, UTM medium, referrer domain, or viewer screen size.

The date range between start_date and end_date must not exceed 2 years.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: end_date (required), group_by (required), media_id (required), start_date (required), +4 more.

get_order_statusGet Order StatusA
Read-onlyIdempotent

Returns the current status of an extended audio description order. Use the order id returned from the order endpoint to poll for status updates. Read-only account operation.

Inputs: id (required), account.

get_playback_customizationsShow Playback CustomizationsA
Read-onlyIdempotent

Fetches the explicitly-set playback customizations (autoplay, mute, controls visibility, player control buttons, end behavior, looping, quality bounds, and embed/runtime flags) for the video.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account.

get_project_statsShow Project StatsB
Read-onlyIdempotent

Retrieve stats for a project. This endpoint provides statistics for a specific project identified by its project-id.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: project_id (required), account.

get_sharing_customizationsShow Sharing CustomizationsA
Read-onlyIdempotent

Fetches the explicitly-set sharing customizations (the social/embed/download share bar: enabled channels, tweet text, download type, and page URL/title) for the video.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account.

get_subfolderShow SubfolderA
Read-onlyIdempotent

Retrieves detailed information about a specific subfolder, including all media contained within it.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization naming this folder (any permission) can also be used. The embedded media are limited to those the token's authorizations name. Read-only account operation.

Inputs: folder_id (required), subfolder_id (required), account, description_format.

get_thumbnail_customizationsShow Thumbnail CustomizationsA
Read-onlyIdempotent

Fetches the explicitly-set thumbnail customizations (still image URL, alt text, fit strategy, and the looping video thumbnail / text-overlay plugins) for the video.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_id (required), account.

get_visitorShow VisitorA
Read-onlyIdempotent

This endpoint provides detailed information about a specific visitor.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: visitor_key (required), account.

get_webinarShow WebinarB
Read-onlyIdempotent

Returns the webinar associated with the hashed id.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: id (required), account.

get_webinar_analyticsShow Webinar AnalyticsA
Read-onlyIdempotent

Retrieve aggregate analytics for a webinar. This endpoint provides Bottler-powered analytics including registrations, attendance, engagement, chat activity, and poll results.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: webinar_id (required), account, include_post_event, post_event_end_date, +1 more.

get_webinar_audienceShow Webinar AudienceA
Read-onlyIdempotent

Retrieve audience data for a webinar. Returns a paginated list of registrants with their attendance status, engagement metrics, attribution data, and per-attendee histograms.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: webinar_id (required), cursor, account, per_page.

get_webinar_histogramsShow Webinar HistogramsA
Read-onlyIdempotent

Retrieve engagement histogram data for a webinar. Returns arrays of per-time-bucket counts for attendees, chat activity, and visual focus, useful for rendering engagement visualizations.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: webinar_id (required), account.

get_webinar_registration_timeseriesShow Webinar Registration TimeseriesA
Read-onlyIdempotent

Retrieve registration timeseries data for a webinar with configurable granularity. Returns an array of timestamped registration metric buckets including impressions, registrations, and completion rates.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: webinar_id (required), granularity (required), account, include_post_event, +2 more.

get_webinar_traffic_breakdownShow Webinar Traffic BreakdownA
Read-onlyIdempotent

Retrieve traffic breakdown analytics for a webinar, grouped by a specified dimension such as UTM campaign, UTM source, UTM medium, or referrer domain.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: group_by (required), webinar_id (required), account, sort_by, +1 more.

import_media_from_urlImport Media from URLA
Destructive

This endpoint imports a media file from a given URL. The import is processed asynchronously and will return a background_job_status object rather than the typical Media response object. You can poll the background job status endpoint to check on the progress of the import.

If no folder_id is provided, a new folder called "Untitled Folder" will be created and the imported media will be placed there.

The URL must be publicly accessible : Wistia's servers need to be able to fetch the file directly.

Note: imports from certain domains (e.g. vimeo.com, wistia.com) are not permitted.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: url, account, confirm, payload, +2 more.

invite_contactsInvite ContactsA
Destructive

Invites one or more people to the account by email. Accepts a comma/whitespace/newline-separated list; each entry becomes a new contact if one does not already exist for that email.

Requires api token with one of the following permissions

Read, update & delete anything

Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: account, confirm, payload, contacts, +1 more.

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.

Inputs: no named parameters.

list_all_captionsList CaptionsA
Read-onlyIdempotent

Lists captions belonging to the account. Results can be narrowed to a specific media with media_id, or to several media and languages at once with media_ids[] and languages[]. Each caption includes its text, so combining these filters with pagination fetches transcripts for many media in a few requests. Pass include=metadata to omit transcript text when only track and language information is needed.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: page, cursor, account, include, +8 more.

list_allowed_domainsList Allowed DomainsA
Read-onlyIdempotent

Lists allowed domains belonging to the account.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: page, cursor, account, sort_by, +4 more.

list_brandsList BrandsA
Read-onlyIdempotent

Lists the brands belonging to the account. A brand is a saved set of branding options (colors, fonts, logos, and layout) that can be applied to media, folders, and channels. The account-level default brand is flagged with is_default, and styles everything that has no brand of its own.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: page, cursor, account, sort_by, +4 more.

list_captionsList Captions by MediaB
Read-onlyIdempotent

Lists captions belonging to a specific media.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_hashed_id (required), account.

list_channel_collaboratorsList Channel CollaboratorsA
Read-onlyIdempotent

Lists the collaborators (contacts and contact groups) that have been granted access to a channel.

Results are scoped to what the authenticated user is allowed to see: account owners and managers see all collaborators, channel admins see all collaborators on their channels, and everyone else sees only the roles that grant them access.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: channel_hashed_id (required), page, cursor, account, +5 more.

list_channel_episodesList Channel EpisodesA
Read-onlyIdempotent

Lists Channel Episodes belonging to an account. This endpoint can also be used to do a batch fetch based off of the hashed id.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: page, title, cursor, account, +9 more.

list_channel_episodes_by_channelList Channel Episodes by ChannelB
Read-onlyIdempotent

Lists Channel Episodes belonging to the channel passed in the path.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: channel_hashed_id (required), page, title, cursor, +9 more.

list_channelsList ChannelsA
Read-onlyIdempotent

Lists all Channels belonging to an account. This endpoint can also be used to do a batch fetch based off of the hashed id.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: page, cursor, account, sort_by, +5 more.

list_deleted_mediaList Deleted MediaA
Read-onlyIdempotent

Lists media that has been soft-deleted and is still inside the account's restore window. Media is listed only while it can still be restored : 30 days on most plans, 14 on free plans. After which it is permanently purged.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: page, cursor, account, sort_by, +5 more.

list_eventsList EventsB
Read-onlyIdempotent

Retrieve a list of events. Please note that due to our data retention policy, only events from the last 2 years are available.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: page, account, end_date, media_id, +5 more.

list_foldersList FoldersA
Read-onlyIdempotent

Lists folders (previously called projects) belonging to the account. My Library folders are not included.

For tokens scoped to a specific user (all:delegate_to_contact_permissions), results are limited to folders that user can see in their content library: folders shared with them directly, through a contact group, or with the whole account (owners and managers see every folder). Public (unlocked) folders the user has no sharing on remain viewable by link but are not listed.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope can also be used. Results are limited to the folders its authorizations name (any permission granted on a folder qualifies it), filtered as they would be for the contact the token was created for. Read-only account operation.

Inputs: page, cursor, account, sort_by, +5 more.

list_folder_sharingsList Folder SharingsB
Read-onlyIdempotent

Lists the sharings of contacts and contact groups on a folder.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: folder_id (required), page, cursor, account, +6 more.

list_localizationsList LocalizationsA
Read-onlyIdempotent

Lists all the localizations for a media.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: media_hashed_id (required), account, include_transcript.

list_mediaList MediaA
Read-onlyIdempotent

Lists the media belonging to the account. This endpoint can also be used to do a batch fetch based off of the hashed id.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: name, page, tags, type, +12 more.

list_media_extended_audio_descriptionsList Media Extended Audio DescriptionsC
Read-onlyIdempotent

Lists all extended audio descriptions belonging to the account. Supports pagination and sorting. Read-only account operation.

Inputs: page, cursor, account, sort_by, +5 more.

list_review_bundlesList Review BundlesA
Read-onlyIdempotent

Lists review bundles belonging to an account. This endpoint can also be used to do a batch fetch based off of the hashed id, or to find the bundles that include a given media or any media from a folder.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: name, page, cursor, account, +8 more.

list_speakersList SpeakersA
Read-onlyIdempotent

Lists reusable speaker profiles belonging to the account.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. View-only contacts cannot list speaker profiles. Read-only account operation.

Inputs: name, page, cursor, account, +5 more.

list_subfoldersList SubfoldersB
Read-onlyIdempotent

Lists subfolders in a specific folder.

Requires api token with one of the following permissions

Read all folder and media data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization naming this folder (any permission) can also be used; it lists the folder's subfolders. Read-only account operation.

Inputs: folder_id (required), page, cursor, account, +6 more.

list_tagsList TagsB
Read-onlyIdempotent

Lists tags belonging to the account.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: page, cursor, account, sort_by, +4 more.

list_visitorsList VisitorsB
Read-onlyIdempotent

This endpoint provides a list of visitors that have watched videos in your account.

Requires api token with one of the following permissions

Read detailed stats

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: page, filter, search, account, +3 more.

list_webinar_collaboratorsList Webinar CollaboratorsA
Read-onlyIdempotent

Lists the collaborators (contacts and contact groups) that have been granted producer access to a webinar.

Results are scoped to what the authenticated user is allowed to see: account owners, managers, and the webinar's producers see all collaborators; everyone else sees an empty list.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: webinar_id (required), page, cursor, account, +5 more.

list_webinar_registrationsList Webinar RegistrationsA
Read-onlyIdempotent

Retrieve a paginated list of registrations for a webinar. Returns contact information, attendance status, engagement metrics, and attribution data for each registrant.

Pagination uses cursor-based pagination with a page_info object in the response rather than per-record cursors. Use page_info.end_cursor as the cursor parameter to fetch the next page.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: webinar_id (required), cursor, emails, account, +4 more.

list_webinarsList WebinarsA
Read-onlyIdempotent

Lists webinars belonging to the account. This endpoint can also be used to do a batch fetch based off of the hashed id.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: page, cursor, account, sort_by, +6 more.

move_mediaMove MediaA
Destructive

Moves up to 100 media to a folder and optional subfolder. The subfolder must belong to the specified folder.

This endpoint allows 10 requests per 5 minutes, separate from the general API rate limit. Returns a Background Job because the move is asynchronous.

For more than 100 media, multiple destinations, or mixed actions, use the Create Bulk Actions endpoint with move actions.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and authorizations granting the update permission on every media being moved and on the destination folder can also be used. subfolder_id is not available to expiring access tokens. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: account, confirm, payload, folder_id, +3 more.

order_extended_audio_descriptionOrder Extended Audio DescriptionA
Destructive

Orders an extended audio description for a media. The request will charge the credit card on the account when the order is ready. Only accounts on paid plans with the order_audio_descriptions feature can use this endpoint. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: account, confirm, enabled, payload, +5 more.

publish_channel_episodePublish Channel EpisodeB
Destructive

Publishes an existing channel episode in a channel.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: channel_episode_hashed_id (required), account, confirm, payload, +2 more.

purchase_captionsPurchase CaptionsA
Destructive

This method is for purchasing English captions for a media. The request will charge the credit card on the account if successful. A saved credit card is required to use this endpoint.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_hashed_id (required), rush, account, confirm, +4 more.

resolve_resource_urlsResolve Resource URLsA
Read-onlyIdempotent

Resolves a resource's hashed ID and type to its canonical app URL(s) : deep links an authorized user can open in the Wistia UI. The URL is only returned when the authenticated user is allowed to view the resource.

Requires api token with one of the following permissions

Read all data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Read-only account operation.

Inputs: type (required), hashed_id (required), account.

restore_deleted_mediaRestore Deleted MediaA
Destructive

Restores one or more soft-deleted media. By default each media returns to the folder it was deleted from; pass folder_id to restore them into a specific folder instead. Only media still inside the restore window can be recovered. The restore runs asynchronously and the response includes a background job status.

Requires api token with one of the following permissions

Upload and view media

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: account, confirm, payload, folder_id, +2 more.

restore_mediaRestore MediaA
Destructive

Restores archived medias to your account. This method accepts a list of up to 100 medias to restore per request. It processes requests asynchronously and will return a background_job_status object rather than the typical Media response object. Your account must have access to the Archiving feature to use this method.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: account, confirm, payload, folder_id, +2 more.

start_account_trialStart Account TrialA
Destructive

Starts a business-tier trial on the current account. The plan tier is hardcoded : the only caller is the Wistia desktop app's "Invite and start trial" onboarding CTA.

Requires the current contact to be authorized to start the trial via the account's AccountPolicy : otherwise returns 403.

Requires api token with one of the following permissions

Read, update & delete anything

Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: account, confirm.

swap_mediaSwap MediaA
Destructive

Swap one media with another media. This operation queues a background job to replace the original media with the replacement media while preserving the original media's hashed ID and URLs.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope can also be used when its authorizations grant the update permission on both the media being replaced and the replacement media. A replacement media the token does not name is treated as not found. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_hashed_id (required), account, confirm, payload, +2 more.

translate_mediaTranslate MediaA
Destructive

Translates the transcript for a media.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_hashed_id (required), account, confirm, payload, +3 more.

un_publish_channel_episodeUn-publish Channel EpisodeA
Destructive

Un-publishes an existing channel episode in a channel.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: channel_episode_hashed_id (required), account, confirm.

update_access_customizationsUpdate Access CustomizationsA
Destructive

Applies a partial update to a video's password-protection settings. Only the fields supplied are changed; sending a field as null deletes it.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_id (required), plugin, account, confirm, +4 more.

update_accessibility_customizationsUpdate Accessibility CustomizationsA
Destructive

Applies a partial update to a video's accessibility customizations. Only the fields supplied are changed; sending a field as null deletes it (reverting to the default).

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_id (required), plugin, account, confirm, +10 more.

update_appearance_customizationsUpdate Appearance CustomizationsA
Destructive

Applies a partial update to a video's appearance customizations. Only the fields supplied are changed; sending a field as null deletes it (reverting to the default).

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_id (required), account, confirm, payload, +12 more.

update_brandUpdate BrandA
Destructive

Updates a brand. Only the fields you send are changed; send an explicit null to unset one. Renaming the account-level default brand is ignored : its name is managed by Wistia.

Changes propagate to everything the brand is applied to.

Requires api token with one of the following permissions

All data

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: brand_id (required), name, account, confirm, +12 more.

update_brand_preloadUpdate Brand PreloadA
Destructive

Persists the account's default page logo (by Bakery hashed_id) and default player color. Both fields are optional independently : omit a field to leave that account setting untouched. Passing an empty string for selected_logo_hashed_id clears the logo.

Requires the OAuth contact to be an owner or manager of the account (or a Wistia admin) : mirrors the auth check on the underlying updateWtwBrandKitAccountSettings GraphQL mutation.

Deliberately narrower than the mutation: this endpoint does not create/update BrandKits or set body font family. Glass's onboarding customize step writes only these two fields; broader brand-kit editing continues to happen through the WTW web UI + GraphQL.

Requires api token with one of the following permissions

(any scope allowed)

Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: account, confirm, payload, payload_file, +2 more.

update_captionsUpdate CaptionsA
Destructive

This method is for replacing the captions on a video or audio media for the specified language.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: language_code (required), media_hashed_id (required), account, confirm, +3 more.

update_channelUpdate ChannelB
Destructive

Updates a channel. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: channel_hashed_id (required), name, account, confirm, +7 more.

update_channel_episodeUpdate Channel EpisodeA
Destructive

Updates an existing channel episode in a channel.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: channel_episode_hashed_id (required), title, account, confirm, +10 more.

update_chapters_customizationsUpdate Chapters CustomizationsA
Destructive

Applies a partial update to a media's chapter customizations. Only the fields supplied are changed; sending a field as null deletes it.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_id (required), plugin, account, confirm, +2 more.

update_customizationsUpdate CustomizationsA
Destructive

Allows for partial updates on a video’s customizations. If a value is null, then that key will be deleted from the saved customizations. If it is not null, that value will be set.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_id (required), seo, time, email, +39 more.

update_engagement_customizationsUpdate Engagement CustomizationsA
Destructive

Applies a partial update to a video's engagement customizations. Only the fields supplied are changed; sending a field as null deletes it (reverting to the default).

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_id (required), plugin, account, confirm, +2 more.

update_folderUpdate FolderA
Destructive

Updates a folder (previously called project)

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization granting the update permission on this folder can also be used. The update permission also allows creating, renaming and deleting the folder's subfolders and using the folder as the destination when moving or bulk-copying media the token may update. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: id (required), name, public, account, +6 more.

update_folder_sharingUpdate Folder SharingA
Destructive

Updates a sharing on a folder.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: folder_id (required), sharing_id (required), account, confirm, +3 more.

update_lead_capture_customizationsUpdate Lead Capture CustomizationsA
Destructive

Configures a single lead-capture provider for the video, mapping it to the appropriate underlying plugin. Only the selected provider is changed.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_id (required), account, confirm, enabled, +4 more.

update_mediaUpdate MediaB
Destructive

Updates the attributes on a media.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization granting the update permission on this media can also be used. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_hashed_id (required), name, tags, account, +6 more.

update_playback_customizationsUpdate Playback CustomizationsA
Destructive

Applies a partial update to a video's playback customizations. Only the fields supplied are changed; sending a field as null deletes it (reverting to the default).

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_id (required), hls, seo, time, +40 more.

update_sharing_customizationsUpdate Sharing CustomizationsA
Destructive

Applies a partial update to a video's sharing customizations. Only the fields supplied are changed; sending a field as null deletes it (reverting to the default).

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_id (required), plugin, account, confirm, +2 more.

update_subfolderUpdate SubfolderA
Destructive

Updates a subfolder's name and/or description.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token.

An expiring access token created with the all:delegate_to_contact_permissions scope and an authorization granting the update permission on this folder can also be used. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: folder_id (required), subfolder_id (required), name, account, +4 more.

update_thumbnail_customizationsUpdate Thumbnail CustomizationsA
Destructive

Applies a partial update to a video's thumbnail customizations. Only the fields supplied are changed; sending a field as null deletes it (reverting to the default).

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: media_id (required), plugin, account, confirm, +6 more.

update_webinarUpdate WebinarA
Destructive

Updates an existing webinar.

Requires api token with one of the following permissions

Read, update & delete anything

Tokens with the "Act with a team member's permissions" permission (all:delegate_to_contact_permissions scope) can also be used. Requests made with such a token are authorized using the permissions of the contact assigned to the token. Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: id (required), account, confirm, payload, +2 more.

upload_mediaUpload or Import MediaA
Destructive

Endpoint to upload media files from a local system or import from a web URL.

  • Use multipart/form-data with a file parameter to upload from local system

  • Use application/x-www-form-urlencoded with a url parameter to import from web URL Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: url, name, account, confirm, +6 more.

upload_media_fileUpload or Import Media from a local fileA
Destructive

Endpoint to upload media files from a local system or import from a web URL.

  • Use multipart/form-data with a file parameter to upload from local system

  • Use application/x-www-form-urlencoded with a url parameter to import from web URL Requires confirm=true for the requested mutation. May share access, notify people or incur provider charges.

Inputs: file, name, account, confirm, +5 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 169 tools

    Disambiguation3/5

    Most tools map to a distinct resource+action, but there are real overlaps: upload_media and upload_media_file appear to do the same thing, get_media_stats vs. get_media_stats_stats_media vs. get_media_stats_by_date blur together, and the granular update_*_customizations tools overlap with the broad create/update/delete_customizations plus create_bulk_actions. Descriptions help distinguish the customization sub-concerns, but an agent could easily misselect among the near-duplicates.

    Naming Consistency4/5

    The set overwhelmingly follows a predictable verb_noun snake_case pattern (list_*, get_*, create_*, update_*, delete_*, bulk_*, resolve_*). A few oddballs exist (search, swap_media, apply_brand, bulk_tag, find_caption_matches) and the artifact-like get_media_stats_stats_media hurts, but consistency is otherwise strong.

    Tool Count1/5

    169 tools is an extreme mismatch for a single MCP server; even a full-featured video platform wrapper is far past a usable, well-scoped surface and invites context bloat and misselection. The count is driven by exhaustive endpoint-by-endpoint mirroring rather than task-oriented design.

    Completeness5/5

    Coverage is essentially exhaustive: full CRUD/lifecycle for media, folders, subfolders, captions, localizations, channels, episodes, webinars, brands, tags, allowed domains, plus sharing, collaborators, bulk actions, stats and analytics. Almost no obvious gaps exist; only some edge workflows would require the raw API.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables AI agents to fully automate Appwrite backend operations with 143 tools covering databases, users, storage, functions, messaging, and more. Supports advanced features like GeoJSON attributes, file uploads, function deployment, and bulk operations.
      3 npm
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      Gives AI coding agents full control over a YouTube channel with 22 tools for channel management, videos, playlists, comments, search, analytics, thumbnails, and captions.
      23 npm
      3
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Exposes the full Chatwoot API as 129 tools for AI assistants, enabling account, contact, conversation, message, inbox, team, report, help center, automation, and custom attribute management, plus exclusive Kanban and scheduled message features.
      14 npm
      MIT