Wistia MCP Server
Provides tools for interacting with Wistia's API to manage media, folders, captions, channels, webinars, sharing, analytics, and uploads. Includes read and confirmed write operations, exact caption matching/editing, media upload via URL or local file, engagement and job status checks, and private account selection.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Wistia MCP Server find the video about onboarding and locate this wording in its captions"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Wistia MCP Server & CLI
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 --agentConfigure 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@latestThen 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 | Prompts and coverage | |
2 | CLI, MCP and desktop | |
3 | Token, version, permissions and quota | |
4 | Clients and OS | |
5 | Doctor and first read | |
6 | Inputs, JSON and scripting | |
7 | Real client usage evidence | |
8 | All tools and arguments | |
9 | Media, captions, sharing and webinars | |
10 | Bounded pages and async outcomes | |
11 | Named credentials | |
12 | Confirmation and private generated tokens | |
13 | Shared framework and regeneration | |
14 | Private data handling | |
15 | Credential, safety and tuning | |
16 | Upgrade and revoke | |
17 | Symptoms and remedies | |
18 | Official/community comparison | |
19 | Version history and migration | |
20 | 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 toolsManual 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 list3. Set up Wistia access
Get a narrowly scoped private token
Sign in to the intended Wistia account. An Account Owner creates account API tokens.
Open Account Settings > API, following Wistia's access-token instructions.
Create a named token with only the permissions your task needs. Copy the token when it is shown at creation and store it privately.
Set
WISTIA_TOKEN_FILEto an absolute token-only file outside repositories, or configureWISTIA_API_TOKENonly in private local client/shell settings.Run
wistia-cli doctor, thenwistia-cli doctor --networkfor 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 --agentNetwork 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 --agentIDs 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 |
| 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 |
|
| Write, confirms | See current endpoint/account permission |
|
| Write, confirms | See current endpoint/account permission |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Upload and view media |
|
| Read | Read all folder and media data |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | See current endpoint/account permission |
|
| Read | See current endpoint/account permission |
|
| Write, confirms | See current endpoint/account permission |
|
| Write, confirms | See current endpoint/account permission |
|
| Read | See current endpoint/account permission |
|
| Read | Read all data |
|
| Write, confirms | All data |
|
| Read | Read all data |
|
| Write, confirms | All data |
|
| Write, confirms | All data |
|
| Write, confirms | All data |
|
| Read | Read all data |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | See current endpoint/account permission |
|
| Read | Read all folder and media data |
|
| Write, confirms | See current endpoint/account permission |
|
| Write, confirms | See current endpoint/account permission |
|
| Read | Read all folder and media data |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all folder and media data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | (any scope allowed) |
|
| Read | (any scope allowed) |
|
| Read | (any scope allowed) |
|
| Read | (any scope allowed) |
|
| Write, confirms | (any scope allowed) |
|
| Read | (any scope allowed) |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Write, confirms | Read, update & delete anything |
|
| Read | See current endpoint/account permission |
|
| Read | Read all data |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all data |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read all data |
|
| Write, confirms | Read, update & delete anything |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
|
| Read | Read detailed stats |
| Local, no network | Read | No remote permission |
upload_media
wistia-cli upload-media
Argument | Required | Type | Details |
| No; body/guard rules still apply | string | The hashed id of the project to upload media into. |
| No; body/guard rules still apply | string | A display name to use for the media in Wistia. maxLength: |
| No; body/guard rules still apply | string | A description to use for the media in Wistia. |
| No; body/guard rules still apply | integer | A Wistia contact id. |
| No; body/guard rules still apply | string | The publicly accessible web location of the media file to import. format: |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: url.
upload_media_file
wistia-cli upload-media-file
Argument | Required | Type | Details |
| No; body/guard rules still apply | string | The hashed id of the project to upload media into. |
| No; body/guard rules still apply | string | A display name to use for the media in Wistia. maxLength: |
| No; body/guard rules still apply | string | A description to use for the media in Wistia. |
| No; body/guard rules still apply | integer | A Wistia contact id. |
| 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: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: file.
list_review_bundles
wistia-cli list-review-bundles
Argument | Required | Type | Details |
| No; body/guard rules still apply | array | Restrict the results to the review bundles with these hashed IDs. Array items: string. |
| No; body/guard rules still apply | string | Restrict the results to review bundles whose name contains this value (case-insensitive). |
| No; body/guard rules still apply | string | Restrict the results to review bundles that include the media with this 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. |
| No; body/guard rules still apply | string | Field to order by. The default is id. Values: |
| No; body/guard rules still apply | integer | Direction to order by. (0 = desc, 1 = asc; default is 1) Values: |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
create_review_bundle
wistia-cli create-review-bundle
Argument | Required | Type | Details |
| 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. |
| No; body/guard rules still apply | string | The bundle display name. |
| No; body/guard rules still apply | boolean | Whether the videos in the bundle can be downloaded. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: media_hashed_ids, name.
delete_review_bundle
wistia-cli delete-review-bundle
Argument | Required | Type | Details |
| Yes | string | The hashed id of the review bundle. minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| No; body/guard rules still apply | array | Restrict the results to the deleted media with these hashed IDs. Array items: string. |
| No; body/guard rules still apply | string | Field to order by. When omitted, results are ordered most-recently-deleted first. Values: |
| No; body/guard rules still apply | integer | Direction to order by. (0 = desc, 1 = asc; default is 1) Values: |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
restore_deleted_media
wistia-cli restore-deleted-media
Argument | Required | Type | Details |
| 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. |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: media_hashed_ids.
list_media
wistia-cli list-media
Argument | Required | Type | Details |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Ordering. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Ordering Sort Direction (0 = desc, 1 = asc; default is 1) Values: |
| No; body/guard rules still apply | string | A hashed ID specifying the folder from which you would like to get results. |
| No; body/guard rules still apply | string | Find a media or medias whose name exactly matches this parameter. |
| No; body/guard rules still apply | string | Format for media descriptions |
| No; body/guard rules still apply | string | Set to |
| No; body/guard rules still apply | string | A string specifying which type of media you would like to get. Values: |
| No; body/guard rules still apply | array | Find all of the medias by these hashed_ids. Array items: string. |
| No; body/guard rules still apply | array | Find all of the medias that match all of these tag names. Array items: string. |
| No; body/guard rules still apply | boolean | Filter by archived status. True will return only archived medias, while false will return only active medias. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
get_media
wistia-cli get-media
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the media. minLength: |
| No; body/guard rules still apply | string | Format for media descriptions |
| No; body/guard rules still apply | string | Set to |
| 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 |
| Yes | string | The hashed ID of the media. minLength: |
| No; body/guard rules still apply | string | The media’s new name. |
| 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. |
| No; body/guard rules still apply | string | A new description for this media. Accepts plain text or markdown. |
| 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. |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
delete_media
wistia-cli delete-media
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the media. minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | The hashed ID of the media. minLength: |
| 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. |
| 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: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
swap_media
wistia-cli swap-media
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the media to be replaced. minLength: |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: replacement_media_id.
get_media_stats
wistia-cli get-media-stats
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the video. minLength: |
| 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 |
| Yes | string | The hashed ID of the media. minLength: |
| 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. |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: target_language.
import_media_from_url
wistia-cli import-media-from-url
Argument | Required | Type | Details |
| No; body/guard rules still apply | string | The publicly accessible URL of the media file to import. format: |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: url.
archive_media
wistia-cli archive-media
Argument | Required | Type | Details |
| No; body/guard rules still apply | array | An array of the media hashed IDs to be archived. Array items: string. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: hashed_ids.
move_media
wistia-cli move-media
Argument | Required | Type | Details |
| No; body/guard rules still apply | array | An array of the media hashed IDs to be moved. Array items: string. |
| No; body/guard rules still apply | string | The hashed ID of the folder where you want the media moved. |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: hashed_ids, folder_id.
restore_media
wistia-cli restore-media
Argument | Required | Type | Details |
| No; body/guard rules still apply | array | An array of the media hashed IDs to be restored. Array items: string. |
| No; body/guard rules still apply | string | The hashed ID of the folder to restore the medias to. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: hashed_ids, folder_id.
bulk_copy_media
wistia-cli bulk-copy-media
Argument | Required | Type | Details |
| No; body/guard rules still apply | array | An array of the media hashed IDs to be copied. Array items: string. |
| No; body/guard rules still apply | string | The hashed ID of the destination folder where the copies will be placed. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: hashed_ids, folder_id.
get_customizations
wistia-cli get-customizations
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the video. minLength: |
| 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 |
| Yes | string | The hashed ID of the video. minLength: |
| 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. |
| 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. |
| 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. |
| No; body/guard rules still apply | boolean | If set to true, data for each viewing session will not be tracked. |
| No; body/guard rules still apply | string | Associate a specific email address with this video’s viewing sessions. |
| 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). |
| 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. |
| 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. |
| No; body/guard rules still apply | boolean | If set to true, the fullscreen button will be available as a video control. |
| 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. |
| No; body/guard rules still apply | boolean | If set to false, the key moments feature will be disabled. |
| No; body/guard rules still apply | boolean | If set to true, the video will start in a muted state. |
| No; body/guard rules still apply | boolean | If set to false, the playback speed controls in the settings menu will be hidden. |
| No; body/guard rules still apply | boolean | If set to true, the playbar will be available. If set to false, it will be hidden. |
| No; body/guard rules still apply | boolean | Indicates if the play button is visible. |
| No; body/guard rules still apply | string | Changes the base color of the player. Expects a hexadecimal rgb string. |
| 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. |
| 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. |
| No; body/guard rules still apply | boolean | If set to false, videos will play within the native mobile player. |
| No; body/guard rules still apply | boolean | If set to false, animations for the Pause and Play symbols will be removed. |
| 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. |
| No; body/guard rules still apply | object | Current schema |
| No; body/guard rules still apply | string | Sets the video’s preload property. Possible values are metadata, auto, none, true, and false. |
| No; body/guard rules still apply | boolean | If set to false, the video quality selector in the settings menu will be hidden. |
| No; body/guard rules still apply | integer | Specifies the maximum quality the video will play at. |
| No; body/guard rules still apply | integer | Specifies the minimum quality the video will play at. |
| 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. |
| 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. |
| No; body/guard rules still apply | boolean | If set to true, the settings control will be available. |
| 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. |
| No; body/guard rules still apply | boolean | Current schema |
| No; body/guard rules still apply | string | Overrides the thumbnail image that appears before the video plays. |
| No; body/guard rules still apply | string | Sets the starting time of the video. |
| No; body/guard rules still apply | string | Sets the Thumbnail Alt Text for the media. |
| 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. |
| No; body/guard rules still apply | number | Sets the volume of the video. |
| No; body/guard rules still apply | boolean | When set to true, a volume control is available over the video. |
| No; body/guard rules still apply | string | If set to transparent, the background behind the player will be transparent instead of black. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | object | Current schema |
| No | boolean | If set to false, removes the “Click to Play” button on video thumbnails. |
| No | object | Current schema |
| No | string | Current schema |
| No | boolean | Current schema |
| No | string | Current schema |
| No | integer | Current schema |
| No | object | Current schema |
| No | boolean | Current schema |
| No | array | Array items: object. |
| No | string | Current schema |
| No | string | Current schema |
| No | string | Current schema |
| No | string | Current schema |
| No | boolean | Current schema |
| No | object | Adds a Call To Action to your Video |
| No | boolean | If set to true, allows the video to be rewatched. |
| No | string | The URL of the text to be displayed. |
| No | string | The URL of the link to be displayed. |
| 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. |
| No | boolean | If set to true, the post-roll will automatically adjust its size. |
| No | object | Current schema |
| No | string | The background color of the post-roll. |
| 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". |
| No | boolean | If set to true, the post-roll is enabled. |
| No | string | The key used for tracking conversion opportunities. |
| No | object | Enables closed captions for the video |
| No | boolean | If set to true, the captions plugin is enabled and captions controls will be available to viewers. |
| 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 |
| Yes | string | The hashed ID of the video to be customized. minLength: |
| 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. |
| 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. |
| 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. |
| No; body/guard rules still apply | boolean | If set to true, data for each viewing session will not be tracked. |
| No; body/guard rules still apply | string | Associate a specific email address with this video’s viewing sessions. |
| 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). |
| 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. |
| 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. |
| No; body/guard rules still apply | boolean | If set to true, the fullscreen button will be available as a video control. |
| 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. |
| No; body/guard rules still apply | boolean | If set to false, the key moments feature will be disabled. |
| No; body/guard rules still apply | boolean | If set to true, the video will start in a muted state. |
| No; body/guard rules still apply | boolean | If set to false, the playback speed controls in the settings menu will be hidden. |
| No; body/guard rules still apply | boolean | If set to true, the playbar will be available. If set to false, it will be hidden. |
| No; body/guard rules still apply | boolean | Indicates if the play button is visible. |
| No; body/guard rules still apply | string | Changes the base color of the player. Expects a hexadecimal rgb string. |
| 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. |
| 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. |
| No; body/guard rules still apply | boolean | If set to false, videos will play within the native mobile player. |
| No; body/guard rules still apply | boolean | If set to false, animations for the Pause and Play symbols will be removed. |
| 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. |
| No; body/guard rules still apply | object | Current schema |
| No; body/guard rules still apply | string | Sets the video’s preload property. Possible values are metadata, auto, none, true, and false. |
| No; body/guard rules still apply | boolean | If set to false, the video quality selector in the settings menu will be hidden. |
| No; body/guard rules still apply | integer | Specifies the maximum quality the video will play at. |
| No; body/guard rules still apply | integer | Specifies the minimum quality the video will play at. |
| 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. |
| 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. |
| No; body/guard rules still apply | boolean | If set to true, the settings control will be available. |
| 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. |
| No; body/guard rules still apply | boolean | Current schema |
| No; body/guard rules still apply | string | Overrides the thumbnail image that appears before the video plays. |
| No; body/guard rules still apply | string | Sets the starting time of the video. |
| No; body/guard rules still apply | string | Sets the Thumbnail Alt Text for the media. |
| 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. |
| No; body/guard rules still apply | number | Sets the volume of the video. |
| No; body/guard rules still apply | boolean | When set to true, a volume control is available over the video. |
| No; body/guard rules still apply | string | If set to transparent, the background behind the player will be transparent instead of black. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | object | Current schema |
| No | boolean | If set to false, removes the “Click to Play” button on video thumbnails. |
| No | object | Current schema |
| No | string | Current schema |
| No | boolean | Current schema |
| No | string | Current schema |
| No | integer | Current schema |
| No | object | Current schema |
| No | boolean | Current schema |
| No | array | Array items: object. |
| No | string | Current schema |
| No | string | Current schema |
| No | string | Current schema |
| No | string | Current schema |
| No | boolean | Current schema |
| No | object | Adds a Call To Action to your Video |
| No | boolean | If set to true, allows the video to be rewatched. |
| No | string | The URL of the text to be displayed. |
| No | string | The URL of the link to be displayed. |
| 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. |
| No | boolean | If set to true, the post-roll will automatically adjust its size. |
| No | object | Current schema |
| No | string | The background color of the post-roll. |
| 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". |
| No | boolean | If set to true, the post-roll is enabled. |
| No | string | The key used for tracking conversion opportunities. |
| No | object | Enables closed captions for the video |
| No | boolean | If set to true, the captions plugin is enabled and captions controls will be available to viewers. |
| 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 |
| Yes | string | The hashed ID of the media whose customizations are to be deleted. minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | The hashed ID of the video. minLength: |
| 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 |
| Yes | string | The hashed ID of the video to be customized. minLength: |
| No; body/guard rules still apply | string | Base color of the player as a hexadecimal RGB string (no leading '#'). |
| No; body/guard rules still apply | object | Optional gradient applied to the player color. |
| No; body/guard rules still apply | integer | Corner radius of the player in pixels. 0 disables rounding. |
| No; body/guard rules still apply | boolean | If true, player controls render on an opaque background. |
| No; body/guard rules still apply | boolean | If true, control icons use a higher-contrast treatment. |
| No; body/guard rules still apply | boolean | If false, Wistia branding is hidden on the player. |
| No; body/guard rules still apply | boolean | If true, your customer logo is shown on the player. |
| No; body/guard rules still apply | string | URL of the customer logo image to display on the player. |
| No; body/guard rules still apply | string | URL the customer logo links to when clicked. |
| No; body/guard rules still apply | string | Placement of the customer logo on the player (e.g. top-right). |
| No; body/guard rules still apply | integer | Size of the customer logo as a percentage of the player. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | boolean | Whether the gradient is enabled. |
| 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 |
| Yes | string | The hashed ID of the video. minLength: |
| 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 |
| Yes | string | The hashed ID of the video to be customized. minLength: |
| 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. |
| 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". |
| No; body/guard rules still apply | boolean | If set to true, the video will start in a muted state. |
| No; body/guard rules still apply | number | Sets the volume of the video. |
| 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. |
| No; body/guard rules still apply | boolean | Indicates if the play button is visible. |
| No; body/guard rules still apply | boolean | If set to true, the small play button control is shown. |
| No; body/guard rules still apply | boolean | If set to true, the playbar will be available. If set to false, it will be hidden. |
| No; body/guard rules still apply | boolean | When set to true, a volume control is available over the video. |
| No; body/guard rules still apply | boolean | If set to true, the fullscreen button will be available as a video control. |
| No; body/guard rules still apply | boolean | If set to true, the settings control will be available. |
| No; body/guard rules still apply | boolean | If set to false, the playback speed controls in the settings menu will be hidden. |
| No; body/guard rules still apply | boolean | If set to false, the video quality selector in the settings menu will be hidden. |
| No; body/guard rules still apply | integer | Specifies the minimum quality the video will play at. |
| No; body/guard rules still apply | integer | Specifies the maximum quality the video will play at. |
| No; body/guard rules still apply | string | Sets the default video quality the video will play at. |
| No; body/guard rules still apply | boolean | If set to true, HLS adaptive bitrate streaming is enabled. |
| 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). |
| No; body/guard rules still apply | boolean | If set to false, videos will play within the native mobile player. |
| 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. |
| 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. |
| No; body/guard rules still apply | boolean | If set to false, animations for the Pause and Play symbols will be removed. |
| 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. |
| 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". |
| No; body/guard rules still apply | string | Sets the video’s preload property. Possible values are metadata, auto, none, true, and false. |
| No; body/guard rules still apply | string | Sets the starting time of the video. |
| No; body/guard rules still apply | boolean | If set to false, the key moments feature will be disabled. |
| 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. |
| 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. |
| 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. |
| No; body/guard rules still apply | string | If set to transparent, the background behind the player will be transparent instead of black. |
| No; body/guard rules still apply | string | Controls when the big play button appears, expressed as a string. |
| No; body/guard rules still apply | boolean | If set to true, the video is rendered as a spherical (360-degree) video. |
| No; body/guard rules still apply | boolean | If set to true, viewers can click to enable sound on a muted video. |
| 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. |
| No; body/guard rules still apply | boolean | If set to true, data for each viewing session will not be tracked. |
| 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. |
| No; body/guard rules still apply | string | Associate a specific email address with this video’s viewing sessions. |
| No; body/guard rules still apply | string | Google Analytics tracking configuration to associate with this video’s viewing sessions. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
get_thumbnail_customizations
wistia-cli get-thumbnail-customizations
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the video. minLength: |
| 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 |
| Yes | string | The hashed ID of the video to be customized. minLength: |
| No; body/guard rules still apply | string | Overrides the thumbnail image that appears before the video plays. |
| No; body/guard rules still apply | string | Alt text for the thumbnail image, used for accessibility. |
| 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. |
| No; body/guard rules still apply | string | Reference to the original, unaltered still image asset. |
| No; body/guard rules still apply | object | Container for thumbnail-related player plugin configurations. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | object | Looping video thumbnail (a short clip used as the poster). |
| No | boolean | If set to false, removes the “Click to Play” button on video thumbnails. |
| No | boolean | If set to true, shows a click-for-sound affordance on the video thumbnail. |
| No | string | The hashed ID of the media used as the looping video thumbnail. |
| No | string | Start time of the trimmed clip used as the video thumbnail. |
| No | string | End time of the trimmed clip used as the video thumbnail. |
| No | string | Priority mode controlling how the video thumbnail is loaded. |
| No | object | Text overlay rendered on top of the thumbnail. |
| No | boolean | If set to true, the text overlay is enabled. |
| No | string | The text displayed in the overlay. |
get_accessibility_customizations
wistia-cli get-accessibility-customizations
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the video. minLength: |
| 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 |
| Yes | string | The hashed ID of the video to be customized. minLength: |
| No; body/guard rules still apply | string | Background color of the captions as a hexadecimal RGB string (no leading '#'). |
| No; body/guard rules still apply | integer | Corner radius of the captions background in pixels. |
| No; body/guard rules still apply | string | Color of the captions text as a hexadecimal RGB string (no leading '#'). |
| No; body/guard rules still apply | integer | Size of the captions text in pixels. |
| No; body/guard rules still apply | string | Font family used for the captions text. |
| No; body/guard rules still apply | boolean | If true, the interactive transcript is shown alongside the video. |
| No; body/guard rules still apply | boolean | If true, speaker labels are displayed in the transcript. |
| No; body/guard rules still apply | boolean | If true, the audio description control is available to viewers. |
| No; body/guard rules still apply | object | Current schema |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | object | Modern captions plugin configuration. |
| No | boolean | If set to true, the captions plugin is enabled and captions controls will be available to viewers. |
| 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. |
| No | object | Enables closed captions for the video. |
| No | boolean | If set to true, the captions plugin is enabled and captions controls will be available to viewers. |
| 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. |
| No | object | Enables an extended audio description track for the video. |
| 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 |
| Yes | string | The hashed ID of the media. minLength: |
| 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 |
| Yes | string | The hashed ID of the media to be customized. minLength: |
| No; body/guard rules still apply | object | Current schema |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | object | Current schema |
| No | boolean | Whether chapters are enabled. |
| No | boolean | Whether the chapter list is visible when the player loads. |
| No | array | The ordered list of chapters. Array items: object. |
| No | string | Current schema |
| No | string | Current schema |
| No | string | Start time of the chapter, in seconds. |
| No | string | Current schema |
| No | object | Current schema |
| No | boolean | Current schema |
| No | boolean | Current schema |
| No | array | Array items: object. |
| No | string | Current schema |
| No | string | Current schema |
| No | string | Current schema |
| No | string | Current schema |
get_engagement_customizations
wistia-cli get-engagement-customizations
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the video. minLength: |
| 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 |
| Yes | string | The hashed ID of the video to be customized. minLength: |
| No; body/guard rules still apply | object | Container for engagement plugin configurations. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | object | Adds a Call To Action to your Video. |
| No | boolean | If set to true, allows the video to be rewatched. |
| No | string | The text to be displayed. |
| No | string | The URL of the link to be displayed. |
| 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. |
| No | boolean | If set to true, the post-roll will automatically adjust its size. |
| No | object | Current schema |
| No | string | The background color of the post-roll. |
| 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". |
| No | boolean | If set to true, the post-roll is enabled. |
| No | string | The key used for tracking conversion opportunities. |
| No | object | Timed annotation links that appear over the video at specific times. |
| No | boolean | If set to true, the timed annotation links are enabled. |
| No | array | The set of annotation links. Array items: object. |
| No | string | The text of the annotation link. |
| No | string | The URL the annotation link points to. |
| No | string | The time (in seconds) at which the link appears. |
| No | string | How long (in seconds) the link remains visible. |
get_related_media_customizations
wistia-cli get-related-media-customizations
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the video. minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
update_related_media_customizations
wistia-cli update-related-media-customizations
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the video to be customized. minLength: |
| No; body/guard rules still apply | object | Current schema |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | object | Configuration for the related-media recommendations plugin. |
| No | boolean | Whether related-media recommendations are enabled. |
| No | array | Ordered list of media hashed IDs to recommend. Array items: string. |
| No | boolean | If true, recommendations are shown when the video is paused. |
| No | boolean | If true, recommendations are shown when the video ends. |
| No | string | Label text displayed above the recommended media. |
| No | string | Text shown on the watch button for a recommended media. |
get_sharing_customizations
wistia-cli get-sharing-customizations
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the video. minLength: |
| 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 |
| Yes | string | The hashed ID of the video to be customized. minLength: |
| No; body/guard rules still apply | object | Current schema |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | object | Configuration for the share bar plugin. |
| No | boolean | Whether the share bar is enabled. |
| 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. |
| No | string | Default text used when sharing the video to X/Twitter. |
| No | string | Which download quality is offered to viewers. Only takes effect when "download" is included in the channels array. Values: |
| No | string | URL used in place of the default share URL. |
| No | string | URL of the page the share bar should reference. |
| No | string | Title of the page the share bar should reference. |
| 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 |
| Yes | string | The hashed ID of the video. minLength: |
| 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 |
| Yes | string | The hashed ID of the video to be customized. minLength: |
| No; body/guard rules still apply | string | Which lead-capture mechanism to configure. Values: |
| No; body/guard rules still apply | boolean | Whether the selected provider is turned on. Defaults to true. |
| No; body/guard rules still apply | object | Provider-specific settings. Only the fields relevant to the chosen provider are used. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: provider.
Nested body fields:
Field | Required | Type | Details |
| No | string | When the form appears: "start"/"before", a number of seconds, or "end". |
| No | boolean | Whether the viewer may skip the form. |
| No | string | (Wistia Form) The hashed ID of the Wistia form to embed. |
| No | string | (Wistia Form) How the form is displayed. |
| No | boolean | (Wistia Form) Whether to show the Wistia logo on the form. |
| No | string | Background color of the form as a hex string. |
| No | string | (HubSpot/Marketo/Pardot) The external form identifier. |
| No | string | (HubSpot) The HubSpot portal/account identifier. |
get_access_customizations
wistia-cli get-access-customizations
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the video. minLength: |
| 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 |
| Yes | string | The hashed ID of the video to be customized. minLength: |
| No; body/guard rules still apply | object | Current schema |
| No; body/guard rules still apply | object | Current schema |
| No; body/guard rules still apply | object | Current schema |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | boolean | Whether password protection is enabled for the video. |
| No | string | The password viewers must enter. Stored encrypted; also returned by the show endpoint. |
| No | object | Current schema |
| No | boolean | Whether the password-protection plugin is enabled. |
| No | string | Optional challenge/prompt text shown to viewers. |
| No | string | Internal source marker for the protection plugin. |
| No | boolean | Whether the password check is performed asynchronously. |
resolve_share_link
wistia-cli resolve-share-link
Argument | Required | Type | Details |
| Yes | string | The share link's URL segment : its hashed ID or custom slug. minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
get_share_link
wistia-cli get-share-link
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the media. minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
update_share_link
wistia-cli update-share-link
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the media. minLength: |
| No; body/guard rules still apply | string | Controls who can view the media via this share link. - |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: visibility.
delete_share_link
wistia-cli delete-share-link
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the media. minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | The hashed ID of the media for which captions are to be retrieved. minLength: |
| 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 |
| Yes | string | The hashed ID of the media for which captions are to be added. minLength: |
| No; body/guard rules still apply | string | Either an attached SRT file or a string parameter with the contents of an SRT file. |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: caption_file.
list_all_captions
wistia-cli list-all-captions
Argument | Required | Type | Details |
| No; body/guard rules still apply | string | Find captions for a particular media by providing the media hashed ID |
| 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. |
| No; body/guard rules still apply | array | Find captions in any of these languages, using the codes returned in each caption's |
| No; body/guard rules still apply | string | Set to |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Ordering. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Ordering Sort Direction (0 = desc, 1 = asc; default is 1) default: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
find_caption_matches
wistia-cli find-caption-matches
Argument | Required | Type | Details |
| No; body/guard rules still apply | array | Explicit hashed IDs of the media whose captions should be searched. minItems: |
| No; body/guard rules still apply | string | Exact caption wording to locate. minLength: |
| No; body/guard rules still apply | string | Exact IETF language tag. Omit when each media has only one caption track. minLength: |
| No; body/guard rules still apply | integer | One-based exact occurrence to return, including occurrences after the first 10. minimum: |
| No; body/guard rules still apply | integer | Optional start of a time range used to disambiguate the match. minimum: |
| No; body/guard rules still apply | integer | Optional end of a time range used to disambiguate the match. minimum: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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: |
| 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: |
Body requires: media_ids, target_text.
purchase_captions
wistia-cli purchase-captions
Argument | Required | Type | Details |
| Yes | string | Unique identifier for the media. minLength: |
| 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: |
| 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: |
| 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: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
get_captions
wistia-cli get-captions
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the media from which captions are to be retrieved. minLength: |
| Yes | string | The 3-character ISO 639-2 language code of the captions to be retrieved (e.g., |
| No; body/guard rules still apply | string | Set to |
| 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: |
| 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 |
| Yes | string | Unique identifier for the media. minLength: |
| Yes | string | Language code conforming to ISO-639-2 for which the captions should be updated. minLength: |
| No; body/guard rules still apply | string | Either an attached SRT file or a string parameter with the contents of an SRT file. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: caption_file.
delete_captions
wistia-cli delete-captions
Argument | Required | Type | Details |
| Yes | string | Unique identifier for the media. minLength: |
| Yes | string | Language code conforming to ISO-639-2 for which the captions should be removed. minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | The hashed ID of the media whose transcript should be edited. minLength: |
| Yes | string | The 3-character ISO 639-2 language code of the caption track to edit (e.g., |
| No; body/guard rules still apply | array | The corrections to apply, all-or-nothing, in one new version. minItems: |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: edits, expected_version.
Nested body fields:
Field | Required | Type | Details |
| 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. |
| Yes inside object | string | The text to substitute for the target. Use an empty string to delete the target. |
| 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. |
| 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 |
| Yes | string | The hashed ID of the media to list localizations for. minLength: |
| No; body/guard rules still apply | boolean | Whether to include the transcript in the response. default: |
| 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 |
| Yes | string | The hashed ID of the media to create a localization for. minLength: |
| No; body/guard rules still apply | string | The language to localize the media to as a 3-character IETF language code. |
| No; body/guard rules still apply | boolean | Whether to automatically enable the localization. default: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: output_language.
get_localization
wistia-cli get-localization
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the localization's media. minLength: |
| Yes | string | The hashed ID of the localization. minLength: |
| No; body/guard rules still apply | boolean | Whether to include the transcript in the response. default: |
| 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 |
| Yes | string | The hashed ID of the localization's media. minLength: |
| Yes | string | The hashed ID of the localization to delete. minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | The hashed ID of the media. minLength: |
| 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. |
| 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: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: trims.
list_media_extended_audio_descriptions
wistia-cli list-media-extended-audio-descriptions
Argument | Required | Type | Details |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | array | Filter extended audio descriptions to only those matching these hashed ids. Array items: string. |
| No; body/guard rules still apply | string | Field to order by. The default is id. Values: |
| No; body/guard rules still apply | integer | Direction to order by. (0 = desc, 1 = asc; default is 1) Values: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
get_media_extended_audio_description
wistia-cli get-media-extended-audio-description
Argument | Required | Type | Details |
| Yes | string | The hashed id of the Media Extended Audio Description minLength: |
| 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 |
| Yes | string | The hashed id of the Media Extended Audio Description minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| No; body/guard rules still apply | string | The hashed id of the media to order the extended audio description for. |
| No; body/guard rules still apply | boolean | Whether the extended audio description should be automatically enabled once the order is complete. default: |
| 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: |
| No; body/guard rules still apply | string | Optional instructions for the audio description provider. |
| No; body/guard rules still apply | string | IETF language tag for the audio description. Defaults to |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: media_id.
get_order_status
wistia-cli get-order-status
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the order returned from the order endpoint. minLength: |
| 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 |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Ordering. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Ordering Sort Direction (0 = desc, 1 = asc) Values: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
create_brand
wistia-cli create-brand
Argument | Required | Type | Details |
| 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. |
| 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. |
| 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. |
| No; body/guard rules still apply | string/null | The brand font family for body text. |
| No; body/guard rules still apply | string/null | The brand font family for headlines. |
| No; body/guard rules still apply | string/null | The brand font family for buttons. |
| No; body/guard rules still apply | integer/null | The border radius in pixels for rounded corners. |
| 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: |
| No; body/guard rules still apply | string/null | Controls the opacity of the video player control bar and big play button. Values: |
| No; body/guard rules still apply | object/null | The brand logo used for pages. |
| No; body/guard rules still apply | object/null | The brand logo used for the player. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | string | The Wistia delivery URL of the logo image, e.g. |
| No | object/null | Current schema |
| No | integer | Current schema |
| No | integer | Current schema |
| No | number/null | The size multiplier of the logo. |
| No | string | The Wistia delivery URL of the logo image, e.g. |
| No | object/null | Current schema |
| No | integer | Current schema |
| No | integer | Current schema |
| No | number/null | The size multiplier of the logo. |
get_brand
wistia-cli get-brand
Argument | Required | Type | Details |
| Yes | string | The id of the brand. minLength: |
| 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 |
| Yes | string | The id of the brand minLength: |
| 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. |
| 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. |
| 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. |
| No; body/guard rules still apply | string/null | The brand font family for body text. |
| No; body/guard rules still apply | string/null | The brand font family for headlines. |
| No; body/guard rules still apply | string/null | The brand font family for buttons. |
| No; body/guard rules still apply | integer/null | The border radius in pixels for rounded corners. |
| 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: |
| No; body/guard rules still apply | string/null | Controls the opacity of the video player control bar and big play button. Values: |
| No; body/guard rules still apply | object/null | The brand logo used for pages. |
| No; body/guard rules still apply | object/null | The brand logo used for the player. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | string | The Wistia delivery URL of the logo image, e.g. |
| No | object/null | Current schema |
| No | integer | Current schema |
| No | integer | Current schema |
| No | number/null | The size multiplier of the logo. |
| No | string | The Wistia delivery URL of the logo image, e.g. |
| No | object/null | Current schema |
| No | integer | Current schema |
| No | integer | Current schema |
| No | number/null | The size multiplier of the logo. |
delete_brand
wistia-cli delete-brand
Argument | Required | Type | Details |
| Yes | string | The id of the brand minLength: |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | The id of the brand to apply minLength: |
| No; body/guard rules still apply | string | The kind of resource being branded. Webinars can't be branded through this endpoint yet. Values: |
| No; body/guard rules still apply | string | The id of the resource being branded. |
| 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: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: resource_type, resource_id.
list_speakers
wistia-cli list-speakers
Argument | Required | Type | Details |
| No; body/guard rules still apply | string | Restrict the results to speaker profiles whose name contains this value (case-insensitive). |
| No; body/guard rules still apply | string | Field to order by. The default is id. Values: |
| No; body/guard rules still apply | integer | Direction to order by. (0 = desc, 1 = asc; default is 1) Values: |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
list_tags
wistia-cli list-tags
Argument | Required | Type | Details |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Ordering. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Ordering Sort Direction (0 = desc, 1 = asc) Values: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
create_tags
wistia-cli create-tags
Argument | Required | Type | Details |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: name.
delete_tag
wistia-cli delete-tag
Argument | Required | Type | Details |
| Yes | string | Name of the tag to delete minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| 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 |
| No; body/guard rules still apply | object | One change applied to many records, named by a parent ( |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| Yes inside object | string | The operation to perform. Media creation is not supported here -- uploads and URL imports have their own endpoints. |
| Yes inside object | string | The type of resource to operate on. |
| No | string | The hashed ID of the resource. Required for update, delete, and move operations. For |
| 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 |
| Yes inside object | string | The operation to apply to every matching record. |
| 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 |
| No | object | The parent whose records the job applies to. Which parent types are valid depends on the job's |
| Yes inside object | string | The kind of parent |
| No | string | The parent's hashed ID. Required for every scope type except |
| No | array | The records to apply the change to, named explicitly. Use this instead of |
| 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 |
create_bulk_purchase
wistia-cli create-bulk-purchase
Argument | Required | Type | Details |
| 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 |
| No; body/guard rules still apply | object | One order placed for many media, named by a parent ( |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| Yes inside object | string | Always |
| Yes inside object | string | What to order for the media. |
| 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. |
| 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. |
| Yes inside object | string | Always |
| Yes inside object | string | What to order for the media. |
| 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: |
| Yes inside object | string | The kind of parent |
| No | string | The parent's hashed ID. Required for every scope type except |
| No | array | The media to order for, named explicitly. Use this instead of |
| 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 |
| No; body/guard rules still apply | array | An array of the media hashed IDs to be tagged. Array items: string. |
| No; body/guard rules still apply | array | An array of tag names to add to each media. Array items: string. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: hashed_ids, tag_names.
list_folders
wistia-cli list-folders
Argument | Required | Type | Details |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Ordering. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Ordering Sort Direction (0 = desc, 1 = asc; default is 1) Values: |
| No; body/guard rules still apply | array | A collection of hashed ids belonging to folders to fetch Array items: string. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
create_folder
wistia-cli create-folder
Argument | Required | Type | Details |
| No; body/guard rules still apply | string | The name of the folder you want to create. |
| 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. |
| No; body/guard rules still apply | string | The folder’s description. |
| No; body/guard rules still apply | boolean | Whether anonymous users can upload media to the folder. |
| No; body/guard rules still apply | boolean | Whether anonymous users can download media from the folder. |
| No; body/guard rules still apply | boolean | A flag indicating whether or not the folder is enabled for public access. |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
get_folder
wistia-cli get-folder
Argument | Required | Type | Details |
| Yes | string | Folder Hashed ID minLength: |
| 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 |
| Yes | string | Folder Hashed ID minLength: |
| No; body/guard rules still apply | string | The folder’s new name. |
| No; body/guard rules still apply | string | The folder’s new description. |
| No; body/guard rules still apply | boolean | Whether anonymous users can upload media to the folder. |
| No; body/guard rules still apply | boolean | Whether anonymous users can download media from the folder. |
| No; body/guard rules still apply | boolean | A flag indicating whether or not the folder is enabled for public access. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
delete_folder
wistia-cli delete-folder
Argument | Required | Type | Details |
| Yes | string | Folder Hashed ID minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | Folder Hashed ID minLength: |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
list_folder_sharings
wistia-cli list-folder-sharings
Argument | Required | Type | Details |
| Yes | string | Folder Hashed ID minLength: |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Ordering. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Ordering Sort Direction (0 = desc, 1 = asc; default is 1) default: |
| No; body/guard rules still apply | array | Filter sharings by their hashed IDs Array items: string. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
create_folder_sharing
wistia-cli create-folder-sharing
Argument | Required | Type | Details |
| Yes | string | Hashed ID of the folder to be shared minLength: |
| No; body/guard rules still apply | object | Object requires: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: sharing.
Nested body fields:
Field | Required | Type | Details |
| Yes inside object | string | The email address of the person with whom you want to share the folder. format: |
| No | boolean | A flag indicating whether or not a password is required. Defaults to true. |
| No | boolean | Whether the user is allowed to share the folder with others. Defaults to false. |
| No | boolean | Whether the user is allowed to download files from the folder. Defaults to false. |
| No | boolean | Whether the user is allowed to upload files to the folder. Defaults to false. |
| No | string | Deprecated! Email notifications are always sent now. Values: |
get_folder_sharing
wistia-cli get-folder-sharing
Argument | Required | Type | Details |
| Yes | string | Hashed ID for the folder for which you'd like to see sharings. minLength: |
| Yes | integer | The ID of the specific sharing object that you want to see. |
| 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 |
| Yes | string | ID of the folder minLength: |
| Yes | string | ID of the sharing to be updated minLength: |
| No; body/guard rules still apply | object | Current schema |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | boolean | Allow the user or group to share the folder with others. |
| No | boolean | Allow the user or group to download media from the folder. |
| No | boolean | Allow the user or group to upload media to the folder. |
| No | boolean | Give this user admin rights to the folder. |
delete_folder_sharing
wistia-cli delete-folder-sharing
Argument | Required | Type | Details |
| Yes | string | Hashed ID of the folder minLength: |
| Yes | string | ID of the sharing to be deleted minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | The hashed ID of the folder minLength: |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Field to sort by. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Sort direction (0 = desc, 1 = asc; default is 1) default: |
| No; body/guard rules still apply | array | Filter subfolders by their hashed IDs Array items: string. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
create_subfolder
wistia-cli create-subfolder
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the folder minLength: |
| No; body/guard rules still apply | string | The display name of the subfolder. maxLength: |
| No; body/guard rules still apply | string/null | A description for the subfolder. maxLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: name.
get_subfolder
wistia-cli get-subfolder
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the folder minLength: |
| Yes | string | The hashed ID of the subfolder minLength: |
| No; body/guard rules still apply | string | Format for media descriptions |
| 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 |
| Yes | string | The hashed ID of the folder minLength: |
| Yes | string | The hashed ID of the subfolder minLength: |
| No; body/guard rules still apply | string | The new name for the subfolder maxLength: |
| No; body/guard rules still apply | string/null | The new description for the subfolder maxLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
delete_subfolder
wistia-cli delete-subfolder
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the folder minLength: |
| Yes | string | The hashed ID of the subfolder minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | The hashed ID of the folder containing the subfolders minLength: |
| No; body/guard rules still apply | array | An array of the subfolder hashed IDs to be deleted. Array items: string. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: hashed_ids.
list_channels
wistia-cli list-channels
Argument | Required | Type | Details |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | integer | Page number to retrieve minimum: |
| No; body/guard rules still apply | integer | Number of channels per page minimum: |
| No; body/guard rules still apply | string | Ordering. Default is ID ASC. Note: Only 'id' and 'created' are supported when using cursor pagination. Values: |
| No; body/guard rules still apply | integer | Ordering Sort Direction (0 = desc, 1 = asc; default is 1) Values: |
| No; body/guard rules still apply | array | Find all of the channels limited to these hashed_ids. Array items: string. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
create_channel
wistia-cli create-channel
Argument | Required | Type | Details |
| No; body/guard rules still apply | string/null | The display name for the channel |
| No; body/guard rules still apply | string/null | The channel's description. |
| 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. |
| No; body/guard rules still apply | boolean | Whether podcasting is enabled for this channel. |
| 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. |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | string/null | The channel's copyright information, published in the RSS feed as ``. |
| No | JSON union | The format for episodes for the podcast channel, published in the RSS feed as ``. |
| No | string/null | The name of the author(s) for the channel, published in the RSS feed as ``. |
| No | boolean/null | Whether the channel contains explicit content, published in the RSS feed as ``. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| No | string/null | The ISO 639-1 language code for the channel, published in the RSS feed as ``. Values: |
get_channel
wistia-cli get-channel
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the channel. minLength: |
| 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 |
| Yes | string | The hashed id of the Channel minLength: |
| No; body/guard rules still apply | string/null | The display name for the channel |
| No; body/guard rules still apply | string/null | The channel's description. |
| 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. |
| No; body/guard rules still apply | boolean | Whether podcasting is enabled for this channel. |
| 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. |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | string/null | The channel's copyright information, published in the RSS feed as ``. |
| No | JSON union | The format for episodes for the podcast channel, published in the RSS feed as ``. |
| No | string/null | The name of the author(s) for the channel, published in the RSS feed as ``. |
| No | boolean/null | Whether the channel contains explicit content, published in the RSS feed as ``. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| No | string/null | The ISO 639-1 language code for the channel, published in the RSS feed as ``. Values: |
delete_channel
wistia-cli delete-channel
Argument | Required | Type | Details |
| Yes | string | The hashed id of the Channel minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | The hashed ID of the channel. minLength: |
| Yes | string | The hashed ID of the channel episode. minLength: |
| 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 |
| Yes | string | The hashed ID of the channel to grab channel episodes from. minLength: |
| No; body/guard rules still apply | string | Ordering. Default is ID ASC. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Ordering Sort Direction (0 = desc, 1 = asc; default is 1) Values: |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| 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. |
| No; body/guard rules still apply | array | Filter by hashed id Array items: string. |
| No; body/guard rules still apply | boolean | Filter by published status. |
| No; body/guard rules still apply | string | Filter by channel episode name/title. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
create_channel_episode
wistia-cli create-channel-episode
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the channel to add the episode to. minLength: |
| No; body/guard rules still apply | string | The alphanumeric hashed ID of the media to be added as a channel episode. |
| 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. |
| No; body/guard rules still apply | string | The episode's description or episode notes. |
| No; body/guard rules still apply | string | A short summary of the episode that is displayed when space is limited. |
| No; body/guard rules still apply | string | The status of whether or not the episode has been published to your channel. Values: |
| 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: |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | JSON union | The type of episode. Exactly one of 2 schema branches; inspect the complete schema. |
| No | integer/null | The number of the episode. |
| No | integer/null | The season number of the episode. |
| No | boolean | Whether the episode contains explicit content. |
| No | boolean | Whether to hide the episode from the podcast feed. |
list_channel_episodes
wistia-cli list-channel-episodes
Argument | Required | Type | Details |
| No; body/guard rules still apply | string | The hashed ID of the channel to grab channel episodes from. |
| No; body/guard rules still apply | string | Ordering. Default is ID ASC. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Ordering Sort Direction (0 = desc, 1 = asc; default is 1) Values: |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| 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. |
| No; body/guard rules still apply | array | Filter by hashed id Array items: string. |
| No; body/guard rules still apply | boolean | Filter by published status. |
| No; body/guard rules still apply | string | Filter by channel episode name/title. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
update_channel_episode
wistia-cli update-channel-episode
Argument | Required | Type | Details |
| Yes | string | The hashed id of the Channel Episode minLength: |
| No; body/guard rules still apply | string/null | The episode's description or episode notes. |
| 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. |
| No; body/guard rules still apply | string | The unique alphanumeric identifier for the media associated with this channel episode. |
| No; body/guard rules still apply | string | The unique alphanumeric identifier for the live stream event associated with this channel episode. |
| No; body/guard rules still apply | string/null | A short summary of the episode that is displayed when space is limited. |
| No; body/guard rules still apply | string | The status of whether or not the episode has been published to your channel. Values: |
| No; body/guard rules still apply | string | The date and time when the episode is scheduled to be published in UTC timezone. format: |
| No; body/guard rules still apply | string | Additional notes for the episode. |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | JSON union | The type of episode. Exactly one of 2 schema branches; inspect the complete schema. |
| No | integer/null | The number of the episode. |
| No | integer/null | The season number of the episode. |
| No | boolean | Whether the episode contains explicit content. |
| No | boolean | Whether to hide the episode from the podcast feed. |
delete_channel_episode
wistia-cli delete-channel-episode
Argument | Required | Type | Details |
| Yes | string | The hashed id of the Channel Episode minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | The hashed id of the Channel Episode minLength: |
| No; body/guard rules still apply | string | The date and time when the episode is scheduled to be published in UTC timezone. format: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
un_publish_channel_episode
wistia-cli un-publish-channel-episode
Argument | Required | Type | Details |
| Yes | string | The hashed id of the Channel Episode minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | Channel Hashed ID minLength: |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Ordering. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Ordering Sort Direction (0 = desc, 1 = asc; default is 1) default: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
create_channel_collaborator
wistia-cli create-channel-collaborator
Argument | Required | Type | Details |
| Yes | string | Hashed ID of the channel minLength: |
| No; body/guard rules still apply | string | Email address of the contact to invite. Creates a new contact if one doesn't exist. format: |
| No; body/guard rules still apply | string | The role to grant the collaborator. Values: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: email, role.
delete_channel_collaborator
wistia-cli delete-channel-collaborator
Argument | Required | Type | Details |
| Yes | string | Channel Hashed ID minLength: |
| Yes | integer | Collaborator ID |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Field to sort by. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Sort direction (0 = desc, 1 = asc; default is 1) Values: |
| No; body/guard rules still apply | array | Filter by specific webinars IDs Array items: string. |
| 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: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
create_webinar
wistia-cli create-webinar
Argument | Required | Type | Details |
| No; body/guard rules still apply | string | The title of the webinar |
| No; body/guard rules still apply | string | The description of the webinar |
| No; body/guard rules still apply | string | The scheduled start time as a UTC formatted ISO 8601 string (offset |
| No; body/guard rules still apply | integer | Duration of the event in minutes (minimum 15) minimum: |
| No; body/guard rules still apply | string | The IANA time zone identifier the webinar is scheduled in. |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: title, scheduled_for, event_duration, time_zone.
get_webinar
wistia-cli get-webinar
Argument | Required | Type | Details |
| Yes | string | The hashed ID of the webinar minLength: |
| 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 |
| Yes | string | The hashed ID of the webinar minLength: |
| No; body/guard rules still apply | object | Current schema |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | string | The title of the webinar |
| No | string | The description of the webinar |
| No | string | The scheduled start time as a UTC formatted ISO 8601 string (offset |
| No | integer | Duration of the webinar in minutes (minimum 15) minimum: |
| No | string | The IANA time zone identifier the webinar is scheduled in. |
| 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 |
| Yes | string | The hashed ID of the webinar minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| Yes | string | Hashed ID of the webinar. minLength: |
| No; body/guard rules still apply | integer | Number of results to return per page (max 100). minimum: |
| No; body/guard rules still apply | string | Cursor for pagination. Use the value from the previous response's |
| No; body/guard rules still apply | integer | Sort direction (0 = desc/previous page, 1 = asc/next page; default is 1) default: |
| No; body/guard rules still apply | string | Filter registrations by attendance status. default: |
| No; body/guard rules still apply | string | Filter registrations by restriction status. default: |
| No; body/guard rules still apply | array | Filter registrations by email addresses. Array items: string. |
| 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 |
| Yes | string | Hashed ID of the webinar minLength: |
| No; body/guard rules still apply | string | Email address of the registrant format: |
| No; body/guard rules still apply | string | First name of the registrant |
| No; body/guard rules still apply | string | Last name of the registrant |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: email, first_name, last_name.
list_webinar_collaborators
wistia-cli list-webinar-collaborators
Argument | Required | Type | Details |
| Yes | string | Webinar Hashed ID minLength: |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Ordering. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Ordering Sort Direction (0 = desc, 1 = asc; default is 1) default: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
create_webinar_collaborator
wistia-cli create-webinar-collaborator
Argument | Required | Type | Details |
| Yes | string | Hashed ID of the webinar minLength: |
| 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: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: email.
delete_webinar_collaborator
wistia-cli delete-webinar-collaborator
Argument | Required | Type | Details |
| Yes | string | Webinar Hashed ID minLength: |
| Yes | integer | Collaborator ID |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
get_brand_kit_colors
wistia-cli get-brand-kit-colors
Argument | Required | Type | Details |
| 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 |
| 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. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: contacts.
dismiss_desktop_install_prompt
wistia-cli dismiss-desktop-install-prompt
Argument | Required | Type | Details |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
search
wistia-cli search
Argument | Required | Type | Details |
| Yes | string | The search query string |
| 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. |
| No; body/guard rules still apply | array | Filter results by one or more resource types. Array items: string. |
| No; body/guard rules still apply | object | Filter media by custom metadata field value, keyed by field key: |
| No; body/guard rules still apply | string | Pass |
| 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: |
| 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: |
| 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 |
| Yes | string | The kind of resource the hashed ID refers to. Values: |
| Yes | string | The hashed ID of the resource. |
| 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 |
| No; body/guard rules still apply | object | Current schema |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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: |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| No; body/guard rules still apply | object | Complete JSON request body instead of body flags. Supports current nested customization, caption and nullable values. |
| 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: |
Nested body fields:
Field | Required | Type | Details |
| No | string | an ISO8601 string of when the token will expire, defaults to two days from creation format: |
| No | array | The scopes the token will be granted. |
| No | array | a list of authorizations the token will have Array items: object. |
| Yes inside object | string | The type of object the permission is being performed on. Supports |
| Yes inside object | string | The id of the object the permissions are being performed on: the hashed id of a |
| Yes inside object | array | The permissions granted on the object. |
get_job_status
wistia-cli get-job-status
Argument | Required | Type | Details |
| Yes | string | The hashed ID or numeric ID of the background job minLength: |
| 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 |
| No; body/guard rules still apply | integer | The page number to retrieve. This cannot be combined with |
| No; body/guard rules still apply | integer | The number of medias per page. Use this for both offset pagination and cursor pagination. minimum: |
| No; body/guard rules still apply | object | If |
| No; body/guard rules still apply | string | Ordering. When using cursor pagination (see cursor param), only |
| No; body/guard rules still apply | integer | Ordering Sort Direction (0 = desc, 1 = asc; default is 1) default: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
create_allowed_domain
wistia-cli create-allowed-domain
Argument | Required | Type | Details |
| No; body/guard rules still apply | string | The domain name to add (www will be automatically stripped) |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| No; body/guard rules still apply | boolean | Set true only when the user asked for exactly this action. |
| 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: |
| 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: |
Body requires: domain.
get_allowed_domain
wistia-cli get-allowed-domain
Argument | Required | Type | Details |
| Yes | string | The domain name to retrieve minLength: |
| 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 |
| Yes | string | The domain name to delete minLength: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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 |
| 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 |
| No; body/guard rules still apply | string | The start date for the stats, formatted YYYY-MM-DD format: |
| No; body/guard rules still apply | string | The end date for the stats, formatted YYYY-MM-DD format: |
| 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 |
| Yes | string | The Hashed ID or ID of the project for which you want to retrieve stats. minLength: |
| 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 |
| Yes | string | The hashed ID or ID of the video for which you want to retrieve stats. minLength: |
| 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 |
| Yes | string | The ID of the media minLength: |
| No; body/guard rules still apply | string | The start date for the stats, formatted YYYY-MM-DD format: |
| No; body/guard rules still apply | string | The end date for the stats, formatted YYYY-MM-DD format: |
| 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 |
| Yes | string | The hashed ID or ID of the video for which you want to retrieve engagement data. minLength: |
| 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 |
| No; body/guard rules still apply | integer | The page of results based on the per_page parameter. minimum: |
| No; body/guard rules still apply | integer | The maximum number of results to return, capped at 100. minimum: |
| No; body/guard rules still apply | string | Filtering parameter to narrow down the list of visitors. Values: |
| No; body/guard rules still apply | string | Search for visitors based on name or email address. |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
get_visitor
wistia-cli get-visitor
Argument | Required | Type | Details |
| Yes | string | The unique key of the visitor. minLength: |
| 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 |
| No; body/guard rules still apply | string | An optional identifier for a specific video. |
| No; body/guard rules still apply | string | An optional identifier for a specific visitor. |
| No; body/guard rules still apply | integer | Maximum number of events to retrieve (capped at 100). minimum: |
| No; body/guard rules still apply | integer | The page of events to get data from. minimum: |
| No; body/guard rules still apply | string | Start date in the format 'YYYY-MM-DD'. format: |
| No; body/guard rules still apply | string | End date in the format 'YYYY-MM-DD'. format: |
| No; body/guard rules still apply | string | Named private Wistia account; selects credentials, not a remote account ID. |
| 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. |
| 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: |
get_event
wistia-cli get-event
Argument | Required | Type | Details |
| Yes | string | The unique key of the event. minLength: |
| 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 |
| 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: |
| 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: |
| 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 |
| 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: |
| 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: |
| Yes | string | The time granularity for the timeseries data. Values: |
| 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 |
| 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: |
| 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: |
| No; body/guard rules still apply | string | The type of content to rank. default: |
| 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: |
| No; body/guard rules still apply | string | The metric to rank content by. default: |
| No; body/guard rules still apply | string | The sort direction. default: |
| 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: |
| 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 |
| 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: |
| 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: |
| No; body/guard rules still apply | string | The metric to sort embed locations by. default: |
| No; body/guard rules still apply | string | The sort direction. default: |
| No; body/guard rules still apply | integer | Number of results to return (max 100). minimum: |
| 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 |
| Yes | string | The URL of the page to look up, e.g. |
| 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: |
| 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: |
| No; body/guard rules still apply | string | How to match the path of |
| No; body/guard rules still apply | integer | Number of media hashed IDs to return (max 1000). minimum: |
| 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 |
| Yes | string | The hashed ID of the video. minLength: |
| 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: |
| 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: |
| 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 |
| Yes | string | The hashed ID of the video. minLength: |
| 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: |
| 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: |
| Yes | string | The time granularity for the timeseries data. Values: |
| 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 |
| Yes | string | The hashed ID of the video. minLength: |
| 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: |
| 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: |
| No; body/guard rules still apply | string | The metric to sort embed locations by. default: |
| No; body/guard rules still apply | string | The sort direction. default: |
| 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). |
| No; body/guard rules still apply | integer | Number of results to return (max 100). minimum: |
| 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 |
| Yes | string | The hashed ID of the video. minLength: |
| 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: |
| 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: |
| Yes | string | The time granularity for the timeseries data. Values: |
| No; body/guard rules still apply | string | The metric used to rank and select the top embed locations. default: |
| 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). |
| 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: |
| 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 |
| Yes | string | The hashed ID of the video. minLength: |
| 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: |
| 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: |
| Yes | string | The dimension to group traffic data by. Values: |
| No; body/guard rules still apply | string | The metric to sort results by. default: |
| No; body/guard rules still apply | string | The sort direction. default: |
| No; body/guard rules still apply | integer | Number of results to return (max 100). minimum: |
| 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 |
| Yes | string | The hashed ID of the video. minLength: |
| 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: |
| 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: |
| No; body/guard rules still apply | integer | Number of results to return (max 100). minimum: |
| No; body/guard rules still apply | string | Cursor for pagination. Use the value from the previous response's page_info.end_cursor. |
| 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 |
| Yes | string | The hashed ID of the video. minLength: |
| 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: |
| 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: |
| No; body/guard rules still apply | integer | Number of results to return (max 100). minimum: |
| 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 |
| Yes | string | The hashed ID of the webinar. minLength: |
| No; body/guard rules still apply | boolean | Whether to include on-demand viewing data after the live event ended. default: |
| 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: |
| 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: |
| 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 |
| Yes | string | The hashed ID of the webinar. minLength: |
| Yes | string | The time granularity for the timeseries data. Values: |
| No; body/guard rules still apply | boolean | Whether to include on-demand viewing data after the live event ended. default: |
| 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: |
| 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: |
| 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 |
| Yes | string | The hashed ID of the webinar. minLength: |
| Yes | string | The dimension to group traffic data by. Values: |
| No; body/guard rules still apply | string | The metric to sort results by. default: |
| No; body/guard rules still apply | string | The sort direction. default: |
| 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 |
| Yes | string | The hashed ID of the webinar. minLength: |
| No; body/guard rules still apply | integer | Number of results to return (max 100). minimum: |
| No; body/guard rules still apply | string | Cursor for pagination. Use the value from the previous response's page_info.end_cursor. |
| 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 |
| Yes | string | The hashed ID of the webinar. minLength: |
| 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 --agentCopy/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 --agentURL 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 --agentPurchase 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 --agentAutomatic 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 --agent12. 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-cliRestart @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 |
Hosted https://api.wistia.com/mcp/api, OAuth/Bearer | Broad account actions, owners/managers, selectable toolsets including Remix; client approval controls apply | |
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
Personal website: navid.me
Link in bio: navid.bio
Navid Media: navid.media
YouTube: @thenavidm and @thenavidai
X: @thenavidm
Instagram: @thenavidm
LinkedIn: thenavidm
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 toolsapply_brandApply BrandADestructive
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 dataTokens 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 MediaADestructive
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 anythingTokens 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 MediaADestructive
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 anythingTokens 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 SubfoldersADestructive
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 anythingTokens 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 MediaADestructive
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 anythingTokens 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 FolderADestructive
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 anythingTokens 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 MediaADestructive
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 anythingTokens 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 DomainADestructive
Creates an allowed domain for the account.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 BrandADestructive
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 dataTokens 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 ActionsADestructive
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 anythingTokens 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 PurchaseADestructive
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 anythingTokens 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 CaptionsADestructive
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 anythingTokens 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 ChannelADestructive
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 CollaboratorADestructive
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 anythingTokens 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 EpisodeADestructive
Creates a new channel episode in a channel.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 CustomizationsADestructive
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 anythingTokens 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 TokenADestructive
🚫 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 anythingTokens 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 FolderADestructive
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 anythingTokens 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 SharingADestructive
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 anythingTokens 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 LocalizationADestructive
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 anythingTokens 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 TrimsADestructive
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 anythingTokens 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 BundleADestructive
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 anythingTokens 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 SubfolderADestructive
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 anythingTokens 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 TagsADestructive
Creates a new tag.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 WebinarADestructive
Creates a new webinar.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 CollaboratorADestructive
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 anythingTokens 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 RegistrationADestructive
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 anythingTokens 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 DomainADestructive
Deletes an allowed domain from the account.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 BrandADestructive
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 dataTokens 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 CaptionsADestructive
Removes the captions file from a media for the specified language.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 ChannelBDestructive
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 CollaboratorADestructive
Removes a collaborator's access to a channel.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 EpisodeADestructive
Deletes an existing channel episode in a channel.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 CustomizationsADestructive
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 anythingTokens 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 FolderADestructive
Deletes a folder (previously called project) and the media inside it.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 SharingADestructive
Deletes a sharing on a folder.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 LocalizationADestructive
Deletes a localization.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 MediaADestructive
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 anythingTokens 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 DescriptionADestructive
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 BundleADestructive
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 anythingTokens 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 SubfolderADestructive
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 anythingTokens 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 TagADestructive
Deletes a tag
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 WebinarADestructive
Deletes an existing webinar.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 CollaboratorADestructive
Removes a collaborator's producer access to a webinar.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 PromptBDestructive
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 anythingRequires confirm=true for the requested mutation. May share access, notify people or incur provider charges.
Inputs: account, confirm.
edit_captions_textEdit Captions TextADestructive
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 anythingTokens 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 MatchesARead-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 dataTokens 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 LocationARead-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 statsTokens 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 CustomizationsARead-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 dataTokens 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 CustomizationsBRead-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 dataTokens 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 AccountARead-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 AnalyticsARead-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 statsTokens 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 TimeseriesARead-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 statsTokens 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 LocationsARead-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 statsTokens 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 StatsARead-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 statsTokens 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 DateARead-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 statsTokens 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 ContentARead-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 statsTokens 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 UsageARead-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 DomainBRead-onlyIdempotent
Returns the details of an allowed domain.
Requires api token with one of the following permissions
Read all dataTokens 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 CustomizationsARead-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 dataTokens 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 BrandBRead-onlyIdempotent
Returns the brand with the given id.
Requires api token with one of the following permissions
Read all dataTokens 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 ColorsARead-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 PreloadARead-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 CaptionsARead-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 dataTokens 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 ChannelARead-onlyIdempotent
Returns the Channel associated with the hashedId.
Requires api token with one of the following permissions
Read all folder and media dataTokens 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 EpisodeARead-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 dataTokens 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 CustomizationsARead-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 dataTokens 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 BalanceARead-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 TokenARead-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 CustomizationsBRead-onlyIdempotent
Fetches explicitly defined customizations for the video.
Requires api token with one of the following permissions
Read all folder and media dataTokens 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 CustomizationsARead-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 dataTokens 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 EventARead-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 statsTokens 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 FolderBRead-onlyIdempotent
Retrieves a single folder (previously called project).
Requires api token with one of the following permissions
Read all folder and media dataTokens 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 SharingARead-onlyIdempotent
Retrieves the details of a specific sharing object for a given folder.
Requires api token with one of the following permissions
Read all dataTokens 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 StatusARead-onlyIdempotent
Retrieves the status of a background job.
Requires api token with one of the following permissions
Read all dataTokens 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 CustomizationsBRead-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 dataTokens 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 LocalizationBRead-onlyIdempotent
Obtain detailed information about a localization.
Requires api token with one of the following permissions
Read all dataTokens 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 MediaARead-onlyIdempotent
Fetches a single media by its hashed id.
Requires api token with one of the following permissions
Read all folder and media dataTokens 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 AnalyticsARead-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 statsTokens 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 TimeseriesBRead-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 statsTokens 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 LocationsARead-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 statsTokens 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 TimeseriesARead-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 statsTokens 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 EngagementBRead-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 statsTokens 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 DescriptionARead-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 ConversionsARead-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 statsTokens 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 LanguagesARead-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 statsTokens 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 StatsBRead-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 dataTokens 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 DateARead-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 statsTokens 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 StatsBRead-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 statsTokens 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 BreakdownARead-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 statsTokens 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 StatusARead-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 CustomizationsARead-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 dataTokens 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 StatsBRead-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 statsTokens 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 CustomizationsARead-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 dataTokens 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 SubfolderARead-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 dataTokens 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 CustomizationsARead-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 dataTokens 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 VisitorARead-onlyIdempotent
This endpoint provides detailed information about a specific visitor.
Requires api token with one of the following permissions
Read detailed statsTokens 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 WebinarBRead-onlyIdempotent
Returns the webinar associated with the hashed id.
Requires api token with one of the following permissions
Read all dataTokens 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 AnalyticsARead-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 statsTokens 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 AudienceARead-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 statsTokens 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 HistogramsARead-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 statsTokens 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 TimeseriesARead-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 statsTokens 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 BreakdownARead-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 statsTokens 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 URLADestructive
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 anythingTokens 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 ContactsADestructive
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 anythingRequires 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 accountsARead-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 CaptionsARead-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 dataTokens 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 DomainsARead-onlyIdempotent
Lists allowed domains belonging to the account.
Requires api token with one of the following permissions
Read all dataTokens 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 BrandsARead-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 dataTokens 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 MediaBRead-onlyIdempotent
Lists captions belonging to a specific media.
Requires api token with one of the following permissions
Read all folder and media dataTokens 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 CollaboratorsARead-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 dataTokens 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 EpisodesARead-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 dataTokens 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 ChannelBRead-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 dataTokens 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 ChannelsARead-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 dataTokens 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 MediaARead-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 dataTokens 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 EventsBRead-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 statsTokens 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 FoldersARead-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 dataTokens 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 SharingsBRead-onlyIdempotent
Lists the sharings of contacts and contact groups on a folder.
Requires api token with one of the following permissions
Read all dataTokens 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 LocalizationsARead-onlyIdempotent
Lists all the localizations for a media.
Requires api token with one of the following permissions
Read all dataTokens 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 MediaARead-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 dataTokens 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 DescriptionsCRead-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 BundlesARead-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 dataTokens 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 SpeakersARead-onlyIdempotent
Lists reusable speaker profiles belonging to the account.
Requires api token with one of the following permissions
Read all dataTokens 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 SubfoldersBRead-onlyIdempotent
Lists subfolders in a specific folder.
Requires api token with one of the following permissions
Read all folder and media dataTokens 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 TagsBRead-onlyIdempotent
Lists tags belonging to the account.
Requires api token with one of the following permissions
Read all dataTokens 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 VisitorsBRead-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 statsTokens 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 CollaboratorsARead-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 dataTokens 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 RegistrationsARead-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 dataTokens 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 WebinarsARead-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 dataTokens 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 MediaADestructive
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 anythingTokens 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 DescriptionADestructive
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 EpisodeBDestructive
Publishes an existing channel episode in a channel.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 CaptionsADestructive
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 anythingTokens 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 URLsARead-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 dataTokens 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 MediaADestructive
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 mediaTokens 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 MediaADestructive
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 anythingTokens 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.
searchSearchARead-onlyIdempotent
Searches across folders, subfolders, medias, channels, channel episodes, and webinars. Also searches through video transcripts, so media results may include transcript matches with timestamps when the query matches spoken content.
Requires api token with one of the following permissions
Read all dataTokens 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: q (required), tags, account, include, +4 more.
start_account_trialStart Account TrialADestructive
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 anythingRequires confirm=true for the requested mutation. May share access, notify people or incur provider charges.
Inputs: account, confirm.
swap_mediaSwap MediaADestructive
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 anythingTokens 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 MediaADestructive
Translates the transcript for a media.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 EpisodeADestructive
Un-publishes an existing channel episode in a channel.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 CustomizationsADestructive
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 anythingTokens 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 CustomizationsADestructive
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 anythingTokens 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 CustomizationsADestructive
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 anythingTokens 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 BrandADestructive
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 dataTokens 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 PreloadADestructive
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 CaptionsADestructive
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 anythingTokens 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 ChannelBDestructive
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 EpisodeADestructive
Updates an existing channel episode in a channel.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 CustomizationsADestructive
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 anythingTokens 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 CustomizationsADestructive
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 anythingTokens 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 CustomizationsADestructive
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 anythingTokens 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 FolderADestructive
Updates a folder (previously called project)
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 SharingADestructive
Updates a sharing on a folder.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 CustomizationsADestructive
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 anythingTokens 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 MediaBDestructive
Updates the attributes on a media.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 CustomizationsADestructive
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 anythingTokens 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 CustomizationsADestructive
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 anythingTokens 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 SubfolderADestructive
Updates a subfolder's name and/or description.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 CustomizationsADestructive
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 anythingTokens 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 WebinarADestructive
Updates an existing webinar.
Requires api token with one of the following permissions
Read, update & delete anythingTokens 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 MediaADestructive
Endpoint to upload media files from a local system or import from a web URL.
Use
multipart/form-datawith afileparameter to upload from local systemUse
application/x-www-form-urlencodedwith aurlparameter 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 fileADestructive
Endpoint to upload media files from a local system or import from a web URL.
Use
multipart/form-datawith afileparameter to upload from local systemUse
application/x-www-form-urlencodedwith aurlparameter 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
Scored across 169 tools
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.
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.
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.
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
Related MCP Connectors
YouTube transcripts, search, channels, playlists and bulk transcript jobs for AI agents. 14 tools.
Video, audio, and image processing for AI agents: convert, transcribe, upscale - 150+ operations.
Manage Wistia videos, channels, folders, captions, customizations, and analytics via MCP.
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables 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-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with Mux video infrastructure, providing tools for fetching video assets, clipping videos into shorts, monitoring live streams, pulling viewer analytics, and generating auto-captions.MIT
- AlicenseNot gradedqualityDmaintenanceGives AI coding agents full control over a YouTube channel with 22 tools for channel management, videos, playlists, comments, search, analytics, thumbnails, and captions.23 npm3MIT
- AlicenseNot gradedqualityDmaintenanceExposes 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 npmMIT