{"openapi":"3.1.0","info":{"title":"Wistia (BYOK) API","version":"0.1.0","description":"Wistia (BYOK) lets an AI assistant read your own Wistia data through the Wistia API with a key you supply (API access token (needs the 'Read all folder and media data' permission)). Read-only: 11 tools (list_medias, get_media, get_media_stats, list_folders, list_tags, list_channels, list_webinars, get_account_stats, get_account_stats_by_date, get_account_analytics, get_top_content). The BYOK key...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-wistia.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-wistia/docs"},"termsOfService":"https://connectorbay.com/byok-wistia/terms"},"servers":[{"url":"https://byok-wistia.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-wistia/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_medias":{"post":{"operationId":"list_medias","summary":"List the media (videos, audio, images) in the Wistia account with name, type, status, duration, folder and dates. Up to ","description":"List the media (videos, audio, images) in the Wistia account with name, type, status, duration, folder and dates. Up to 100 per page. Use for \"What videos are in my Wistia account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"folder_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only media in this folder (folder hashed id).","title":"Folder Id"},"type":{"anyOf":[{"enum":["Video","Audio","Image","PdfDocument","MicrosoftOfficeDocument","Swf","UnknownType"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this media type.","title":"Type"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only media whose name matches this text exactly.","title":"Name"},"sort_by":{"anyOf":[{"enum":["name","created","updated","position"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by name, created, updated or position.","title":"Sort By"},"sort_direction":{"anyOf":[{"maximum":1,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"0 for descending, 1 for ascending (default 1).","title":"Sort Direction"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for archived media only, false for active media only.","title":"Archived"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"Results per page (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_mediasArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_media":{"post":{"operationId":"get_media","summary":"Get one Wistia media by hashed id: name, type, status, duration, folder, thumbnail, tags and its file assets. Use for \"S","description":"Get one Wistia media by hashed id: name, type, status, duration, folder, thumbnail, tags and its file assets. Use for \"Show details of Wistia video abc123def4\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"media_id":{"description":"Wistia media hashed id (the short id in a media's URL), for example 'abc123def4'.","maxLength":40,"title":"Media Id","type":"string"}},"required":["media_id"],"title":"get_mediaArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_media_stats":{"post":{"operationId":"get_media_stats","summary":"Get lifetime viewing statistics for one Wistia media: loads, plays, play rate, hours watched, engagement and visitors. U","description":"Get lifetime viewing statistics for one Wistia media: loads, plays, play rate, hours watched, engagement and visitors. Use for \"How many plays and what engagement does Wistia video abc123def4 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"media_id":{"description":"Wistia media hashed id (the short id in a media's URL), for example 'abc123def4'.","maxLength":40,"title":"Media Id","type":"string"}},"required":["media_id"],"title":"get_media_statsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_folders":{"post":{"operationId":"list_folders","summary":"List Wistia folders (earlier called projects) with media count, dates and sharing flags. Up to 100 per page. Use for \"Wh","description":"List Wistia folders (earlier called projects) with media count, dates and sharing flags. Up to 100 per page. Use for \"Which folders do I have in Wistia and how many videos are in each\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sort_by":{"anyOf":[{"enum":["name","created","updated","mediaCount","id"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by name, created, updated, mediaCount or id.","title":"Sort By"},"sort_direction":{"anyOf":[{"maximum":1,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"0 for descending, 1 for ascending (default 1).","title":"Sort Direction"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"Results per page (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_foldersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_tags":{"post":{"operationId":"list_tags","summary":"List the tags used in the Wistia account with how many media each is attached to. Up to 100 per page. Use for \"What tags","description":"List the tags used in the Wistia account with how many media each is attached to. Up to 100 per page. Use for \"What tags do I use on my Wistia videos\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sort_by":{"anyOf":[{"enum":["name","created","updated","taggingsCount","id"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by name, created, updated, taggingsCount or id.","title":"Sort By"},"sort_direction":{"anyOf":[{"maximum":1,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"0 for descending, 1 for ascending (default 1).","title":"Sort Direction"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"Results per page (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_tagsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_channels":{"post":{"operationId":"list_channels","summary":"List Wistia channels with name, media count, live event count and podcast flag. Up to 100 per page. Use for \"Which Wisti","description":"List Wistia channels with name, media count, live event count and podcast flag. Up to 100 per page. Use for \"Which Wistia channels do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sort_by":{"anyOf":[{"enum":["created","id","updated","name"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by created, id, updated or name.","title":"Sort By"},"sort_direction":{"anyOf":[{"maximum":1,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"0 for descending, 1 for ascending (default 1).","title":"Sort Direction"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"Results per page (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_channelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_webinars":{"post":{"operationId":"list_webinars","summary":"List Wistia webinars with title, schedule, lifecycle and registration status. Links for hosts and panelists are not retu","description":"List Wistia webinars with title, schedule, lifecycle and registration status. Links for hosts and panelists are not returned. Use for \"What webinars do I have scheduled in Wistia\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"started":{"anyOf":[{"enum":["true","false"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by whether the webinar has started: true or false.","title":"Started"},"sort_by":{"anyOf":[{"enum":["scheduled_for","title","created","updated","id"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by scheduled_for, title, created, updated or id.","title":"Sort By"},"sort_direction":{"anyOf":[{"maximum":1,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"0 for descending, 1 for ascending (default 1).","title":"Sort Direction"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"Results per page (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_webinarsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_account_stats":{"post":{"operationId":"get_account_stats","summary":"Get the Wistia account's lifetime totals: loads, plays and hours watched. Use for \"How many total plays has my Wistia ac","description":"Get the Wistia account's lifetime totals: loads, plays and hours watched. Use for \"How many total plays has my Wistia account had\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_account_statsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_account_stats_by_date":{"post":{"operationId":"get_account_stats_by_date","summary":"Get daily Wistia account statistics (loads, plays, hours watched), optionally between two dates. Use for \"How many Wisti","description":"Get daily Wistia account statistics (loads, plays, hours watched), optionally between two dates. Use for \"How many Wistia plays per day did I get last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First day, YYYY-MM-DD.","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last day, YYYY-MM-DD.","title":"End Date"}},"title":"get_account_stats_by_dateArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_account_analytics":{"post":{"operationId":"get_account_analytics","summary":"Get Wistia account analytics for a date range: unique loads and plays, plays, play rate, played time, visitors, engageme","description":"Get Wistia account analytics for a date range: unique loads and plays, plays, play rate, played time, visitors, engagement rate and form conversions. Use for \"What was my Wistia play rate and engagement in September 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"First day to include, YYYY-MM-DD.","maxLength":10,"title":"Start Date","type":"string"},"end_date":{"description":"Day the range stops before (exclusive), YYYY-MM-DD.","maxLength":10,"title":"End Date","type":"string"}},"required":["start_date","end_date"],"title":"get_account_analyticsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_top_content":{"post":{"operationId":"get_top_content","summary":"Rank Wistia content (media, channels or folders) by a metric over a date range, with plays, play rate and engagement. Us","description":"Rank Wistia content (media, channels or folders) by a metric over a date range, with plays, play rate and engagement. Use for \"Which of my Wistia videos got the most plays in September 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"First day to include, YYYY-MM-DD.","maxLength":10,"title":"Start Date","type":"string"},"end_date":{"description":"Day the range stops before (exclusive), YYYY-MM-DD.","maxLength":10,"title":"End Date","type":"string"},"group_by":{"anyOf":[{"enum":["media","channel","project"],"type":"string"},{"type":"null"}],"default":"media","description":"What to rank: media, channel or project.","title":"Group By"},"sort_by":{"anyOf":[{"enum":["plays","loads","play_rate","engagement_rate","played_time","unique_visitors"],"type":"string"},{"type":"null"}],"default":"plays","description":"Metric to rank by.","title":"Sort By"},"per_page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results (1 to 1000, default 10).","title":"Per Page"}},"required":["start_date","end_date"],"title":"get_top_contentArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}