openapi: 3.1.1 info: title: Data API description: Wistia Data API version: 1.0.0 servers: - url: https://api.wistia.com/v1 tags: - name: Projects x-displayName: Projects - name: Subfolders x-displayName: Subfolders - name: Project Sharings x-displayName: Project Sharings - name: Media x-displayName: Media - name: Account x-displayName: Account - name: Allowed Domains x-displayName: Allowed Domains - name: Background Job Status x-displayName: Background Job Status - name: Customizations x-displayName: Customizations - name: Captions x-displayName: Captions - name: Trims x-displayName: Trims - name: Localizations x-displayName: Localizations - name: Tags x-displayName: Tags - name: Search x-displayName: Search - name: Channels x-displayName: Channels - name: Channel Episodes x-displayName: Channel Episodes - name: Expiring Access Tokens x-displayName: Expiring Access Tokens - name: Live Stream Events x-displayName: Live Stream Events - name: Live Stream Event Registrations x-displayName: Live Stream Event Registrations - name: Stats:Account x-displayName: Stats:Account - name: Stats:Projects x-displayName: Stats:Projects - name: Stats:Media x-displayName: Stats:Media - name: Stats:Visitors x-displayName: Stats:Visitors - name: Stats:Events x-displayName: Stats:Events paths: /projects: get: summary: Project List description: > Use this endpoint to request a list of Projects in your Wistia account. This request supports paging and sorting. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: page in: query description: Page number to retrieve required: false schema: type: integer - name: per_page in: query description: Number of projects per page required: false schema: type: integer - name: sort_by in: query description: Ordering required: false schema: type: string enum: - name - created - updated - mediaCount - id - name: sort_direction in: query description: Ordering Sort Direction (0 = desc, 1 = asc; default is 1) required: false schema: type: integer enum: - 0 - 1 - name: hashed_ids[] in: query description: A collection of hashed ids belonging to projects to fetch required: false schema: type: array items: type: string responses: '200': description: A list of projects content: application/json: schema: type: array items: $ref: '#/components/schemas/Project' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Projects security: - BearerAuth: [] post: summary: Project Create description: > Create a new project. If the project is created successfully the Location HTTP header will point to the new project. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateProject' responses: '201': description: Project created content: application/json: schema: $ref: '#/components/schemas/Project' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '500': $ref: '#/components/responses/500' tags: - Projects security: - BearerAuth: [] /projects/{id}: get: summary: Project Show description: > Retrieve a single project. Projects#show uses pagination by default - we’ll return up to the first 500 medias in a Project. If you have more than 500 medias in a Project, you’ll need to add a query param, page=2 to get the second page of medias (and the third, etc.). You can check how many pages you will need by looking at the media_count in your first request. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: id in: path description: Project Hashed ID required: true schema: description: Hashed ID of the project (e.g., "4d23503f70") type: string responses: '200': description: A single project content: application/json: schema: $ref: '#/components/schemas/ProjectWithMedias' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Projects security: - BearerAuth: [] put: summary: Project Update description: | Update a project ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: id in: path description: Project Hashed ID required: true schema: description: Hashed ID of the project (e.g., "4d23503f70") type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateProject' responses: '200': description: A single project content: application/json: schema: $ref: '#/components/schemas/Project' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Projects security: - BearerAuth: [] delete: summary: Project Delete description: | Delete a project ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: id in: path description: Project Hashed ID required: true schema: description: Hashed ID of the project (e.g., "4d23503f70") type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Project' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Projects security: - BearerAuth: [] /projects/{id}/copy: post: summary: Project Copy description: > This method does not copy the project’s sharing information (i.e. users that could see the old project will not automatically be able to see the new one). For the request you can specify the owner of a new project by passing an optional parameter. The person you specify must be a Manager in the account. For the response, the HTTP Location header will be set to the URL where the new project resource resides. The body of the response will contain an object representing the new copy of the project that was just created. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: id in: path description: Project Hashed ID required: true schema: description: Hashed ID of the project (e.g., "4d23503f70") type: string requestBody: content: application/json: schema: type: object properties: adminEmail: description: >- The email address of the account Manager that will be the owner of the new project. Defaults to the Account Owner if invalid or omitted. type: string examples: - admin@example.com responses: '201': description: Project copied successfully headers: Location: description: The URL where the new project resource resides. schema: type: string content: application/json: schema: $ref: '#/components/schemas/Project' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Projects security: - BearerAuth: [] /projects/{projectId}/subfolders: get: summary: Subfolder List description: > Use this endpoint to request a list of subfolders in a specific project. This request supports paging and sorting. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: projectId in: path description: The hashed ID of the project required: true schema: type: string examples: - abc123def4 - name: page in: query description: Page number to retrieve required: false schema: type: integer default: 1 minimum: 1 - name: per_page in: query description: Number of subfolders per page required: false schema: type: integer default: 100 maximum: 100 minimum: 1 - name: sort_by in: query description: Field to sort by required: false schema: type: string default: position enum: - name - created - updated - position - id - name: sort_direction in: query description: Sort direction (0 = desc, 1 = asc; default is 1) required: false schema: type: integer default: 1 enum: - 0 - 1 responses: '200': description: A list of subfolders content: application/json: schema: type: array items: $ref: '#/components/schemas/Subfolder' '401': $ref: '#/components/responses/401' '404': description: Project not found content: application/json: schema: type: object properties: error: type: string examples: - Project with ID abc123def4 not found. '500': $ref: '#/components/responses/500' tags: - Subfolders security: - BearerAuth: [] post: summary: Create Subfolder description: > Create a new subfolder within a project. The subfolder will be created with the next available position. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: projectId in: path description: The hashed ID of the project required: true schema: type: string examples: - abc123def4 requestBody: description: Subfolder data required: true content: application/json: schema: $ref: '#/components/schemas/SubfolderInput' example: name: Marketing Videos description: Collection of all marketing and promotional videos responses: '201': description: Subfolder created successfully content: application/json: schema: $ref: '#/components/schemas/Subfolder' '401': $ref: '#/components/responses/401' '404': description: Project not found content: application/json: schema: type: object properties: error: type: string examples: - Project with ID abc123def4 not found. '500': $ref: '#/components/responses/500' tags: - Subfolders security: - BearerAuth: [] /projects/{projectId}/subfolders/{subfolderId}: get: summary: Show Subfolder description: > Retrieve detailed information about a specific subfolder, including all media files contained within it. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: projectId in: path description: The hashed ID of the project required: true schema: type: string examples: - abc123def4 - name: subfolderId in: path description: The hashed ID of the subfolder required: true schema: type: string examples: - xyz789ghi0 - name: description_format in: query description: Format for media descriptions required: false schema: type: string examples: - markdown const: markdown responses: '200': description: Subfolder details with contained media content: application/json: schema: $ref: '#/components/schemas/SubfolderWithMedia' '401': $ref: '#/components/responses/401' '404': description: Project or subfolder not found content: application/json: schema: type: object properties: error: type: string examples: - Subfolder with ID xyz789ghi0 not found. '500': $ref: '#/components/responses/500' tags: - Subfolders security: - BearerAuth: [] put: summary: Update Subfolder description: | Update a subfolder's name and/or description. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: projectId in: path description: The hashed ID of the project required: true schema: type: string examples: - abc123def4 - name: subfolderId in: path description: The hashed ID of the subfolder required: true schema: type: string examples: - xyz789ghi0 requestBody: description: Updated subfolder data required: true content: application/json: schema: type: object properties: name: description: The new name for the subfolder type: string examples: - Updated Marketing Videos maxLength: 255 description: description: The new description for the subfolder type: - string - 'null' examples: - Updated collection of marketing materials maxLength: 1000 example: name: Updated Marketing Videos description: Updated collection of marketing materials responses: '200': description: Subfolder updated successfully content: application/json: schema: $ref: '#/components/schemas/Subfolder' '401': $ref: '#/components/responses/401' '404': description: Project or subfolder not found content: application/json: schema: type: object properties: error: type: string examples: - Subfolder with ID xyz789ghi0 not found. '500': $ref: '#/components/responses/500' tags: - Subfolders security: - BearerAuth: [] delete: summary: Delete Subfolder description: > Delete a subfolder from a project. All media files in the subfolder will be moved to the project's root level. The subfolder is soft-deleted and may be recoverable through other means, but is no longer accessible via the API. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: projectId in: path description: The hashed ID of the project required: true schema: type: string examples: - abc123def4 - name: subfolderId in: path description: The hashed ID of the subfolder required: true schema: type: string examples: - xyz789ghi0 responses: '200': description: Subfolder deleted successfully content: application/json: schema: $ref: '#/components/schemas/Subfolder' example: id: 123 hashed_id: xyz789ghi0 name: Marketing Videos description: Collection of all marketing and promotional videos position: 1 created: '2024-01-15T10:30:00+00:00' updated: '2024-01-20T14:45:00+00:00' '401': $ref: '#/components/responses/401' '404': description: Project or subfolder not found content: application/json: schema: type: object properties: error: type: string examples: - Subfolder with ID xyz789ghi0 not found. '500': $ref: '#/components/responses/500' tags: - Subfolders security: - BearerAuth: [] /projects/{projectId}/sharings: get: summary: Project Sharing List description: > A sharing is an object that links either a contact or a contact group to a project, including information about the contacts' permissions to that project. Retrieve a list of all sharings for a given project. Supports paging and sorting. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data ``` parameters: - name: projectId in: path description: Project Hashed ID required: true schema: description: Hashed ID of the project (e.g., "4d23503f70") type: string - name: page in: query description: Page number to retrieve required: false schema: type: integer - name: per_page in: query description: Number of projects per page required: false schema: type: integer responses: '200': description: Successfully retrieved list of sharings content: application/json: schema: type: array items: $ref: '#/components/schemas/ProjectSharingSchema' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Project Sharings security: - BearerAuth: [] post: summary: Project Sharing Create description: > Create a new sharing object for a project by specifying the email of the person to share with and other optional parameters. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: projectId in: path description: Hashed ID of the project to be shared required: true schema: description: Hashed ID of the project (e.g., "4d23503f70") type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateProjectSharing' responses: '201': description: Project shared successfully headers: Location: description: The API endpoint for the new sharing object. schema: type: string content: application/json: schema: $ref: '#/components/schemas/CreateProjectSharingResponse' '400': description: Bad request content: application/json: schema: type: array items: type: string description: Error message detailing the reason for the bad request. examples: - - email@example.com is already shared on this project. '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Project Sharings security: - BearerAuth: [] /projects/{projectId}/sharings/{sharingId}: get: summary: Project Sharing Show description: | Retrieve the details of a specific sharing object for a given project. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data ``` parameters: - name: projectId in: path description: Hashed ID for the project for which you'd like to see sharings. required: true schema: description: Hashed ID of the project (e.g., "4d23503f70") type: string - name: sharingId in: path description: The ID of the specific sharing object that you want to see. required: true schema: type: integer responses: '200': description: Successfully retrieved sharing details content: application/json: schema: $ref: '#/components/schemas/ProjectSharingSchema' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Project Sharings security: - BearerAuth: [] put: summary: Project Sharing Update description: | Update a sharing on a project. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: projectId in: path description: ID of the project required: true schema: type: string - name: sharingId in: path description: ID of the sharing to be updated required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateSharingRequest' responses: '200': description: Sharing updated successfully content: application/json: schema: $ref: '#/components/schemas/ProjectSharingSchema' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Project Sharings security: - BearerAuth: [] delete: summary: Project Sharing Delete description: | Delete a sharing on a project. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: projectId in: path description: Hashed ID of the project required: true schema: description: Hashed ID of the project (e.g., "4d23503f70") type: string - name: sharingId in: path description: ID of the sharing to be deleted required: true schema: type: string responses: '200': description: Sharing deleted successfully content: application/json: schema: $ref: '#/components/schemas/ProjectSharingSchema' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Project Sharings security: - BearerAuth: [] /medias: get: summary: Media List description: > Obtain a list of all the media in your account. For accounts with more than 100 media, you’ll want to page and sort the returned list. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: page in: query description: | The page number to retrieve. This cannot be combined with `cursor`, pagination. required: false schema: type: integer - name: per_page in: query description: >- The number of medias per page. Use this for both offset pagination and cursor pagination. required: false schema: type: integer - name: cursor in: query description: > If `cursor[enabled]` is set to 1 then cursor pagination is enabled and the first set of records are fetched up to the `per_page`. Cursor pagination will also be turned on if `cursor[before]` or `cursor[after]` are set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering. The cursor value of the last record can be used to fetch records after the current result set and the cursor of the first record can be used to fetch records before the result set. NOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the last fetch. For example, you cannot fetch using `sort_by` id and then pass that cursor value to a `sort_by` name. required: false schema: type: object properties: enabled: description: > If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This values is ignored if `cursor[before]` or `cursor[after]` are set. type: integer enum: - 0 - 1 before: description: > If `cursor[before]` is set then cursor pagination is enabled and all records before the cursor up to the `per_page` are returned. This feature is useful for fetching "new records", for example, in a "pull to refersh" feature when showing records in a descending order. type: string after: description: > If `cursor[after]` is set then cursor pagination is enabled and all records after the cursor up to the `per_page` are returned. type: string style: deepObject - name: sort_by in: query description: > Ordering. When using cursor pagination (see cursor param), only `id` and `created` are supported. All other sort_by options (`name`, `updated`, `position`) require offset pagination. required: false schema: type: string enum: - name - created - updated - position - name: sort_direction in: query description: Ordering Sort Direction (0 = desc, 1 = asc; default is 1) required: false schema: type: integer enum: - 0 - 1 - name: project_id in: query description: >- A hashed ID specifying the project from which you would like to get results. required: false schema: description: Hashed ID of the project (e.g., "4d23503f70") type: string - name: name in: query description: Find a media or medias whose name exactly matches this parameter. required: false schema: type: string - name: description_format in: query description: Format for media descriptions required: false schema: type: string examples: - markdown const: markdown - name: type in: query description: A string specifying which type of media you would like to get. required: false schema: type: string enum: - Video - Audio - Image - PdfDocument - MicrosoftOfficeDocument - Swf - UnknownType - name: hashed_id in: query description: Find the media by hashed_id. required: false schema: type: string - name: hashed_ids[] in: query description: Find all of the medias by these hashed_ids. required: false schema: type: array items: type: string explode: true style: form - name: tags[] in: query description: Find all of the medias that match all of these tag names. required: false schema: type: array items: type: string - name: archived in: query description: >- Filter by archived status. True will return only archived medias, while false will return only active medias. required: false schema: type: boolean responses: '200': description: Successful response content: application/json: schema: type: array items: $ref: '#/components/schemas/MediaIndex' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Media security: - BearerAuth: [] /medias/{mediaHashedId}: get: summary: Media Show description: > Fetch detailed information about a media you’ve uploaded to your account using its hashed_id. CDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8. For more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the media. required: true schema: description: Hashed ID of the media (e.g., "4d23503f70") type: string - name: description_format in: query description: Format for media descriptions required: false schema: type: string examples: - markdown const: markdown responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/MediaShow' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Media security: - BearerAuth: [] put: summary: Media Update description: | Update attributes on a media. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the media. required: true schema: description: Hashed ID of the media (e.g., "4d23503f70") type: string requestBody: required: false content: application/json: schema: type: object properties: name: description: The media’s new name. type: string new_still_media_id: description: > The Wistia hashed ID of an image that will replace the still that’s displayed before the player starts playing. type: string description: description: >- A new description for this media. Accepts plain text or markdown. type: string tags: description: >- An array of tag names to apply to the media. Note that this will replace any existing tags! type: array items: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/MediaUpdate' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Media security: - BearerAuth: [] delete: summary: Media Delete description: | Delete a media. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the media. required: true schema: description: Hashed ID of the media (e.g., "4d23503f70") type: string responses: '200': description: Successful deletion of the media. content: application/json: schema: $ref: '#/components/schemas/MediaProperties' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Media security: - BearerAuth: [] /medias/{mediaHashedId}/copy: post: summary: Media Copy description: | Copy a media. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the media. required: true schema: description: Hashed ID of the media (e.g., "4d23503f70") type: string requestBody: content: application/json: schema: type: object properties: project_id: description: >- The ID of the project where you want the new copy placed. Defaults to the source media’s current project if omitted or invalid. type: integer owner: description: >- An email address specifying the owner of the new media. Defaults to the source media’s current owner if omitted or invalid. type: string format: email responses: '201': description: Successful creation of the media copy. headers: Location: description: The URL where the newly created media resource resides. schema: type: string format: uri content: application/json: schema: $ref: '#/components/schemas/MediaCopy' '400': description: Bad request, e.g. copy failure. content: application/json: schema: type: object properties: error: type: string '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '405': description: Method not allowed, e.g. trying to copy archived media. content: application/json: schema: type: object properties: error: type: string '500': $ref: '#/components/responses/500' tags: - Media security: - BearerAuth: [] /medias/{mediaHashedId}/swap: put: summary: Media Swap description: > Swap one media with another media. This operation queues a background job to replace the original media with the replacement media while preserving the original media's hashed ID and URLs. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the media to be replaced. required: true schema: description: Hashed ID of the media to be replaced. type: string requestBody: content: application/json: schema: type: object properties: replacement_media_id: description: >- The hashed ID of the media that will replace the original media. Must be the same media type as the original. type: string required: - replacement_media_id responses: '200': description: Successfully queued background job for media swap. content: application/json: schema: type: object properties: message: type: string examples: - Media swap has been queued for processing. media: $ref: '#/components/schemas/MediaProperties' background_job_status: $ref: '#/components/schemas/BackgroundJobStatus' '400': description: >- Bad request, e.g. missing replacement_media_id or media type mismatch. content: application/json: schema: type: object properties: error: type: string examples: - >- Replacement media must be the same type as the original media (Video). '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Media security: - BearerAuth: [] /medias/{mediaHashedId}/stats: get: summary: Media Stats description: | Aggregated tracking statistics for a video embedded on your site. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the video. required: true schema: description: Hashed ID of the media (e.g., "4d23503f70") type: string responses: '200': description: Successful retrieval of video statistics. content: application/json: schema: type: object properties: id: description: >- A unique numeric identifier for the video within the system. type: integer hashed_id: description: >- A unique alphanumeric identifier for the video within the system. type: string name: description: The display name of the video. type: string stats: description: >- An object representing the aggregated embed statistics for this video. type: object properties: pageLoads: description: >- The total number of times that the page containing the embedded video has been loaded. type: integer visitors: description: >- The number of unique visitors to the page containing the embedded video. type: integer percentOfVisitorsClickingPlay: description: >- An integer between 0 and 100 that shows what percentage of the time someone who saw the page containing the embedded video played the video. type: integer plays: description: >- The total number of times that the video has been played. type: integer averagePercentWatched: description: >- An integer between 0 and 100. It shows the average percentage of the video that was watched over every time the video was played. type: integer '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Media security: - BearerAuth: [] /medias/{mediaHashedId}/translate: post: summary: Media Translate description: | Translate the transcript for a media. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the media. required: true schema: type: string requestBody: content: application/json: schema: type: object properties: target_language: description: >- The language to translate the transcript to as a 3-character IETF language code. type: string source_language: description: >- The language of the source transcript to be translated as a 3-character IETF language code. If not provided, the media's default transcript language will be used. type: string required: - target_language responses: '201': description: >- Successfully queued background job for translation of the transcript. content: application/json: schema: type: object properties: message: type: string examples: - >- Translation request has been successfully queued for processing. background_job_status: $ref: '#/components/schemas/BackgroundJobStatus' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '422': description: Unprocessible entity, parameters provided were invalid. content: application/json: schema: type: object properties: error: description: Error message detailing why the request failed. type: string '500': $ref: '#/components/responses/500' tags: - Media security: - BearerAuth: [] /medias/archive: put: summary: Medias Archive description: > 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 Livestream medias and Soapbox videos imported to Wistia before September 1, 2023 cannot be archived. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` requestBody: required: true content: application/json: schema: type: object properties: hashed_ids: description: An array of the media hashed IDs to be archived. type: array items: type: string required: - hashed_ids responses: '200': description: Successful archival of media. content: application/json: schema: type: object properties: message: description: >- A confirmation message that the background job has been queued. type: string background_job_status: $ref: '#/components/schemas/BackgroundJobStatus' '401': $ref: '#/components/responses/401' '403': description: Forbidden, e.g. account does not have access to archiving. content: application/json: schema: type: object properties: error: type: string '422': description: Unprocessable entity, e.g. too many media requested. content: application/json: schema: type: object properties: error: type: string '500': $ref: '#/components/responses/500' tags: - Media security: - BearerAuth: [] /medias/move: put: summary: Media Move description: > Move one or many media to a different project and optionally to a specific subfolder. Max 100 media per request, and max 10 requests in 5 minutes. Note: this is a different rate limit than applies to the rest of the api! If a subfolder_id is provided, media will be moved to that subfolder. The subfolder must belong to the specified project. Returns a Background Job as the move is async. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` requestBody: required: true content: application/json: schema: type: object properties: hashed_ids: description: An array of the media hashed IDs to be moved. type: array items: type: string project_id: description: The hashed ID of the project where you want the media moved. type: string subfolder_id: description: >- Optional. The hashed ID of the subfolder where you want the media moved. If not provided, media will be moved to the project's default subfolder. The subfolder must belong to the specified project. type: string required: - hashed_ids - project_id responses: '200': description: Successfully queued move of all the media. content: application/json: schema: type: object properties: message: type: string background_job_status: $ref: '#/components/schemas/BackgroundJobStatus' '207': description: >- Successfully queued move of at least one media. Other provided hashed_ids failed. content: application/json: schema: type: object properties: message: type: string background_job_status: $ref: '#/components/schemas/BackgroundJobStatus' partial_errors: type: array items: type: object properties: media_id: type: string error: type: string '400': description: Invalid request. content: application/json: schema: type: object properties: error: type: string example: error: You can only request to move 100 or less media at one time. '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Media security: - BearerAuth: [] /medias/restore: put: summary: Media Restore description: > Restore archived medias to your account. This method accepts a list of up to 100 medias to restore per request. It processes requests asynchronously and will return a background_job_status object rather than the typical Media response object. Your account must have access to the Archiving feature to use this method. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` requestBody: required: true content: application/json: schema: type: object properties: hashed_ids: description: An array of the media hashed IDs to be restored. type: array items: type: string project_id: description: The hashed ID of the project to restore the medias to. type: string required: - hashed_ids - project_id responses: '200': description: Successful restoration of media. content: application/json: schema: type: object properties: message: description: >- A confirmation message that the background job has been queued. type: string container: type: object properties: type: description: The type of container the medias will be restored to. type: string name: description: >- The display name of the container the medias will be restored to. type: string hashedId: description: >- The hashed ID of the container the medias will be restored to. type: string background_job_status: $ref: '#/components/schemas/BackgroundJobStatus' '401': $ref: '#/components/responses/401' '403': description: Forbidden, e.g. account does not have access to archiving. content: application/json: schema: type: object properties: error: type: string '404': $ref: '#/components/responses/404' '422': description: Missing arguments for restoration of media. content: application/json: schema: type: object properties: error: description: >- An error message that the necessary parameters were not provided. type: string examples: - >- Incorrect number of parameters provided. Provide one project_id. '500': $ref: '#/components/responses/500' tags: - Media security: - BearerAuth: [] /account: get: operationId: getAccountDetails summary: Account Show description: | Retrieve account details. ## Requires api token with one of the following permissions ``` (any scope allowed) ``` responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Account' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Account security: - BearerAuth: [] /allowed_domains: get: summary: Allowed Domains List description: | List all allowed domains for the account. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: page in: query description: Page number for pagination required: false schema: type: integer default: 1 minimum: 1 - name: per_page in: query description: Number of items per page required: false schema: type: integer default: 100 maximum: 100 minimum: 1 responses: '200': description: List of allowed domains content: application/json: schema: type: array items: $ref: '#/components/schemas/AllowedDomain' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Allowed Domains security: - BearerAuth: [] post: summary: Allowed Domain Create description: | Create a new allowed domain for the account. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` requestBody: required: true content: application/json: schema: type: object properties: domain: description: The domain name to add (www will be automatically stripped) type: string examples: - example.com required: - domain responses: '200': description: Allowed domain created successfully (or already exists) content: application/json: schema: $ref: '#/components/schemas/AllowedDomain' '400': description: Bad request - missing or invalid domain content: application/json: schema: type: object properties: error: type: string examples: - >- The domain's format doesn't look correct. It should be formatted like "mydomain.com" '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Allowed Domains security: - BearerAuth: [] /allowed_domains/{domain}: get: summary: Allowed Domain Show description: | Get details for a specific allowed domain. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: domain in: path description: The domain name to retrieve required: true schema: type: string examples: - example.com responses: '200': description: Allowed domain details content: application/json: schema: $ref: '#/components/schemas/AllowedDomain' '401': $ref: '#/components/responses/401' '404': description: Domain not found content: application/json: schema: type: object properties: error: type: string examples: - domain was not found '500': $ref: '#/components/responses/500' tags: - Allowed Domains security: - BearerAuth: [] delete: summary: Allowed Domain Delete description: | Delete an allowed domain from the account. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: domain in: path description: The domain name to delete required: true schema: type: string examples: - example.com responses: '200': description: Allowed domain deleted successfully content: application/json: schema: $ref: '#/components/schemas/AllowedDomain' '401': $ref: '#/components/responses/401' '404': description: Domain not found content: application/json: schema: type: object properties: error: type: string examples: - domain was not found '500': $ref: '#/components/responses/500' tags: - Allowed Domains security: - BearerAuth: [] /background_job_status/{backgroundJobStatusId}: get: summary: Background Job Status Show description: | Retrieve the status of a background job. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data ``` parameters: - name: backgroundJobStatusId in: path description: The numeric ID of the background job required: true schema: type: integer responses: '200': description: OK content: application/json: schema: type: object properties: background_job_status: $ref: '#/components/schemas/BackgroundJobStatus' required: - background_job_status '401': $ref: '#/components/responses/401' '403': description: Background Job Status Not Associated with An Authorized Object content: application/json: schema: type: object properties: error: type: string examples: - >- The requested background job status is not associated with an authorized object. '404': $ref: '#/components/responses/404-2' '500': $ref: '#/components/responses/500' tags: - Background Job Status security: - BearerAuth: [] /medias/{mediaId}/customizations: get: summary: Customizations Show description: | Fetches explicitly defined customizations for the video. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: mediaId in: path description: The hashed ID of the video. required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/VideoCustomizationResponse' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Customizations security: - BearerAuth: [] post: summary: Customizations Create description: > Set customizations for a video. Replaces the customizations explicitly set for this video. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaId in: path description: The hashed ID of the video. required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/VideoCustomization' responses: '201': description: Successful response content: application/json: schema: $ref: '#/components/schemas/VideoCustomizationResponse' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Customizations security: - BearerAuth: [] put: summary: Customizations Update description: > Allows for partial updates on a video’s customizations. If a value is null, then that key will be deleted from the saved customizations. If it is not null, that value will be set. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaId in: path description: The hashed ID of the video to be customized. required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/VideoCustomization' responses: '200': description: Video customization update successful content: application/json: schema: $ref: '#/components/schemas/VideoCustomizationResponse' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Customizations security: - BearerAuth: [] delete: summary: Customizations Delete description: > Deletes all explicit customizations for a video, making it act as if it has never been customized. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaId in: path description: The hashed ID of the media whose customizations are to be deleted. required: true schema: type: string responses: '200': description: Video customization deletion successful '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Customizations security: - BearerAuth: [] /medias/{mediaHashedId}/captions: get: summary: Captions List filtered by media description: > Returns all the captions associated with a specified video. If captions do not exist for this video, the response will be an empty JSON array. If this video does not exist, the response will be an empty HTTP 404 Not Found. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the media for which captions are to be retrieved. required: true schema: type: string responses: '200': description: Captions retrieval successful content: application/json: schema: type: array items: $ref: '#/components/schemas/Caption' '401': $ref: '#/components/responses/401' '404': description: Video not found '500': $ref: '#/components/responses/500' tags: - Captions security: - BearerAuth: [] post: summary: Captions Create description: > Adds captions to a specified video by providing an SRT file or its contents directly. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the media for which captions are to be added. required: true schema: type: string requestBody: required: true content: application/json: schema: type: object properties: caption_file: description: >- Either an attached SRT file or a string parameter with the contents of an SRT file. type: string language: description: >- 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. type: string required: - caption_file multipart/form-data: schema: type: object properties: caption_file: description: >- Either an attached SRT file or a string parameter with the contents of an SRT file. type: string format: binary language: description: >- 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. type: string required: - caption_file responses: '200': description: Captions added successfully '400': description: Captions already exist for this video '401': $ref: '#/components/responses/401' '404': description: Video not found '500': $ref: '#/components/responses/500' tags: - Captions security: - BearerAuth: [] /captions: get: summary: Captions List description: > Returns all the captions associated with the account, and allows for filtering by a particular video. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: media_id in: query description: >- Find captions for a particular video by providing the media hashed ID required: false schema: type: string - name: page in: query description: Page number to retrieve required: false schema: type: integer - name: per_page in: query description: Number of items per page required: false schema: type: integer responses: '200': description: Captions retrieval successful content: application/json: schema: type: array items: $ref: '#/components/schemas/Caption' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Captions security: - BearerAuth: [] /medias/{mediaHashedId}/captions/purchase: post: deprecated: true x-internal: true summary: Captions Purchase description: > This method is for purchasing English captions for a video. The request will charge the credit card on the account if successful. A saved credit card is required to use this endpoint. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: Unique identifier for the video. required: true schema: type: string requestBody: required: true content: application/json: schema: type: object properties: automated: description: >- Order computer-generated captions or paid human-generated captions. type: boolean default: false rush: description: >- Enable rush order for one business day turnaround or standard four business day turnaround for human-generated captions. Rush can only be used for human-generated captions. type: boolean default: false automatically_enable: description: >- Automatically enable captions for the video once the order is ready or hold the captions for review before manually enabling. type: boolean default: true required: - automated - rush - automatically_enable responses: '200': description: Successful operation. Captions purchased. content: application/json: schema: type: object properties: message: description: >- Success message indicating the captions have been purchased type: string examples: - >- Captions purchased for this video. Your account will be charged when the captions are ready. id: description: >- The unique hashed identifier of the time-coded transcript that was created type: string examples: - abc123def456 required: - message - id '400': description: English captions already exist for this video. '401': $ref: '#/components/responses/401' '404': description: Video not found. '422': description: >- Unprocessable entity. Account not eligible, captions already purchased, or other validation error. content: application/json: schema: type: object properties: message: description: >- Error message explaining why the purchase cannot be completed type: string '500': $ref: '#/components/responses/500' tags: - Captions security: - BearerAuth: [] /medias/{mediaHashedId}/captions/order: post: summary: Order Captions description: > This method is for ordering English captions for a video. By default, this endpoint orders computer-generated (automated) captions. Set `automated` to `false` to order human-generated captions instead. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: Unique identifier for the video. required: true schema: type: string requestBody: required: false content: application/json: schema: type: object properties: automated: description: >- Order computer-generated captions or paid human-generated captions. Defaults to true (computer-generated). type: boolean default: true rush: description: >- Enable rush order for one business day turnaround or standard four business day turnaround for human-generated captions. Rush can only be used for human-generated captions. type: boolean default: false automatically_enable: description: >- Automatically enable captions for the video once the order is ready or hold the captions for review before manually enabling. type: boolean default: true responses: '200': description: Successful operation. Captions ordered. content: application/json: schema: type: object properties: message: description: >- Success message indicating the captions have been purchased type: string examples: - >- Captions purchased for this video. Your account will be charged when the captions are ready. id: description: >- The unique hashed identifier of the time-coded transcript that was created type: string examples: - abc123def456 required: - message - id '400': description: English captions already exist for this video. '401': $ref: '#/components/responses/401' '404': description: Video not found. '422': description: >- Unprocessable entity. Account not eligible, captions already ordered, or other validation error. content: application/json: schema: type: object properties: message: description: Error message explaining why the order cannot be completed type: string '500': $ref: '#/components/responses/500' tags: - Captions security: - BearerAuth: [] /medias/{mediaHashedId}/captions/{languageCode}: get: summary: Captions Show description: > Returns a video'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, update & delete anything Read all data Read all folder and media data ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the media from which captions are to be retrieved. required: true schema: type: string - name: languageCode in: path description: >- The 3-character ISO 639-2 language code of the captions to be retrieved (e.g., `eng`, `fra`, `spa`). Some languages use extended IETF subtags (e.g., `zh-Hant`). required: true schema: type: string responses: '200': description: Successful response containing captions in the requested format content: application/json: schema: $ref: '#/components/schemas/Caption' text/plain: schema: description: Caption content in SRT or TXT format type: string text/vtt: schema: description: Caption content in VTT format type: string '401': $ref: '#/components/responses/401' '404': description: Captions not found or video not found '500': $ref: '#/components/responses/500' tags: - Captions security: - BearerAuth: [] put: summary: Captions Update description: > This method is for replacing the captions on a video for the specified language. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: Unique identifier for the video. required: true schema: type: string - name: languageCode in: path description: >- Language code conforming to ISO-639-2 for which the captions should be updated. required: true schema: type: string pattern: ^[a-z]{3}$ requestBody: required: true content: application/json: schema: type: object properties: caption_file: description: >- Either an attached SRT file or a string parameter with the contents of an SRT file. type: string required: - caption_file multipart/form-data: schema: type: object properties: caption_file: description: >- Either an attached SRT file or a string parameter with the contents of an SRT file. type: string format: binary required: - caption_file responses: '200': description: Successful operation. Captions replaced. '401': $ref: '#/components/responses/401' '404': description: Captions or video not found. '500': $ref: '#/components/responses/500' tags: - Captions security: - BearerAuth: [] delete: summary: Captions Delete description: > This method is for removing the captions file from a video for the specified language. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: Unique identifier for the video. required: true schema: type: string - name: languageCode in: path description: >- Language code conforming to ISO-639-2 for which the captions should be removed. required: true schema: type: string pattern: ^[a-z]{3}$ responses: '200': description: Successful operation. Captions removed. '401': $ref: '#/components/responses/401' '404': description: Captions or video not found. '500': $ref: '#/components/responses/500' tags: - Captions security: - BearerAuth: [] /medias/{mediaHashedId}/trims: post: summary: Trims Create description: | Creates a new media that trims off parts of an existing media ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the media. required: true schema: type: string requestBody: required: true content: application/json: schema: type: object properties: trims: description: >- 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. The ranges should contain the earliest point of the trim first and the later point of the trim second. type: array items: type: string required: - trims responses: '200': description: Successful queueing of trims worker. content: application/json: schema: type: object properties: background_job_status: $ref: '#/components/schemas/BackgroundJobStatus' '401': $ref: '#/components/responses/401' '422': $ref: '#/components/responses/422' '500': $ref: '#/components/responses/500' tags: - Trims security: - BearerAuth: [] /medias/{mediaHashedId}/localizations: get: summary: Localizations List description: | Obtain a list of all the localizations for a media. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the media to list localizations for. required: true schema: type: string - name: include_transcript in: query description: Whether to include the transcript in the response. required: false schema: type: boolean default: false responses: '200': description: Successful response content: application/json: schema: type: array items: $ref: '#/components/schemas/Localization' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Localizations security: - BearerAuth: [] post: summary: Localizations Create description: | Create a new localization. Creating a localization incurs a charge on your account. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the media to create a localization for. required: true schema: type: string requestBody: content: application/json: schema: type: object properties: output_language: description: >- The language to localize the media to as a 3-character IETF language code. type: string auto_enable: description: Whether to automatically enable the localization. type: boolean default: true required: - output_language responses: '201': description: Successful creation of the localization. content: application/json: schema: $ref: '#/components/schemas/LocalizationWithPurchaseData' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '422': description: Unprocessible entity, parameters provided were invalid. content: application/json: schema: type: object properties: error: description: Error message detailing why the request failed. type: string '500': $ref: '#/components/responses/500' tags: - Localizations security: - BearerAuth: [] /medias/{mediaHashedId}/localizations/{localizationHashedId}: get: summary: Localizations Show description: | Obtain detailed information about a localization. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the localization's media. required: true schema: type: string - name: localizationHashedId in: path description: The hashed ID of the localization. required: true schema: type: string - name: include_transcript in: query description: Whether to include the transcript in the response. required: false schema: type: boolean default: false responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Localization' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Localizations security: - BearerAuth: [] delete: summary: Localizations Delete description: | Delete a localization. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: mediaHashedId in: path description: The hashed ID of the localization's media. required: true schema: type: string - name: localizationHashedId in: path description: The hashed ID of the localization to delete. required: true schema: type: string responses: '200': description: Successful deletion of the localization. content: application/json: schema: $ref: '#/components/schemas/Localization' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Localizations security: - BearerAuth: [] /tags: get: summary: Tags List description: > Use this endpoint to request a list of Tags in your Wistia account. This request supports paging and sorting. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data ``` parameters: - name: page in: query description: Page number to retrieve required: false schema: type: integer - name: per_page in: query description: Number of tags per page required: false schema: type: integer - name: sort_by in: query description: Ordering required: false schema: type: string enum: - name - created - updated - taggingsCount - name: sort_direction in: query description: Ordering Sort Direction (0 = desc, 1 = asc) required: false schema: type: integer enum: - 0 - 1 responses: '200': description: A list of tags content: application/json: schema: type: array items: $ref: '#/components/schemas/Tag' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Tags security: - BearerAuth: [] post: summary: Tags Create description: | Create a new tag. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` requestBody: required: true content: application/json: schema: type: object properties: name: type: string required: - name responses: '200': description: Tag created successfully content: application/json: schema: $ref: '#/components/schemas/Tag' '400': description: Bad request - missing or invalid parameters content: application/json: schema: type: object properties: error: type: string examples: - 'param is missing or the value is empty: name' '401': $ref: '#/components/responses/401' '422': description: Validation error - tag already exists content: application/json: schema: type: object properties: error: type: string examples: - 'Validation failed: Name has already been taken' '500': $ref: '#/components/responses/500' tags: - Tags security: - BearerAuth: [] /tags/{name}: delete: summary: Tags Delete description: | Delete a tag ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: name in: path description: Tag ID required: true schema: description: Name of the tag to delete type: string responses: '200': description: Successful response. '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404-2' '500': $ref: '#/components/responses/500' tags: - Tags security: - BearerAuth: [] /search: get: summary: Search description: | Search across projects, medias, channels, and channel episodes. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: q in: query description: The search query string required: true schema: type: string example: screencast responses: '200': description: Search results content: application/json: schema: type: object properties: data: type: object properties: projects: type: array items: $ref: '#/components/schemas/Project' medias: type: array items: $ref: '#/components/schemas/SearchMedia' channels: type: array items: $ref: '#/components/schemas/SearchChannel' channelEpisodes: type: array items: $ref: '#/components/schemas/SearchChannelEpisode' required: - projects - medias - channels - channelEpisodes required: - data '400': description: Bad request - missing query parameter content: application/json: schema: type: object properties: error: type: string examples: - >- the "q" parameter should specify the search query, e.g. "q=screencast" '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Search security: - BearerAuth: [] /channels: get: summary: Channels List description: | Returns all the Channels associated with the account. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: page in: query description: Page number to retrieve required: false schema: type: integer - name: per_page in: query description: Number of channels per page required: false schema: type: integer - name: sort_by in: query description: Ordering. Default is ID ASC. required: false schema: type: string enum: - created - id - updated - name - name: sort_direction in: query description: Ordering Sort Direction (0 = desc, 1 = asc; default is 1) required: false schema: type: integer enum: - 0 - 1 - name: hashed_ids[] in: query description: Find all of the channels limited to these hashed_ids. required: false schema: type: array items: type: string explode: true style: form responses: '200': description: Channels retrieval successful content: application/json: schema: type: array items: $ref: '#/components/schemas/Channel' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Channels security: - BearerAuth: [] /channels/{channelHashedId}: get: summary: Channels Show description: | Returns the Channel associated with the hashedId. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: channelHashedId in: path description: The hashed ID of the channel. required: true schema: description: Hashed ID of the channel (e.g., "4d23503f70") type: string responses: '200': description: Channel retrieval successful content: application/json: schema: $ref: '#/components/schemas/Channel' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' tags: - Channels security: - BearerAuth: [] /channels/{channelHashedId}/channel_episodes/{channelEpisodeId}: get: summary: Channel Episodes Show description: | Returns the Channel Episode associated with the hashedId. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: channelHashedId in: path description: The hashed ID of the channel. required: true schema: description: Hashed ID of the channel (e.g., "4d23503f70") type: string - name: channelEpisodeId in: path description: The hashed ID of the channel episode. required: true schema: description: Hashed ID of the channel episode (e.g., "4d23503f70") type: string responses: '200': description: Channel Episode retrieval successful content: application/json: schema: $ref: '#/components/schemas/ChannelEpisode' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Channel Episodes security: - BearerAuth: [] /channels/{channelHashedId}/channel_episodes: get: summary: Channel Episodes List filtered by channel description: > Returns all the Channel Episodes belonging the channel passed in the path. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: channelHashedId in: path description: The hashed ID of the channel to grab channel episodes from. required: true schema: type: string - $ref: '#/components/parameters/sort_by' - $ref: '#/components/parameters/sort_direction' - $ref: '#/components/parameters/page' - $ref: '#/components/parameters/per_page' - $ref: '#/components/parameters/media_id' - $ref: '#/components/parameters/hashed_id' - $ref: '#/components/parameters/published' - $ref: '#/components/parameters/title' responses: '200': description: Channel Episodes retrieval successful content: application/json: schema: type: array items: $ref: '#/components/schemas/ChannelEpisode' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Channel Episodes security: - BearerAuth: [] post: summary: Channel Episode Create description: | Creates a new channel episode in a channel. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: channelHashedId in: path description: The hashed ID of the channel to add the episode to. required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateChannelEpisode' responses: '200': description: Channel Episode creation successful content: application/json: schema: $ref: '#/components/schemas/ChannelEpisode' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Channel Episodes security: - BearerAuth: [] /channel_episodes: get: summary: Channel Episodes List description: > Returns all the Channel Episodes associated with the account, and allows for filtering by a particular channel. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - $ref: '#/components/parameters/sort_by' - $ref: '#/components/parameters/sort_direction' - $ref: '#/components/parameters/page' - $ref: '#/components/parameters/per_page' - $ref: '#/components/parameters/media_id' - $ref: '#/components/parameters/hashed_id' - $ref: '#/components/parameters/published' - $ref: '#/components/parameters/title' responses: '200': description: Channel Episodes retrieval successful content: application/json: schema: type: array items: $ref: '#/components/schemas/ChannelEpisode' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Channel Episodes security: - BearerAuth: [] /expiring_token: post: summary: Create an expiring access token description: > ``` 🚫 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. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` requestBody: required: false content: application/json: schema: type: object properties: expiring_access_token: $ref: '#/components/schemas/ExpiringAccessTokenInput' responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/ExpiringAccessTokenResponse' '401': $ref: '#/components/responses/401' '422': $ref: '#/components/responses/422' '500': $ref: '#/components/responses/500' '501': description: >- Not implemented - expiring tokens cannot be created from other expiring tokens content: application/json: schema: type: object properties: error: type: string examples: - >- Expiring tokens can only be created from non-expiring access tokens. tags: - Expiring Access Tokens security: - BearerAuth: [] /live_stream_events: get: summary: Live Stream Events List description: > Use this endpoint to request a list of Live Stream Events in your Wistia account. This request supports paging and sorting. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: page in: query description: Page number to retrieve required: false schema: type: integer - name: per_page in: query description: Number of events per page (maximum 100) required: false schema: type: integer maximum: 100 - name: sort_by in: query description: Field to sort by required: false schema: type: string enum: - scheduled_for - id - name: sort_direction in: query description: Sort direction (1 for ascending, -1 for descending) required: false schema: type: string enum: - '1' - '-1' - name: hashed_ids[] in: query description: Filter by specific event IDs required: false schema: type: array items: type: string - name: started in: query description: >- Filter by whether the event has started. Use "true" for events that have started, "false" for events that have not started yet required: false schema: type: string enum: - 'true' - 'false' responses: '200': description: Successful response with a list of live stream events content: application/json: schema: type: array items: $ref: '#/components/schemas/LiveStreamEvent' '401': $ref: '#/components/responses/401' '403': description: Live streaming feature not available content: application/json: schema: type: object properties: error: type: string examples: - Live streaming is not available on your current plan '500': $ref: '#/components/responses/500' tags: - Live Stream Events security: - BearerAuth: [] post: summary: Live Stream Event Create description: > Create a new live stream event. The event will be created synchronously and return the event details with audience and host links. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` ## Rate Limiting This endpoint is rate limited to 60 requests per minute per IP address. ## Feature Access This endpoint requires the live streaming feature to be enabled on your account plan. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateLiveStreamEvent' responses: '201': description: Live stream event created successfully content: application/json: schema: $ref: '#/components/schemas/LiveStreamEvent' '401': $ref: '#/components/responses/401' '403': description: Live streaming feature not available content: application/json: schema: type: object properties: error: type: string examples: - Live streaming is not available on your current plan '422': description: Validation errors content: application/json: schema: type: object properties: errors: type: array items: type: string examples: - - Title is required - Event duration must be at least 15 minutes '429': description: Rate limit exceeded content: text/plain: schema: type: string examples: - Rate limit exceeded '500': description: Internal server error during event creation content: application/json: schema: type: object properties: errors: type: array items: type: string examples: - - >- An error occurred while creating the live stream event. Please try again. tags: - Live Stream Events security: - BearerAuth: [] /live_stream_events/{id}: get: summary: Live Stream Event Show description: | Retrieve information for a single live stream event. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: id in: path description: The hashed ID of the live stream event required: true schema: type: string responses: '200': description: Successful response with the live stream event details content: application/json: schema: $ref: '#/components/schemas/LiveStreamEvent' '401': $ref: '#/components/responses/401' '403': description: Live streaming feature not available content: application/json: schema: type: object properties: error: type: string examples: - Live streaming is not available on your current plan '404': description: Live stream event not found '500': $ref: '#/components/responses/500' tags: - Live Stream Events security: - BearerAuth: [] put: summary: Live Stream Event Update description: | Update an existing live stream event. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: id in: path description: The hashed ID of the live stream event required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateLiveStreamEvent' responses: '200': description: Live stream event updated successfully content: application/json: schema: $ref: '#/components/schemas/LiveStreamEvent' '401': $ref: '#/components/responses/401' '403': description: Live streaming feature not available content: application/json: schema: type: object properties: error: type: string examples: - Live streaming is not available on your current plan '404': description: Live stream event not found '422': description: Validation errors content: application/json: schema: type: object properties: errors: type: array items: type: string examples: - - Title is required - Event duration must be at least 15 minutes '500': $ref: '#/components/responses/500' tags: - Live Stream Events security: - BearerAuth: [] delete: summary: Live Stream Event Delete description: | Delete an existing live stream event. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: id in: path description: The hashed ID of the live stream event required: true schema: type: string responses: '200': description: Live stream event deleted successfully content: application/json: schema: $ref: '#/components/schemas/LiveStreamEvent' '401': $ref: '#/components/responses/401' '403': description: Live streaming feature not available content: application/json: schema: type: object properties: error: type: string examples: - Live streaming is not available on your current plan '404': description: Live stream event not found '500': $ref: '#/components/responses/500' tags: - Live Stream Events security: - BearerAuth: [] /live_stream_events/{liveStreamEventId}/registrations: post: summary: Create Live Event Registration description: > Register a person for a live event by providing their email, first name, and last name. This endpoint generates a unique visitor key and returns a personalized event URL for the registrant. ## Requires api token with one of the following permissions ``` Read, update & delete anything ``` parameters: - name: liveStreamEventId in: path description: Hashed ID of the live stream event required: true schema: description: Hashed ID of the live stream event (e.g., "abc123xyz") type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateRegistration' responses: '201': description: Registration created successfully content: application/json: schema: $ref: '#/components/schemas/RegistrationResponse' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '422': $ref: '#/components/responses/422' '500': $ref: '#/components/responses/500' tags: - Live Stream Event Registrations security: - BearerAuth: [] /stats/account: get: summary: Stats:Account Show description: > 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, update & delete anything Read all data Read all folder and media data ``` responses: '200': description: Successful operation. Account stats retrieved. content: application/json: schema: type: object properties: load_count: description: >- The total number of times all of the videos from this account have been loaded. type: integer play_count: description: >- The total number of times all of the videos from this account have been played. type: integer hours_watched: description: >- The total amount of time spent watching all of the videos in this account. type: number format: float required: - load_count - play_count - hours_watched '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Stats:Account security: - BearerAuth: [] /stats/projects/{projectId}: get: summary: Stats:Projects Show description: > 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, update & delete anything Read all data Read all folder and media data ``` parameters: - name: projectId in: path description: >- The Hashed ID or ID of the project for which you want to retrieve stats. required: true schema: description: >- The hashed ID or numeric ID of the project (e.g., "4d23503f70" or "22570") type: string responses: '200': description: Success response with the stats of the project. content: application/json: schema: type: object properties: load_count: description: >- The total number of times the videos in this project have been loaded. type: integer play_count: description: >- The total number of times the videos in this project have been played. type: integer hours_watched: description: The total time spent viewing the videos in this project. type: number format: float number_of_videos: description: The total number of videos in this project. type: integer deprecated: true '401': $ref: '#/components/responses/401' '404': description: Project not found or does not belong to account content: {} '500': $ref: '#/components/responses/500' tags: - Stats:Projects security: - BearerAuth: [] /stats/medias/{mediaId}: get: summary: Stats:Media Show description: > 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, update & delete anything Read all data Read all folder and media data ``` parameters: - name: mediaId in: path description: >- The hashed ID or ID of the video for which you want to retrieve stats. required: true schema: description: >- The hashed ID or numeric ID of the media (e.g., "4d23503f70" or "22570") type: string responses: '200': description: Success response with the stats of the video. content: application/json: schema: type: object properties: load_count: description: The total number of times this video has been loaded. type: integer play_count: description: The total number of times this video has been played. type: integer play_rate: description: >- The percentage of visitors who clicked play (between 0 and 1). type: number format: float hours_watched: description: The total time spent watching this video. type: number format: float engagement: description: >- The average percentage of the video that gets viewed (between 0 and 1). type: number format: float visitors: description: >- The total number of unique people that have loaded this video. type: integer actions: type: array items: type: object properties: type: description: Type of action (e.g., "Call to Action"). type: string action_count: description: Number of actions performed. type: integer impression_count: description: Number of times the action was shown. type: integer rate: description: The rate of actions performed over impressions. type: number format: float '401': $ref: '#/components/responses/401' '404': description: Media not found or does not belong to account content: {} '500': $ref: '#/components/responses/500' tags: - Stats:Media security: - BearerAuth: [] /stats/medias/{mediaId}/by_date: get: summary: Stats:Media By Date description: > 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, update & delete anything Read all data Read all folder and media data ``` parameters: - name: mediaId in: path description: The ID of the media required: true schema: type: string - name: start_date in: query description: The start date for the stats, formatted YYYY-MM-DD required: false schema: type: string format: date example: '2024-02-21' - name: end_date in: query description: The end date for the stats, formatted YYYY-MM-DD required: false schema: type: string format: date example: '2024-02-23' responses: '200': description: A list of media stats by date content: application/json: schema: type: array items: type: object properties: date: type: string format: date load_count: type: integer play_count: type: integer hours_watched: type: number '401': $ref: '#/components/responses/401' '404': description: Media not found or does not belong to account content: {} '500': $ref: '#/components/responses/500' tags: - Stats:Media security: - BearerAuth: [] /stats/medias/{mediaId}/engagement: get: summary: Stats:Media Engagement description: > 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, update & delete anything Read all data Read all folder and media data ``` parameters: - name: mediaId in: path description: >- The hashed ID or ID of the video for which you want to retrieve engagement data. required: true schema: description: >- The hashed ID or numeric ID of the media (e.g., "4d23503f70" or "22570") type: string responses: '200': description: Success response with the engagement data of the video. content: application/json: schema: type: object properties: engagement: description: >- The percentage of the video that was viewed, averaged across all viewing sessions. type: number format: float engagement_data: description: An array for creating an engagement graph. type: array items: type: integer rewatch_data: description: >- An array for creating the rewatch block on an engagement graph. type: array items: type: integer '401': $ref: '#/components/responses/401' '404': description: Media not found or does not belong to account content: {} '500': $ref: '#/components/responses/500' tags: - Stats:Media security: - BearerAuth: [] /stats/visitors: get: summary: Stats:Visitors List description: > This endpoint provides a list of visitors that have watched videos in your account. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: page in: query description: The page of results based on the per_page parameter. schema: type: integer - name: per_page in: query description: The maximum number of results to return, capped at 100. schema: type: integer - name: filter in: query description: Filtering parameter to narrow down the list of visitors. schema: type: string enum: - has_name - has_email - identified_by_email_gate - name: search in: query description: Search for visitors based on name or email address. schema: type: string responses: '200': description: Successful response with a list of visitors. content: application/json: schema: type: array items: $ref: '#/components/schemas/Visitor' '401': $ref: '#/components/responses/401' '500': $ref: '#/components/responses/500' tags: - Stats:Visitors security: - BearerAuth: [] /stats/visitors/{visitorKey}: get: summary: Stats:Visitors Show description: | This endpoint provides detailed information about a specific visitor. ## Requires api token with one of the following permissions ``` Read, update & delete anything Read all data Read all folder and media data ``` parameters: - name: visitorKey in: path description: The unique key of the visitor. required: true schema: type: string responses: '200': description: Successful response with details of a single visitor. content: application/json: schema: $ref: '#/components/schemas/Visitor' '401': $ref: '#/components/responses/401' '404': description: Visitor not found content: {} '500': $ref: '#/components/responses/500' tags: - Stats:Visitors security: - BearerAuth: [] /stats/events: get: summary: Stats:Events List description: > 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, update & delete anything Read all data Read all folder and media data ``` parameters: - name: media_id in: query description: An optional identifier for a specific video. schema: type: string - name: visitor_key in: query description: An optional identifier for a specific visitor. schema: type: string - name: per_page in: query description: Maximum number of events to retrieve (capped at 100). schema: type: integer - name: page in: query description: The page of events to get data from. schema: type: integer - name: start_date in: query description: Start date in the format 'YYYY-MM-DD'. schema: type: string format: date - name: end_date in: query description: End date in the format 'YYYY-MM-DD'. schema: type: string format: date responses: '200': description: Successful response with a list of events. content: application/json: schema: type: array items: $ref: '#/components/schemas/Event' '401': $ref: '#/components/responses/401' '422': $ref: '#/components/responses/422_stats' '500': $ref: '#/components/responses/500' tags: - Stats:Events security: - BearerAuth: [] /stats/events/{eventKey}: get: summary: Stats:Events Show description: > 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, update & delete anything Read all data Read all folder and media data ``` parameters: - name: eventKey in: path description: The unique key of the event. required: true schema: type: string responses: '200': description: Successful response with the details of a single event. content: application/json: schema: $ref: '#/components/schemas/Event' '401': $ref: '#/components/responses/401' '404': description: Event not found content: {} '500': $ref: '#/components/responses/500' tags: - Stats:Events security: - BearerAuth: [] components: securitySchemes: BearerAuth: type: http scheme: bearer schemas: Project: type: object properties: id: description: A unique numeric identifier for the project within the system. type: integer examples: - 22570 name: description: The project’s display name. type: string examples: - My Project Title description: description: The project’s description. type: - string - 'null' examples: - About My Project mediaCount: description: >- The number of different medias that have been uploaded to the project. type: integer examples: - 2 created: description: The date that the project was originally created. type: string format: date-time examples: - '2010-08-13T18:47:39+00:00' updated: description: The date that the project was last updated. type: string format: date-time examples: - '2010-08-19T21:47:00+00:00' hashedId: description: >- A private hashed id, uniquely identifying the project within the system. type: string examples: - 4d23503f70 public: description: >- A boolean indicating whether the project is available for public (anonymous) viewing. type: boolean examples: - false publicId: description: >- If the project is public, this field contains a string representing the ID used for referencing the project in public URLs. type: - string - 'null' examples: - 4bD anonymousCanUpload: type: boolean examples: - false anonymousCanDownload: type: boolean examples: - false required: - id - name - mediaCount - created - updated - hashedId - public - publicId CreateProject: type: object properties: name: description: The name of the project you want to create. type: string examples: - My New Project adminEmail: description: >- The email address of the person you want to set as the owner of this project. Defaults to the Wistia Account Owner. type: string examples: - admin@example.com public: oneOf: - type: string description: >- A flag indicating whether or not the project is enabled for public access. Set to “1” to enable and “0” to disable. enum: - '0' - '1' - type: boolean description: >- A flag indicating whether or not the project is enabled for public access. Set to `true` to enable and `false` to disable. examples: - false Thumbnail: type: object properties: url: type: string width: type: integer height: type: integer MediaProperties: type: object properties: id: description: A unique numeric identifier for the media within the system. type: integer name: description: The display name of the media. type: string type: description: A string representing what type of media this is. type: string enum: - Video - Audio - Image - PdfDocument - MicrosoftOfficeDocument - Swf - UnknownType archived: description: Whether or not the media is archived, either true or false. type: boolean created: description: The date when the media was originally uploaded. type: string format: date-time updated: description: The date when the media was last changed. type: string format: date-time duration: description: >- Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media. type: number embedCode: description: > DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide. type: string deprecated: true hashed_id: description: A unique alphanumeric identifier for this media. type: string description: description: >- A description for the media which usually appears near the top of the sidebar on the media's page. type: string progress: description: >- A floating point value between 0 and 1 that indicates the progress of the processing for this file. type: number maximum: 1 minimum: 0 status: description: > Post upload processing status. - `queued`: the file is waiting in the queue to be processed. - `processing`: the file is actively being processed. - `ready`: the file has been fully processed and is ready for embedding and viewing. - `failed`: the file was unable to be processed (usually a format or size error). type: string enum: - queued - processing - ready - failed section: description: >- The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default). type: string thumbnail: $ref: '#/components/schemas/Thumbnail' ProjectWithMedias: allOf: - $ref: '#/components/schemas/Project' - type: object properties: medias: type: array items: $ref: '#/components/schemas/MediaProperties' required: - medias UpdateProject: type: object properties: name: description: The project’s new name. type: string examples: - My New Project Name description: description: The project’s new description. type: string examples: - My New Project Description anonymousCanUpload: description: Whether anonymous users can upload media to the project. type: boolean anonymousCanDownload: description: Whether anonymous users can download media from the project. type: boolean public: oneOf: - type: string description: >- A flag indicating whether or not the project is enabled for public access. Set to “1” to enable and “0” to disable. enum: - '0' - '1' - type: boolean description: >- A flag indicating whether or not the project is enabled for public access. Set to `true` to enable and `false` to disable. examples: - false Subfolder: type: object description: A subfolder within a project that contains media files. properties: hashed_id: description: A unique alphanumeric identifier for this subfolder. type: string examples: - abc123def4 name: description: The display name of the subfolder. type: - string - 'null' examples: - Marketing Videos description: description: A description for the subfolder. type: - string - 'null' examples: - Collection of all marketing and promotional videos position: description: >- The position of this subfolder within its project, used for ordering. type: - integer - 'null' examples: - 1 created: description: The date when the subfolder was created. type: - string - 'null' format: date-time examples: - '2024-01-15T10:30:00+00:00' updated: description: The date when the subfolder was last modified. type: - string - 'null' format: date-time examples: - '2024-01-20T14:45:00+00:00' required: - hashed_id - position - created - updated SubfolderInput: type: object description: Input data for creating or updating a subfolder. properties: name: description: The display name of the subfolder. type: string examples: - Marketing Videos maxLength: 255 description: description: A description for the subfolder. type: - string - 'null' examples: - Collection of all marketing and promotional videos maxLength: 1000 required: - name SubfolderWithMedia: type: object description: A subfolder with its contained media files. allOf: - $ref: '#/components/schemas/Subfolder' - type: object properties: medias: description: Array of media files contained in this subfolder. type: array items: $ref: '#/components/schemas/MediaProperties' ProjectSharingSchema: type: object properties: id: type: integer examples: - 14 isAdmin: type: boolean examples: - true canShare: type: boolean examples: - true canDownload: type: boolean examples: - true canUpload: type: boolean examples: - true share: type: object properties: id: type: integer examples: - 3 name: type: string examples: - Jim type: type: string examples: - Contact email: type: string format: email examples: - jim@wistia.com required: - id - name - type - email project: type: object properties: id: type: integer examples: - 13 name: type: string examples: - My Project required: - id - name required: - id - isAdmin - canShare - canDownload - canUpload - share - project CreateProjectSharing: type: object properties: sharing: type: object properties: with: description: >- The email address of the person with whom you want to share the project. type: string format: email requirePassword: oneOf: - type: string description: >- Default is "1". Set to "0" to allow access without a password. enum: - '0' - '1' - type: boolean description: A flag indicating whether or not a password is required. examples: - false canShare: oneOf: - type: string description: >- Default is "0". Set to "1" to allow the user to share the project with others. enum: - '0' - '1' - type: boolean description: >- Whether the user is allowed to share the project with others. examples: - false canDownload: oneOf: - type: string description: >- Default is "0". Set to "1" to allow the user to download files from the project. enum: - '0' - '1' - type: boolean description: >- Whether the user is allowed to download files from the project. examples: - false canUpload: oneOf: - type: string description: >- Default is "0". Set to "1" to allow the user to upload files to the project. enum: - '0' - '1' - type: boolean description: Whether the user is allowed to upload files to the project. examples: - false sendEmailNotification: description: Deprecated! Email notifications are always sent now. type: string enum: - '0' - '1' deprecated: true required: - with required: - sharing CreateProjectSharingResponse: type: object description: The response includes a link for the user to access the project. properties: project: type: string format: uri examples: - http://myaccount.wistia.com/folders/13 sharing: $ref: '#/components/schemas/ProjectSharingSchema' UpdateSharingRequest: type: object properties: sharing: type: object properties: canShare: description: Allow the user or group to share the project with others. type: boolean canDownload: description: Allow the user or group to download media from the project. type: boolean canUpload: description: Allow the user or group to upload media to the project. type: boolean isAdmin: description: Give this user admin rights to the project. type: boolean Project-2: type: object properties: id: description: A unique numeric identifier for the project within the system. type: integer examples: - 22570 name: description: The project’s display name. type: string examples: - My Project Title hashedId: description: >- A private hashed id, uniquely identifying the project within the system. type: string examples: - 4d23503f70 IncludesProject: type: object properties: project: $ref: '#/components/schemas/Project-2' Asset: type: object properties: url: description: A direct-access URL to the content of the asset. type: string width: description: The width of this specific asset, if applicable. type: integer height: description: The height of this specific asset, if applicable. type: integer fileSize: description: >- The size of the asset file that’s referenced by url, measured in bytes. type: integer contentType: description: The asset’s content type. type: string type: description: > The internal type of the asset, describing how the asset should be used. Values can include OriginalFile, FlashVideoFile, MdFlashVideoFile, HdFlashVideoFile, Mp4VideoFile, MdMp4VideoFile, HdMp4VideoFile, IPhoneVideoFile, StillImageFile, SwfFile, Mp3AudioFile, and LargeImageFile. type: string IncludesAssets: type: object properties: assets: description: An array of the assets available for this media. type: array items: $ref: '#/components/schemas/Asset' IncludesSubfolder: type: object properties: subfolder: description: >- The subfolder (media group) in which the media appears. Null if the media is not in a subfolder. allOf: - $ref: '#/components/schemas/Subfolder' IncludesTags: type: object properties: tags: description: Tags associated with this media. type: array items: type: object properties: name: description: The display name of the tag. type: string MediaIndex: allOf: - $ref: '#/components/schemas/MediaProperties' - $ref: '#/components/schemas/IncludesProject' - $ref: '#/components/schemas/IncludesAssets' - $ref: '#/components/schemas/IncludesSubfolder' - $ref: '#/components/schemas/IncludesTags' - type: object properties: cursor: description: >- A cursor for stable pagination based on current `sort_by` order. You can pass this to `cursor_before` or `cursor_after` as a parameter to fetch the records before or after this record in the same sort order. This is only populated if medias were fetched with `use_cursor`, or `cursor_before` or `cursor_after`. type: - string - 'null' MediaShow: allOf: - $ref: '#/components/schemas/MediaProperties' - $ref: '#/components/schemas/IncludesProject' - $ref: '#/components/schemas/IncludesAssets' - $ref: '#/components/schemas/IncludesSubfolder' - $ref: '#/components/schemas/IncludesTags' MediaUpdate: allOf: - $ref: '#/components/schemas/MediaProperties' - $ref: '#/components/schemas/IncludesTags' MediaCopy: allOf: - $ref: '#/components/schemas/MediaProperties' - $ref: '#/components/schemas/IncludesProject' BackgroundJobStatus: type: object description: Status of the background job. properties: id: description: The ID of the background job that's been queued for the request. type: integer status: description: The status of the background job that's been queued for the request. type: string enum: - queued - started - finished - failed required: - id - status Account: type: object properties: id: description: Numeric id of the account type: integer name: description: Account name type: string url: description: Account’s main Wistia URL (e.g. http://brendan.wistia.com) type: string mediaCount: description: The total number of medias in this account type: integer videoLimit: description: The account's video limit type: integer projectCount: description: The total number of projects in this account type: integer channelCount: description: The total number of channels in this account type: integer required: - id - name - url - mediaCount - videoLimit - projectCount - channelCount AllowedDomain: type: object properties: domain: description: The allowed domain name. type: string examples: - example.com created_at: description: The date that the allowed domain was originally created. type: string format: date-time examples: - '2010-08-13T18:47:39+00:00' required: - domain - created_at VideoCustomizationResponse: type: object properties: playerColor: description: The color of the video player. type: string stillUrl: type: string autoPlay: description: Whether the video should auto play or not. type: string bpbTime: type: string controlsVisibleOnLoad: type: string endVideoBehavior: description: Behavior of the video at the end. type: string fullscreenButton: type: string branding: type: string playbar: type: string playButton: description: Indicates if the play button is visible. type: string settingsControl: type: string showCustomerLogo: type: string qualityControl: type: string playbackRateControl: type: string smallPlayButton: type: string spherical: type: string volumeControl: type: string copyLinkAndThumbnailEnabled: type: string doNotTrack: type: string email: type: string fitStrategy: type: string fullscreenOnRotateToLandscape: type: string muted: type: string playlistLinks: type: string playlistLoop: type: string playsinline: type: string playPauseNotifier: type: string playSuspendedOffScreen: type: string preload: type: string qualityMax: type: string qualityMin: type: string resumable: type: string seo: type: string silentAutoPlay: type: string time: type: string thumbnailAltText: type: string videoFoam: type: string volume: type: string wmode: type: string keyMoments: description: String representation of whether the key moments feature is enabled. type: string plugin: type: object properties: passwordProtectedVideo: type: object properties: 'on': type: string src: type: string challenge: type: string async: type: string videoThumbnail: type: object properties: clickToPlayButton: type: string socialbar-v1: type: object properties: buttons: type: string showTweetCount: type: string tweetText: type: string height: type: string chapters: type: object properties: visibleOnLoad: type: string chapterList: type: array items: type: object properties: id: type: string title: type: string time: type: string deleted: type: string 'on': type: string postRoll-v1: description: Adds a Call To Action to your Video (response format) type: object properties: rewatch: description: String representation of whether the video can be rewatched. type: string text: description: The URL of the text to be displayed. type: string link: description: The URL of the link to be displayed. type: string time: description: The time when the post-roll should be displayed as a string. type: string autoSize: description: >- String representation of whether the post-roll will automatically adjust its size. type: string style: type: object properties: backgroundColor: description: The background color of the post-roll. type: string ctaType: description: The type of call-to-action to be displayed. type: string 'on': description: String representation of whether the post-roll is enabled. type: string conversionOpportunityKey: description: The key used for tracking conversion opportunities. type: string captions-v1: description: Captions plugin configuration (response format) type: object properties: 'on': description: >- String representation of whether the captions plugin is enabled ("true" or "false"). type: string onByDefault: description: >- String representation of whether captions are turned on by default ("true" or "false"). type: string private: type: object properties: password_protect_on: type: string show_comments: type: string encrypted: type: object properties: password_protect_password: type: string VideoCustomization: type: object properties: autoPlay: description: >- 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. type: boolean controlsVisibleOnLoad: description: >- If set to true, controls like the big play button, playbar, volume, etc. will be visible as soon as the video is embedded. type: boolean copyLinkAndThumbnailEnabled: description: >- If set to false, the option to “Copy Link and Thumbnail” will be removed when right-clicking on the video. type: boolean doNotTrack: description: If set to true, data for each viewing session will not be tracked. type: boolean email: description: >- Associate a specific email address with this video’s viewing sessions. type: string endVideoBehavior: description: >- 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). type: string fakeFullscreen: description: >- If set to true, the video will try to play in a pseudo-fullscreen mode on certain mobile devices. type: boolean fitStrategy: description: >- 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. type: string fullscreenButton: description: >- If set to true, the fullscreen button will be available as a video control. type: boolean fullscreenOnRotateToLandscape: description: >- If set to false, the video will not automatically go to fullscreen mode on mobile when rotated to landscape. type: boolean keyMoments: description: If set to false, the key moments feature will be disabled. type: boolean muted: description: If set to true, the video will start in a muted state. type: boolean playbackRateControl: description: >- If set to false, the playback speed controls in the settings menu will be hidden. type: boolean playbar: description: >- If set to true, the playbar will be available. If set to false, it will be hidden. type: boolean playButton: description: Indicates if the play button is visible. type: boolean playerColor: description: >- Changes the base color of the player. Expects a hexadecimal rgb string. type: string playlistLinks: description: >- Enables the use of specially crafted links on the page to associate with a video, turning them into a playlist. type: boolean playlistLoop: description: >- If set to true and this video has a playlist, it will loop back to the first video after the last one has finished. type: boolean playsinline: description: If set to false, videos will play within the native mobile player. type: boolean playPauseNotifier: description: >- If set to false, animations for the Pause and Play symbols will be removed. type: boolean playSuspendedOffScreen: description: >- If set to false for a muted autoplay video, the video won't pause when out of view. type: boolean plugin: type: object properties: videoThumbnail: type: object properties: clickToPlayButton: description: >- If set to false, removes the “Click to Play” button on video thumbnails. type: boolean socialbar-v1: type: object properties: buttons: type: string showTweetCount: type: boolean tweetText: type: string height: type: integer chapters: type: object properties: visibleOnLoad: type: boolean chapterList: type: array items: type: object properties: id: type: string title: type: string time: type: string deleted: type: string 'on': type: boolean postRoll-v1: description: Adds a Call To Action to your Video type: object properties: rewatch: description: If set to true, allows the video to be rewatched. type: boolean text: description: The URL of the text to be displayed. type: string link: description: The URL of the link to be displayed. type: string time: description: >- The time when the post-roll should be displayed. Can be a string like "end" or a number representing seconds. oneOf: - type: string - type: number autoSize: description: >- If set to true, the post-roll will automatically adjust its size. type: boolean style: type: object properties: backgroundColor: description: The background color of the post-roll. type: string examples: - '#303030' ctaType: description: >- The type of call-to-action to be displayed. Typically set to "text". Other options are "image" which allows for "altText", and "html". type: string examples: - text 'on': description: If set to true, the post-roll is enabled. type: boolean conversionOpportunityKey: description: The key used for tracking conversion opportunities. type: string captions-v1: description: Enables closed captions for the video type: object properties: 'on': description: >- If set to true, the captions plugin is enabled and captions controls will be available to viewers. type: boolean onByDefault: description: >- If set to true, captions will be turned on automatically when the video loads. Only takes effect when the captions plugin is enabled. type: boolean preload: description: >- Sets the video’s preload property. Possible values are metadata, auto, none, true, and false. type: string qualityControl: description: >- If set to false, the video quality selector in the settings menu will be hidden. type: boolean qualityMax: description: Specifies the maximum quality the video will play at. type: integer qualityMin: description: Specifies the minimum quality the video will play at. type: integer resumable: description: >- Determines if the video should resume from where the viewer left off. Options are true, false, and auto. type: string seo: description: >- If set to true, the video’s metadata will be injected into the page’s markup for SEO. type: boolean settingsControl: description: If set to true, the settings control will be available. type: boolean silentAutoPlay: description: >- Determines how videos handle autoplay in contexts where normal autoplay might be blocked. Options are true, allow, and false. type: string smallPlayButton: type: boolean stillUrl: description: Overrides the thumbnail image that appears before the video plays. type: string time: description: Sets the starting time of the video. type: string thumbnailAltText: description: Sets the Thumbnail Alt Text for the media. type: string videoFoam: description: >- 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. anyOf: - type: boolean examples: - true - type: object properties: minWidth: description: Minimum width the video can be resized to. type: integer maxWidth: description: Maximum width the video can be resized to. type: integer minHeight: description: Minimum height the video can be resized to. type: integer maxHeight: description: Maximum height the video can be resized to. type: integer description: | Examples: ```json { "minWidth": 400, "maxWidth": 960 } ``` ```json { "minHeight": 300, "maxHeight": 450 } ``` volume: description: Sets the volume of the video. type: number volumeControl: description: When set to true, a volume control is available over the video. type: boolean wmode: description: >- If set to transparent, the background behind the player will be transparent instead of black. type: string Caption: type: object properties: english_name: description: English name of the language. type: string native_name: description: Native name of the language. type: string language: description: A 3 character language code as specified by ISO-639–2. type: string text: description: The text of the captions for the specified language in SRT format. type: - string - 'null' is_draft: type: boolean id: description: The unique hashed identifier of the time-coded transcript. type: string required: - language - is_draft - id SourceMedia: type: object description: The media that the localization is associated with. properties: hashed_id: description: A unique alphanumeric identifier for this media. type: string name: description: The name of the media. type: string duration: description: The duration of the media in seconds. type: number created_at: description: The date when the media was created. type: string format: date-time updated_at: description: The date when the media was last updated. type: string format: date-time required: - hashed_id - name - duration - created_at - updated_at LocalizationTranscript: type: - object - 'null' description: >- The transcript for the localization. Selectively serialized in some endpoints. See properties for endpoint. properties: hashed_id: description: A unique alphanumeric identifier for this transcript. type: string language_name: description: The name of the language in English. type: string native_language_name: description: The name of the language in the language of the localization. type: string text: description: The text of the transcript. type: string created_at: description: The date when the transcript was created. type: string format: date-time updated_at: description: The date when the transcript was last updated. type: string format: date-time required: - hashed_id - language_name - native_language_name - text - created_at - updated_at Localization: type: object properties: hashed_id: description: A unique alphanumeric identifier for this localization. type: string language_code: description: A 3-character language code as specified by IETF. type: string iso639_2_language_code: description: A 2-character language code as specified by ISO-639–2. type: string language_name: description: The name of the language in English. type: string native_language_name: description: The name of the language in the language of the localization. type: string created_at: description: The date when the localization was created. type: string format: date-time updated_at: description: The date when the localization was last updated. type: string format: date-time ordered_at: description: The date when the localization was ordered. type: - string - 'null' format: date-time enabled_at: description: The date when the localization was enabled. type: - string - 'null' format: date-time enabled: description: Whether or not the localization is enabled. type: boolean source_media: $ref: '#/components/schemas/SourceMedia' transcript: $ref: '#/components/schemas/LocalizationTranscript' required: - hashed_id - language_code - iso639_2_language_code - language_name - native_language_name - created_at - updated_at - ordered_at - enabled_at - enabled - source_media LocalizationWithPurchaseData: allOf: - $ref: '#/components/schemas/Localization' - type: object properties: auto_enable_dubbing: description: >- Whether or not the dubbing will be automatically enabled when completed. type: boolean expected_billed_minutes: description: >- The expected number of minutes that will be billed for the dubbing. type: - number - 'null' expected_billed_price_per_minute: description: >- The expected price per minute that will be billed for the dubbing. type: - number - 'null' expected_billed_price: description: The expected total price that will be billed for the dubbing. type: - number - 'null' billed_at: description: The date when the dubbing was billed. type: - string - 'null' format: date-time required: - auto_enable_dubbing Tag: type: object properties: name: description: The tag’s display name. type: string examples: - My tag Title taggingsCount: description: >- The number of different medias that have been associated with this tag. type: integer examples: - 2 created: description: The date that the tag was originally created. type: string format: date-time examples: - '2010-08-13T18:47:39+00:00' updated: description: The date that the tag was last updated. type: string format: date-time examples: - '2010-08-19T21:47:00+00:00' SearchMedia: allOf: - $ref: '#/components/schemas/MediaProperties' - type: object properties: projectHashedId: description: The hashed ID of the project this media belongs to type: string examples: - 4d23503f70 required: - projectHashedId SearchChannel: type: object properties: id: description: A unique numeric identifier for the channel within the system. type: integer hashedId: description: A unique alphanumeric identifier for this channel. type: string name: description: The display name for the channel. type: string description: description: The channel's description. type: string mediaCount: description: The number of medias in the channel. type: integer created: description: The date when the channel was originally created. type: string format: date-time updated: description: The date when the channel was last updated. type: string format: date-time required: - id - hashedId - name - description - mediaCount - created - updated SearchChannelEpisode: type: object properties: id: description: >- A unique numeric identifier for the channel episode within the system. type: integer hashedId: description: A unique alphanumeric identifier for this channel episode. type: string title: description: The title of the channel episode. type: - string - 'null' description: description: The episode notes for the channel episode. type: string summary: description: The description of the channel episode. type: string channelHashedId: description: The hashed ID of the channel this episode belongs to. type: string mediaHashedId: description: The hashed ID of the media associated with this channel episode. type: string published: description: Whether the channel episode is published. type: boolean created: description: The date when the channel episode was originally created. type: string format: date-time updated: description: The date when the channel episode was last updated. type: string format: date-time publish_at: description: The scheduled publish date (only present if scheduled). type: - string - 'null' format: date-time required: - id - hashedId - description - summary - channelHashedId - mediaHashedId - published - created - updated Channel: type: object properties: id: description: The numeri d of the channel. type: integer created: description: The date when the channel was originally created. type: string format: date-time description: description: The channel's description. type: string hashedId: description: A unique alphanumeric identifier for this channel. type: string mediaCount: description: The number of medias in the channel. type: integer name: description: The display name for the channel type: string updated: description: The date when the channel was last updated. type: string format: date-time required: - id - created - description - hashedId - mediaCount - name - updated ChannelEpisode: type: object properties: channelHashedId: description: A unique alphanumeric identifier for the channel episode's channel. type: string created: description: The date when the channel episode was originally created. type: string format: date-time description: description: The channel episode's description or episode notes. type: string summary: description: >- A short summary of the episode that is displayed when space is limited. type: string examples: - A short description. hashedId: description: A unique alphanumeric identifier for the channel episode. type: string mediaHashedId: description: A unique alphanumeric identifier for the channel episode's media. type: string published: description: >- Whether the channel episode has been published or is still in draft form. type: boolean publish_at: description: >- The date and time when the episode is scheduled to be published in UTC timezone (only present when publish_status is 'scheduled'). type: string format: date-time examples: - '2024-12-31T23:59:59Z' title: description: The title of the channel episode type: - string - 'null' updated: description: The date when the channel was last updated. type: string format: date-time required: - channelHashedId - created - description - summary - hashedId - mediaHashedId - published - title - updated CreateChannelEpisode: type: object properties: media_id: description: >- The alphanumeric hashed ID of the media to be added as a channel episode. type: string title: description: >- The episode's title. If not provided, the channel episode uses the title of the media used to create it. type: string examples: - My New Episode description: description: The episode's description or episode notes. type: string examples: - My Episode Description. summary: description: >- A short summary of the episode that is displayed when space is limited. type: string examples: - A short description. publish_status: description: >- The status of whether or not the episode has been published to your channel. type: string enum: - draft - published - scheduled publish_at: description: >- 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.' type: string format: date-time examples: - '2024-12-31T23:59:59Z' episode_type: description: >- The episode type for your podcast. This parameter only takes effect if podcasting is enabled for the channel. type: string enum: - full - trailer - bonus episode_number: description: >- The episode number for this episode in your podcast. This parameter only takes effect if podcasting is enabled for the channel. type: integer explicit_content: description: >- Whether this episode contains explicit content. This parameter only takes effect if podcasting is enabled for the channel. type: boolean hide_from_feed: description: >- Whether or not to hide this episode from your podcast feed. Set to true to hide the episode, false to show the episode. This parameter only takes effect if podcasting is enabled for the channel. type: boolean ExpiringAccessTokenInput: type: object properties: expires_at: description: >- an ISO8601 string of when the token will expire, defaults to two days from creation type: string format: iso8601 authorizations: description: a list of authorizations the token will have type: array items: type: object properties: type: description: >- The type of object the permission is being performed on, only media is currently supported type: string id: description: >- The hashed if of the object the permissions are being performed on. type: string permissions: description: >- The types of permissions, currently only supports edit-transcripts type: array items: type: string required: - type - id - permissions ExpiringAccessTokenResponse: type: object properties: token: description: >- A token which can be used to authorize requests to Wistia. Currently only for doing transcript embeds. type: string required: - token LiveStreamEvent: type: object properties: id: description: The hashed ID of the live stream event type: string examples: - abc123def456 title: description: The title of the live stream event type: string examples: - 'Wellness Session: Coping with Outie Memories' description: description: The description of the live stream event type: - string - 'null' examples: - A comprehensive session on managing work-life balance scheduled_for: description: The scheduled start time in W3C format with timezone type: - string - 'null' format: date-time examples: - '2024-03-20T15:30:00-05:00' event_duration: description: Duration of the event in minutes type: - integer - 'null' examples: - 60 lifecycle_status: description: Current lifecycle status of the event type: string examples: - scheduled registration_status: description: Registration status of the event type: string examples: - published created_at: description: When the event was created (UTC) type: string format: date-time examples: - '2024-03-15T10:30:00Z' updated_at: description: When the event was last updated (UTC) type: string format: date-time examples: - '2024-03-15T10:30:00Z' audience_link: description: Link for the audience to join the event type: string examples: - https://lumon-industries.wistia.com/live/events/abc123def456 host_link: description: Link for the host to manage the event type: string examples: - https://lumon-industries.wistia.com/live/events/abc123def456/onair panelist_link: description: Link for panelists to join the event type: string examples: - >- https://lumon-industries.wistia.com/live/events/abc123def456/onair/a1b2c3d4-e5f6-7890-abcd-ef1234567890 required: - id - title - lifecycle_status - registration_status - created_at - updated_at - audience_link - host_link - panelist_link CreateLiveStreamEvent: type: object properties: title: description: The title of the live stream event type: string examples: - 'Wellness Session: Coping with Outie Memories' description: description: The description of the live stream event type: string examples: - A comprehensive session on managing work-life balance scheduled_for: description: The scheduled start time in W3C format with timezone type: string format: date-time examples: - '2024-03-20T15:30:00-05:00' event_duration: description: Duration of the event in minutes (minimum 15) type: integer examples: - 60 minimum: 15 required: - title - scheduled_for - event_duration UpdateLiveStreamEvent: type: object properties: live_stream_event: type: object properties: title: description: The title of the live stream event type: string examples: - Updated Event Title description: description: The description of the live stream event type: string examples: - Updated event description scheduled_for: description: The scheduled start time in W3C format with timezone type: string format: date-time examples: - '2024-03-20T15:30:00-05:00' event_duration: description: Duration of the event in minutes (minimum 15) type: integer examples: - 90 minimum: 15 CreateRegistration: type: object required: - email - first_name - last_name properties: email: type: string format: email description: Email address of the registrant example: john.doe@example.com first_name: type: string description: First name of the registrant example: John last_name: type: string description: Last name of the registrant example: Doe RegistrationResponse: type: object required: - visitor_key - personalized_event_url properties: visitor_key: type: string description: Unique visitor key generated for the registrant example: iv_1234567890 personalized_event_url: type: string format: uri description: Personalized URL for the registrant to access the live event example: >- https://wistia.com/webinars/registration?vk=iv_1234567890&uid=john.doe@example.com Visitor: type: object properties: visitor_key: description: A unique identifier for the visitor. type: string created_at: description: When the visitor was created. type: string format: date-time last_active_at: description: The last time the visitor played a video. type: string format: date-time last_event_key: description: The event key for the last video play action. type: string load_count: description: The total number of videos loaded by the visitor. type: integer play_count: description: The total number of videos played by the visitor. type: integer visitor_identity: type: object properties: name: type: string email: type: - string - 'null' org: type: object properties: name: type: - string - 'null' title: type: - string - 'null' user_agent_details: type: object properties: browser: type: string browser_version: type: string platform: type: string mobile: type: boolean Event: type: object properties: received_at: description: Date and time when the event occurred. type: string format: date-time event_key: description: Unique identifier for the event. type: string visitor_key: description: Identifier for the visitor. type: string embed_url: description: URL of the page where the video was viewed. type: string percent_viewed: description: Decimal number denoting how much of the video was watched. type: number format: float ip: description: IP address of the viewer. type: string org: description: Organization associated with the IP address. type: string country: description: Country based on IP. type: string region: description: Region based on IP. type: string city: description: City based on IP. type: string lat: description: Latitude based on IP. type: number format: float lon: description: Longitude based on IP. type: number format: float email: description: Email of the viewer (if available). type: - string - 'null' media_id: description: Identifier for the video that was watched. type: string media_name: description: Name of the video. type: string media_url: description: URL of the video in Wistia. type: string iframe_heatmap_url: description: URL for the heatmap of the event. type: string thumbnail: type: object properties: url: type: string width: type: integer height: type: integer fileSize: type: integer contentType: type: string type: type: string conversion_type: description: Type of conversion. oneOf: - type: integer - type: string conversion_data: description: Additional data related to the conversion. type: object properties: email: type: string first_name: type: string is_new_lead: type: boolean last_name: type: string user_agent_details: description: Details about the user agent of the viewer. type: object properties: browser: type: string browser_version: type: string platform: type: string mobile: type: boolean responses: '400': description: Bad request content: application/json: schema: type: object properties: error: description: Error message detailing the reason for the bad request. type: string examples: - Bad request '401': description: Unauthorized, invalid or missing token content: application/json: schema: type: object properties: error: type: string examples: - Invalid credentials. '403': description: Forbidden, token is valid but account does not have access to feature content: application/json: schema: type: object properties: error: type: string examples: - Live streaming is not available on your current plan '404': description: Resource not found content: application/json: schema: type: object properties: error: type: string examples: - Project with ID 'fakeid' not found. '422': description: Unprocessable entity, the request parameters were invalid. content: application/json: schema: type: object properties: errors: description: >- Object containing validation errors grouped by field name. Each field contains an array of error messages. type: object additionalProperties: type: array items: type: string example: trims: - didn't match hh:mm:ss.xxx-hh:mm:ss.xxx media: - must be part of a project '500': description: Internal server error content: application/json: schema: type: object properties: error: type: string examples: - Internal server error 404-2: description: Resource not found 422_stats: description: Unprocessable entity, the request parameters were invalid. content: application/json: schema: type: object properties: error: description: >- Error message describing why the request could not be processed. type: string parameters: sort_by: name: sort_by in: query description: Ordering. Default is ID ASC. required: false schema: type: string enum: - position - title - created - updated - id sort_direction: name: sort_direction in: query description: Ordering Sort Direction (0 = desc, 1 = asc; default is 1) required: false schema: type: integer enum: - 0 - 1 page: name: page in: query description: Page number to retrieve required: false schema: type: integer per_page: name: per_page in: query description: Number of channels per page required: false schema: type: integer media_id: name: media_id[] in: query description: Filter by media id required: false schema: type: array items: type: string hashed_id: name: hashed_id[] in: query description: Filter by hashed id required: false schema: type: array items: type: string published: name: published in: query description: Filter by published status. required: false schema: type: boolean title: name: title in: query description: Filter by channel episode name/title. required: false schema: type: string x-tagGroups: - name: Data API tags: - Projects - Subfolders - Project Sharings - Media - Account - Allowed Domains - Background Job Status - Customizations - Captions - Trims - Localizations - Tags - Search - Channels - Channel Episodes - Expiring Access Tokens - Live Stream Events - Live Stream Event Registrations - name: Stats API tags: - Stats:Account - Stats:Projects - Stats:Media - Stats:Visitors - Stats:Events