openapi: "3.1.1" info: title: "Data API" version: "2026.09.0" description: "Wistia Data API" paths: /: servers: - url: "https://upload.wistia.com" post: summary: "Upload or Import Media" description: "Endpoint to upload media files from a local system or import from a web URL.\n\n- Use `multipart/form-data` with a `file` parameter to upload from local system\n- Use `application/x-www-form-urlencoded` with a `url` parameter to import from web URL\n" requestBody: content: application/x-www-form-urlencoded: schema: allOf: - $ref: "#/components/schemas/CommonUploadProperties" - type: "object" required: - "url" properties: url: description: "The publicly accessible web location of the media file to import." type: "string" format: "uri" examples: - "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" low_priority: description: "Inform the encoding service that this upload can be considered lower priority than others. This is especially useful for platform customers doing bulk uploads or migrations. Setting this to \"false\" has no effect." type: "boolean" examples: - true multipart/form-data: schema: allOf: - $ref: "#/components/schemas/CommonUploadProperties" - type: "object" required: - "file" properties: file: description: "The media file, multipart-form encoded into the request body." type: "string" format: "binary" responses: "200": description: "Successfully uploaded or imported." content: application/json: schema: description: "Response after successfully uploading or importing media" 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" 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." type: "number" hashed_id: description: "A unique alphanumeric identifier for this media." 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 thumbnail: $ref: "#/components/schemas/Thumbnail" "400": description: "Error due to reaching the video limit of your account or other issues." content: application/json: schema: type: "object" properties: error: type: "object" properties: code: type: "string" detail: type: "string" examples: missing_credentials: value: code: "upload_failed" detail: "'api_password' or 'access_token' are required" "401": description: "Authorization error. Check your access_token." content: text/html: {} tags: - "Upload or Import Media" security: - BearerAuth: [] /review_bundles: get: summary: "List Review Bundles" description: "Lists review bundles belonging to an account. This endpoint can also be used to\ndo a batch fetch based off of the hashed id, or to find the bundles that include\na given media or any media from a folder.\n\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Review Bundles" security: - BearerAuth: [] parameters: - name: "hashed_ids[]" in: "query" description: "Restrict the results to the review bundles with these hashed IDs." required: false schema: type: "array" items: type: "string" - name: "name" in: "query" description: "Restrict the results to review bundles whose name contains this value (case-insensitive)." required: false schema: type: "string" - name: "media_hashed_id" in: "query" description: "Restrict the results to review bundles that include the media with this hashed ID." required: false schema: type: "string" - name: "folder_hashed_id" in: "query" description: "Restrict the results to review bundles that include any media from the folder with this hashed ID." required: false schema: type: "string" - name: "sort_by" in: "query" description: "Field to order by. The default is id." required: false schema: type: "string" enum: - "id" - "name" - "created" - "updated" - name: "sort_direction" in: "query" description: "Direction to order by. (0 = desc, 1 = asc; default is 1)" required: false schema: type: "integer" enum: - 0 - 1 - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" responses: "200": description: "Review Bundles retrieval successful" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this review bundle." name: type: "string" examples: - "My Review Bundle Title" description: "The bundle display name." url: type: "string" examples: - "https://[your-domain].wistia.com/reviews/bundles/1234567890" description: "The URL of the bundle." allow_downloads: type: "boolean" description: "Whether the videos in the bundle can be downloaded." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "reviewBundles" x-speakeasy-name-override: "list" post: summary: "Create Review Bundle" description: "Creates a review bundle from a set of existing media, producing a single link\nthat can be shared for review. The media to include are specified by their hashed\nIDs and must already belong to the account. The media can come from any folder.\nReview Bundles are limited to 25 media.\n\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Review Bundles" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: media_hashed_ids: type: "array" examples: - "abc123" - "abc124" items: type: "string" description: "The hashed ids of the media to include in the bundle. Limited to 25 media." name: type: "string" examples: - "My Review Bundle Title" description: "The bundle display name." allow_downloads: type: "boolean" description: "Whether the videos in the bundle can be downloaded." required: - "media_hashed_ids" - "name" responses: "201": description: "Review Bundle created successfully." content: application/json: schema: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this review bundle." name: type: "string" examples: - "My Review Bundle Title" description: "The bundle display name." url: type: "string" examples: - "https://[your-domain].wistia.com/reviews/bundles/1234567890" description: "The URL of the bundle." allow_downloads: type: "boolean" description: "Whether the videos in the bundle can be downloaded." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "422": description: "Unprocessable entity, the request parameters were invalid." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "A single error message describing what went wrong." errors: type: "array" examples: - - "Title is required" - "Event duration must be at least 15 minutes" items: type: "string" description: "Array of error messages describing what went wrong." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "reviewBundles" x-speakeasy-name-override: "create" /review_bundles/{reviewBundleHashedId}: delete: summary: "Delete Review Bundle" description: "Permanently deletes a review bundle, identified by its hashed id. This removes\nthe bundle and its shared review link; the media it contained are not deleted.\nThis action cannot be undone.\n\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Review Bundles" security: - BearerAuth: [] parameters: - name: "reviewBundleHashedId" in: "path" description: "The hashed id of the review bundle." required: true schema: type: "string" responses: "200": description: "Review Bundle deleted successfully." content: application/json: schema: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this review bundle." name: type: "string" examples: - "My Review Bundle Title" description: "The bundle display name." url: type: "string" examples: - "https://[your-domain].wistia.com/reviews/bundles/1234567890" description: "The URL of the bundle." allow_downloads: type: "boolean" description: "Whether the videos in the bundle can be downloaded." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "reviewBundles" x-speakeasy-name-override: "delete" /deleted_media: get: summary: "List Deleted Media" description: "Lists media that has been soft-deleted and is still inside the account's\nrestore window. Media is listed only while it can still be restored — 30 days\non most plans, 14 on free plans. After which it is permanently purged.\n\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Deleted Media" security: - BearerAuth: [] parameters: - name: "hashed_ids[]" in: "query" description: "Restrict the results to the deleted media with these hashed IDs." required: false schema: type: "array" items: type: "string" - name: "sort_by" in: "query" description: "Field to order by. When omitted, results are ordered most-recently-deleted first." required: false schema: type: "string" enum: - "id" - "deleted" - "name" - "type" - "created" - name: "sort_direction" in: "query" description: "Direction to order by. (0 = desc, 1 = asc; default is 1)" required: false schema: type: "integer" enum: - 0 - 1 - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" responses: "200": description: "Deleted media retrieval successful" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." name: type: "string" examples: - "My deleted video" description: "The media display name." type: type: "string" examples: - "Video" description: "The type of media (e.g. Video, Audio)." duration: type: - "number" - "null" description: "The length of the media in seconds." deleted_at: type: "string" examples: - "2026-06-20T18:47:39+00:00" format: "date-time" description: "When the media was deleted, in ISO 8601 format." restore_expires_at: type: "string" examples: - "2026-07-20T18:47:39+00:00" format: "date-time" description: "The deadline after which this media is permanently purged and can no longer be restored (deleted_at plus the account's restore window)." folder: type: - "object" - "null" unevaluatedProperties: false properties: hashed_id: type: "string" name: type: - "string" - "null" description: "The folder the media will return to if restored without an explicit target. Null if the original folder was also deleted." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: deletedMedia x-speakeasy-name-override: list /deleted_media/restore: post: summary: "Restore Deleted Media" description: "Restores one or more soft-deleted media. By default each media returns to the\nfolder it was deleted from; pass folder_id to restore them into a specific\nfolder instead. Only media still inside the restore window can be recovered.\nThe restore runs asynchronously and the response includes a background job\nstatus.\n\n\n## Requires api token with one of the following permissions\n```\nUpload and view media\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Deleted Media" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: media_hashed_ids: type: "array" examples: - "abc123" - "abc124" items: type: "string" description: "The hashed ids of the soft-deleted media to restore. Up to 1000 at a time." folder_id: type: "string" examples: - "folder123" description: "Optional hashed id of the folder to restore the media into. If omitted, each media returns to the folder it was deleted from." required: - "media_hashed_ids" required: true responses: "202": description: "Restore request accepted and queued for processing." content: application/json: schema: type: "object" unevaluatedProperties: false properties: message: type: "string" examples: - "Restoring 3 media." background_job_status: type: "object" unevaluatedProperties: false properties: id: type: "integer" hashed_id: type: "string" status: type: "string" examples: - "queued" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: deletedMedia x-speakeasy-name-override: restore /medias: get: summary: "List Media" description: "Lists the media belonging to the account. This endpoint can also be used to\ndo a batch fetch based off of the hashed id.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Media" security: - BearerAuth: [] parameters: - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "sort_by" in: "query" description: "Ordering. When using cursor pagination (see cursor param),\nonly `id` and `created` are supported. All other sort_by options (`name`, `updated`, `position`)\nrequire offset pagination.\n" 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: "folder_id" in: "query" description: "A hashed ID specifying the folder from which you would like to get results." required: false schema: type: "string" description: "Hashed ID of the folder (e.g., \"4d23503f70\")" - 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: "include" in: "query" description: "Set to `speakers` to include active transcript speaker assignments used for diarization. Webinar hosts and panelists are not included." required: false schema: type: "string" enum: - "speakers" - 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_ids[]" in: "query" description: "Find all of the medias by these hashed_ids." required: false style: "form" explode: true schema: type: "array" items: type: "string" - 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: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" - type: "object" properties: folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." - type: "null" unevaluatedProperties: false required: - "folder" - type: "object" properties: assets: type: "array" items: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A direct-access URL to the content of the asset." width: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The width of this specific asset, if applicable." height: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The height of this specific asset, if applicable." file_size: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The size of the asset file that’s referenced by url, measured in bytes." content_type: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The asset’s content type." type: type: "string" 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.\n" description: "An array of the assets available for this media." - type: "object" properties: subfolder: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." unevaluatedProperties: false description: "The subfolder (media group) in which the media appears. Null if the media is not in a subfolder." - type: "object" properties: tags: type: "array" items: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The display name of the tag." description: "Tags associated with this media." - type: "object" properties: speakers: type: "array" items: type: "object" unevaluatedProperties: false properties: media_speaker_id: type: "string" description: "The unique identifier for this transcript speaker assignment on the media." speaker_profile_id: type: "string" description: "The reusable account speaker profile assigned to the transcript speaker." name: type: "string" description: "The assigned speaker profile's display name." required: - "media_speaker_id" - "speaker_profile_id" - "name" description: "Active transcript speaker assignments used for diarization. Webinar hosts and panelists are not included. Present when `include=speakers` is requested." - type: "object" properties: cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "list" /medias/{mediaHashedId}: get: summary: "Show Media" description: "Fetches a single media by its hashed id.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization for this media can also be used; any permission granted on a\nmedia allows showing it.\n" tags: - "Media" security: - BearerAuth: [] parameters: - name: "mediaHashedId" in: "path" description: "The hashed ID of the media." required: true schema: type: "string" description: "Hashed ID of the media (e.g., \"4d23503f70\")" - name: "description_format" in: "query" description: "Format for media descriptions" required: false schema: type: "string" examples: - "markdown" const: "markdown" - name: "include" in: "query" description: "Set to `speakers` to include active transcript speaker assignments used for diarization. Webinar hosts and panelists are not included." required: false schema: type: "string" enum: - "speakers" responses: "200": description: "Successful response" content: application/json: schema: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" - type: "object" properties: folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." - type: "null" unevaluatedProperties: false required: - "folder" - type: "object" properties: assets: type: "array" items: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A direct-access URL to the content of the asset." width: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The width of this specific asset, if applicable." height: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The height of this specific asset, if applicable." file_size: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The size of the asset file that’s referenced by url, measured in bytes." content_type: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The asset’s content type." type: type: "string" 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.\n" description: "An array of the assets available for this media." - type: "object" properties: subfolder: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." unevaluatedProperties: false description: "The subfolder (media group) in which the media appears. Null if the media is not in a subfolder." - type: "object" properties: tags: type: "array" items: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The display name of the tag." description: "Tags associated with this media." - type: "object" properties: speakers: type: "array" items: type: "object" unevaluatedProperties: false properties: media_speaker_id: type: "string" description: "The unique identifier for this transcript speaker assignment on the media." speaker_profile_id: type: "string" description: "The reusable account speaker profile assigned to the transcript speaker." name: type: "string" description: "The assigned speaker profile's display name." required: - "media_speaker_id" - "speaker_profile_id" - "name" description: "Active transcript speaker assignments used for diarization. Webinar hosts and panelists are not included. Present when `include=speakers` is requested." unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "get" put: summary: "Update Media" description: "Updates the attributes on a media.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization granting the `update` permission on this media can also be\nused.\n" tags: - "Media" security: - BearerAuth: [] parameters: - name: "mediaHashedId" in: "path" description: "The hashed ID of the media." required: true schema: type: "string" description: "Hashed ID of the media (e.g., \"4d23503f70\")" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The media’s new name." new_still_media_id: type: "string" description: "The Wistia hashed ID of an image that will replace the still that’s displayed before the player starts playing.\n" description: type: "string" description: "A new description for this media. Accepts plain text or markdown." tags: type: "array" items: type: "string" description: "An array of tag names to apply to the media. This replaces any existing tags. To add tags without replacing existing tags, use bulk-tag-media." custom_metadata: type: "object" unevaluatedProperties: false additionalProperties: true description: "Custom metadata field values to set, keyed by field key. Values take the\nsame shapes as the Set Custom Metadata Field Value endpoint; a null value\nclears that field and omitted fields are untouched. Requires the custom\nmetadata feature on the account.\n" required: false responses: "200": description: "Successful response" content: application/json: schema: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" - type: "object" properties: tags: type: "array" items: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The display name of the tag." description: "Tags associated with this media." unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "update" delete: summary: "Delete Media" description: "Deletes a media. Deleted media moves to the account's Recently Deleted area,\nwhere it can be restored until the account's restore window ends, after which\nit is permanently purged.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization granting the `destroy` permission on this media can also be\nused.\n" tags: - "Media" security: - BearerAuth: [] parameters: - name: "mediaHashedId" in: "path" description: "The hashed ID of the media." required: true schema: type: "string" description: "Hashed ID of the media (e.g., \"4d23503f70\")" responses: "200": description: "Successful deletion of the media." content: application/json: schema: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "delete" /medias/{mediaHashedId}/copy: post: summary: "Copy Media" description: "This endpoint copies a media and its assets to a destination folder (defaults to source media).\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Media" security: - BearerAuth: [] parameters: - name: "mediaHashedId" in: "path" description: "The hashed ID of the media." required: true schema: type: "string" description: "Hashed ID of the media (e.g., \"4d23503f70\")" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: folder_id: type: "integer" description: "The ID of the folder where you want the new copy placed. Defaults to the source media’s current folder if omitted or invalid." owner: type: "string" format: "email" description: "An email address specifying the owner of the new media. Defaults to the source media’s current owner if omitted or invalid." 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: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" - type: "object" properties: folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." - type: "null" unevaluatedProperties: false required: - "folder" unevaluatedProperties: false "400": description: "Bad request, e.g. copy failure." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "405": description: "Method not allowed, e.g. trying to copy archived media." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "copy" /medias/{mediaHashedId}/swap: put: summary: "Swap Media" 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.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope can also be\nused when its authorizations grant the `update` permission on both the\nmedia being replaced and the replacement media. A replacement media the\ntoken does not name is treated as not found.\n" tags: - "Media" security: - BearerAuth: [] parameters: - name: "mediaHashedId" in: "path" description: "The hashed ID of the media to be replaced." required: true schema: type: "string" description: "Hashed ID of the media to be replaced." requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: replacement_media_id: type: "string" description: "The hashed ID of the media that will replace the original media. Must be the same media type as the original." required: - "replacement_media_id" responses: "200": description: "Successfully queued background job for media swap." content: application/json: schema: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false properties: media: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" unevaluatedProperties: false "400": description: "Bad request, e.g. missing replacement_media_id or media type mismatch." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Replacement media must be the same type as the original media (Video)." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "swap" /medias/{mediaHashedId}/stats: get: summary: "Show Media Aggregated Stats" description: "Aggregated tracking statistics for a video embedded on your site.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Media" security: - BearerAuth: [] parameters: - name: "mediaHashedId" in: "path" description: "The hashed ID of the video." required: true schema: type: "string" description: "Hashed ID of the media (e.g., \"4d23503f70\")" responses: "200": description: "Successful retrieval of video statistics." content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the video within the system." hashed_id: type: "string" description: "A unique alphanumeric identifier for the video within the system." name: type: "string" description: "The display name of the video." stats: type: "object" unevaluatedProperties: false properties: pageLoads: type: "integer" description: "The total number of times that the page containing the embedded video has been loaded." visitors: type: "integer" description: "The number of unique visitors to the page containing the embedded video." percentOfVisitorsClickingPlay: type: "integer" 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." plays: type: "integer" description: "The total number of times that the video has been played." averagePercentWatched: type: "integer" 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." description: "An object representing the aggregated embed statistics for this video." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "getStats" /medias/{mediaHashedId}/translate: post: summary: "Translate Media" description: "Translates the transcript for a media.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Media" security: - BearerAuth: [] parameters: - name: "mediaHashedId" in: "path" description: "The hashed ID of the media." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: target_language: type: "string" description: "The language to translate the transcript to. Use the bibliographic ISO 639-2 form or a supported regional or script IETF tag." source_language: type: "string" description: "The language of the source transcript. Use the bibliographic ISO 639-2 form or a supported regional or script IETF tag. If not provided, the media's default transcript language will be used." required: - "target_language" responses: "201": description: "Successfully queued background job for translation of the transcript." content: application/json: schema: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "422": description: "Unprocessable entity. The translation could not be queued, including due to insufficient Credits when Credits billing applies." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "Error message detailing why the request failed." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "translate" /medias/import_url: post: summary: "Import Media from URL" description: "This endpoint imports a media file from a given URL. The import is processed\nasynchronously and will return a background_job_status object rather than the\ntypical Media response object. You can poll the background job status endpoint\nto check on the progress of the import.\n\nIf no folder_id is provided, a new folder called \"Untitled Folder\" will be\ncreated and the imported media will be placed there.\n\nThe URL must be publicly accessible — Wistia's servers need to be able to fetch the file directly.\n\nNote: imports from certain domains (e.g. vimeo.com, wistia.com) are not permitted.\n\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Media" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: url: type: "string" examples: - "https://example.com/video.mp4" format: "uri" description: "The publicly accessible URL of the media file to import." folder_id: type: "string" description: "The hashed ID of the folder (project) to import the media into. If not provided, a new folder will be created." required: - "url" responses: "201": description: "Successfully queued background job for URL import." content: application/json: schema: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "422": description: "Unprocessable entity, the URL domain is not permitted for import." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "Error message detailing why the request failed." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "importUrl" x-cli-action-override: "import" /medias/archive: put: summary: "Archive Media" 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 webinar medias and Soapbox videos imported to Wistia before September 1, 2023 cannot be archived.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Media" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: hashed_ids: type: "array" items: type: "string" description: "An array of the media hashed IDs to be archived." required: - "hashed_ids" required: true responses: "200": description: "Successful archival of media." content: application/json: schema: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "403": description: "Forbidden, e.g. account does not have access to archiving." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" "422": description: "Unprocessable entity, e.g. too many media requested." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "archive" /medias/move: put: summary: "Move Media" description: "Moves up to 100 media to a folder and optional subfolder. The subfolder must\nbelong to the specified folder.\n\nThis endpoint allows 10 requests per 5 minutes, separate from the general\nAPI rate limit. Returns a Background Job because the move is asynchronous.\n\nFor more than 100 media, multiple destinations, or mixed actions, use the\nCreate Bulk Actions endpoint with `move` actions.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and\nauthorizations granting the `update` permission on every media being moved\nand on the destination folder can also be used. `subfolder_id` is not\navailable to expiring access tokens.\n" tags: - "Media" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: hashed_ids: type: "array" items: type: "string" description: "An array of the media hashed IDs to be moved." folder_id: type: "string" description: "The hashed ID of the folder where you want the media moved." subfolder_id: type: "string" description: "Optional. The hashed ID of the subfolder where you want the media moved. If not provided, media will be moved to the folder's default subfolder. The subfolder must belong to the specified folder." required: - "hashed_ids" - "folder_id" required: true responses: "200": description: "Successfully queued move of all the media." content: application/json: schema: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false "207": description: "Successfully queued move of at least one media. Other provided hashed_ids failed." content: application/json: schema: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false properties: partial_errors: type: "array" items: type: "object" unevaluatedProperties: false properties: media_id: type: "string" error: type: "string" "400": description: "Invalid request." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" example: error: "You can only request to move 100 or less media at one time." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "move" /medias/restore: put: summary: "Restore Media" description: "Restores archived medias to your account. This method accepts a list of up to 100 medias to restore per request. It processes requests asynchronously and will return a background_job_status object rather than the typical Media response object. Your account must have access to the Archiving feature to use this method.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Media" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: hashed_ids: type: "array" items: type: "string" description: "An array of the media hashed IDs to be restored." folder_id: type: "string" description: "The hashed ID of the folder to restore the medias to." required: - "hashed_ids" - "folder_id" required: true responses: "200": description: "Successful restoration of media." content: application/json: schema: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false properties: container: type: "object" unevaluatedProperties: false properties: type: type: "string" description: "The type of container the medias will be restored to." name: type: "string" description: "The display name of the container the medias will be restored to." hashedId: type: "string" description: "The hashed ID of the container the medias will be restored to." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "403": description: "Forbidden, e.g. account does not have access to archiving." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "422": description: "Missing arguments for restoration of media." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Incorrect number of parameters provided. Provide one folder_id." description: "An error message that the necessary parameters were not provided." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "restore" /medias/copy: put: summary: "Bulk Copy Media" description: "This method accepts a list of medias to copy to a destination folder. It processes requests asynchronously and will return a background_job_status object rather than the typical Media response object.\n\nEach media will be duplicated and the copy will be placed in the specified destination folder. The original media files will not be affected.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization granting the `update` permission on the destination folder\ncan also be used; only the media the token's authorizations name are\ncopied.\n" tags: - "Media" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: hashed_ids: type: "array" items: type: "string" description: "An array of the media hashed IDs to be copied." folder_id: type: "string" description: "The hashed ID of the destination folder where the copies will be placed." required: - "hashed_ids" - "folder_id" required: true responses: "200": description: "Successful copy request of media." content: application/json: schema: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false properties: destination: type: "object" unevaluatedProperties: false properties: type: type: "string" description: "The type of the destination container." name: type: "string" description: "The name of the destination folder." hashedId: type: "string" description: "The hashed ID of the destination folder." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "422": description: "Unprocessable entity, e.g. missing required parameters." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "media" x-speakeasy-name-override: "bulkCopy" /medias/{mediaId}/customizations: get: summary: "Show Customizations" description: "Fetches explicitly defined customizations for the video.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: playerColor: type: "string" description: "The color of the video player." stillUrl: type: "string" autoPlay: type: "string" description: "Whether the video should auto play or not." bpbTime: type: "string" controlsVisibleOnLoad: type: "string" endVideoBehavior: type: "string" description: "Behavior of the video at the end." fullscreenButton: type: "string" branding: type: "string" playbar: type: "string" playButton: type: "string" description: "Indicates if the play button is visible." 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: type: "string" description: "String representation of whether the key moments feature is enabled." plugin: type: "object" unevaluatedProperties: true properties: passwordProtectedVideo: type: "object" unevaluatedProperties: false properties: on: type: "string" src: type: "string" challenge: type: "string" async: type: "string" videoThumbnail: type: "object" unevaluatedProperties: false properties: clickToPlayButton: type: "string" socialbar-v1: type: "object" unevaluatedProperties: false properties: buttons: type: "string" showTweetCount: type: "string" tweetText: type: "string" height: type: "string" chapters: type: "object" unevaluatedProperties: false properties: visibleOnLoad: type: "string" chapterList: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" on: type: "string" postRoll-v1: type: "object" unevaluatedProperties: false properties: rewatch: type: "string" description: "String representation of whether the video can be rewatched." text: type: "string" description: "The URL of the text to be displayed." link: type: "string" description: "The URL of the link to be displayed." time: type: "string" description: "The time when the post-roll should be displayed as a string." autoSize: type: "string" description: "String representation of whether the post-roll will automatically adjust its size." style: type: "object" unevaluatedProperties: false properties: backgroundColor: type: "string" description: "The background color of the post-roll." ctaType: type: "string" description: "The type of call-to-action to be displayed." on: type: "string" description: "String representation of whether the post-roll is enabled." conversionOpportunityKey: type: "string" description: "The key used for tracking conversion opportunities." description: "Adds a Call To Action to your Video (response format)" captions-v1: type: "object" unevaluatedProperties: false properties: on: type: "string" description: "String representation of whether the captions plugin is enabled (\"true\" or \"false\")." onByDefault: type: "string" description: "String representation of whether captions are turned on by default (\"true\" or \"false\")." description: "Captions plugin configuration (response format)" description: "Container for player plugin configurations. Plugin keys are extensible and\nnot strictly validated; the documented sub-objects represent the most\ncommon plugins.\n" private: type: "object" unevaluatedProperties: false properties: password_protect_on: type: "string" show_comments: type: "string" encrypted: type: "object" unevaluatedProperties: false properties: password_protect_password: type: "string" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "get" post: summary: "Create Customizations" description: "Set customizations for a video. Replaces the customizations explicitly set for this video.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: autoPlay: type: "boolean" 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." controlsVisibleOnLoad: type: "boolean" description: "If set to true, controls like the big play button, playbar, volume, etc. will be visible as soon as the video is embedded." copyLinkAndThumbnailEnabled: type: "boolean" description: "If set to false, the option to “Copy Link and Thumbnail” will be removed when right-clicking on the video." doNotTrack: type: "boolean" description: "If set to true, data for each viewing session will not be tracked." email: type: "string" description: "Associate a specific email address with this video’s viewing sessions." endVideoBehavior: type: "string" 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)." fakeFullscreen: type: "boolean" description: "If set to true, the video will try to play in a pseudo-fullscreen mode on certain mobile devices." fitStrategy: type: "string" 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." fullscreenButton: type: "boolean" description: "If set to true, the fullscreen button will be available as a video control." fullscreenOnRotateToLandscape: type: "boolean" description: "If set to false, the video will not automatically go to fullscreen mode on mobile when rotated to landscape." keyMoments: type: "boolean" description: "If set to false, the key moments feature will be disabled." muted: type: "boolean" description: "If set to true, the video will start in a muted state." playbackRateControl: type: "boolean" description: "If set to false, the playback speed controls in the settings menu will be hidden." playbar: type: "boolean" description: "If set to true, the playbar will be available. If set to false, it will be hidden." playButton: type: "boolean" description: "Indicates if the play button is visible." playerColor: type: "string" description: "Changes the base color of the player. Expects a hexadecimal rgb string." playlistLinks: type: "boolean" description: "Enables the use of specially crafted links on the page to associate with a video, turning them into a playlist." playlistLoop: type: "boolean" 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." playsinline: type: "boolean" description: "If set to false, videos will play within the native mobile player." playPauseNotifier: type: "boolean" description: "If set to false, animations for the Pause and Play symbols will be removed." playSuspendedOffScreen: type: "boolean" description: "If set to false for a muted autoplay video, the video won't pause when out of view." plugin: type: "object" unevaluatedProperties: false properties: videoThumbnail: type: "object" unevaluatedProperties: false properties: clickToPlayButton: type: "boolean" description: "If set to false, removes the “Click to Play” button on video thumbnails." socialbar-v1: type: "object" unevaluatedProperties: false properties: buttons: type: "string" showTweetCount: type: "boolean" tweetText: type: "string" height: type: "integer" chapters: type: "object" unevaluatedProperties: false properties: visibleOnLoad: type: "boolean" chapterList: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" on: type: "boolean" postRoll-v1: type: "object" unevaluatedProperties: false properties: rewatch: type: "boolean" description: "If set to true, allows the video to be rewatched." text: type: "string" description: "The URL of the text to be displayed." link: type: "string" description: "The URL of the link to be displayed." time: oneOf: - type: "string" - type: "number" unevaluatedProperties: false description: "The time when the post-roll should be displayed. Can be a string like \"end\" or a number representing seconds." autoSize: type: "boolean" description: "If set to true, the post-roll will automatically adjust its size." style: type: "object" unevaluatedProperties: false properties: backgroundColor: type: "string" examples: - "#303030" description: "The background color of the post-roll." ctaType: type: "string" examples: - "text" description: "The type of call-to-action to be displayed. Typically set to \"text\". Other options are \"image\" which allows for \"altText\", and \"html\"." on: type: "boolean" description: "If set to true, the post-roll is enabled." conversionOpportunityKey: type: "string" description: "The key used for tracking conversion opportunities." description: "Adds a Call To Action to your Video" captions-v1: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the captions plugin is enabled and captions controls will be available to viewers." onByDefault: type: "boolean" description: "If set to true, captions will be turned on automatically when the video loads. Only takes effect when the captions plugin is enabled." description: "Enables closed captions for the video" preload: type: "string" description: "Sets the video’s preload property. Possible values are metadata, auto, none, true, and false." qualityControl: type: "boolean" description: "If set to false, the video quality selector in the settings menu will be hidden." qualityMax: type: "integer" description: "Specifies the maximum quality the video will play at." qualityMin: type: "integer" description: "Specifies the minimum quality the video will play at." resumable: type: "string" description: "Determines if the video should resume from where the viewer left off. Options are true, false, and auto." seo: type: "boolean" description: "If set to true, the video’s metadata will be injected into the page’s markup for SEO." settingsControl: type: "boolean" description: "If set to true, the settings control will be available." silentAutoPlay: type: "string" description: "Determines how videos handle autoplay in contexts where normal autoplay might be blocked. Options are true, allow, and false." smallPlayButton: type: "boolean" stillUrl: type: "string" description: "Overrides the thumbnail image that appears before the video plays." time: type: "string" description: "Sets the starting time of the video." thumbnailAltText: type: "string" description: "Sets the Thumbnail Alt Text for the media." videoFoam: anyOf: - type: "boolean" examples: - true - type: "object" unevaluatedProperties: false properties: minWidth: type: "integer" description: "Minimum width the video can be resized to." maxWidth: type: "integer" description: "Maximum width the video can be resized to." minHeight: type: "integer" description: "Minimum height the video can be resized to." maxHeight: type: "integer" description: "Maximum height the video can be resized to." description: "Examples:\n```json\n{\n \"minWidth\": 400,\n \"maxWidth\": 960\n}\n```\n```json\n{\n \"minHeight\": 300,\n \"maxHeight\": 450\n}\n```\n" unevaluatedProperties: false 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." volume: type: "number" description: "Sets the volume of the video." volumeControl: type: "boolean" description: "When set to true, a volume control is available over the video." wmode: type: "string" description: "If set to transparent, the background behind the player will be transparent instead of black." description: "A collection of settings you can apply to a video to change its appearance and\nbehavior.\n" required: true responses: "201": description: "Successful response" content: application/json: schema: type: "object" unevaluatedProperties: false properties: playerColor: type: "string" description: "The color of the video player." stillUrl: type: "string" autoPlay: type: "string" description: "Whether the video should auto play or not." bpbTime: type: "string" controlsVisibleOnLoad: type: "string" endVideoBehavior: type: "string" description: "Behavior of the video at the end." fullscreenButton: type: "string" branding: type: "string" playbar: type: "string" playButton: type: "string" description: "Indicates if the play button is visible." 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: type: "string" description: "String representation of whether the key moments feature is enabled." plugin: type: "object" unevaluatedProperties: true properties: passwordProtectedVideo: type: "object" unevaluatedProperties: false properties: on: type: "string" src: type: "string" challenge: type: "string" async: type: "string" videoThumbnail: type: "object" unevaluatedProperties: false properties: clickToPlayButton: type: "string" socialbar-v1: type: "object" unevaluatedProperties: false properties: buttons: type: "string" showTweetCount: type: "string" tweetText: type: "string" height: type: "string" chapters: type: "object" unevaluatedProperties: false properties: visibleOnLoad: type: "string" chapterList: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" on: type: "string" postRoll-v1: type: "object" unevaluatedProperties: false properties: rewatch: type: "string" description: "String representation of whether the video can be rewatched." text: type: "string" description: "The URL of the text to be displayed." link: type: "string" description: "The URL of the link to be displayed." time: type: "string" description: "The time when the post-roll should be displayed as a string." autoSize: type: "string" description: "String representation of whether the post-roll will automatically adjust its size." style: type: "object" unevaluatedProperties: false properties: backgroundColor: type: "string" description: "The background color of the post-roll." ctaType: type: "string" description: "The type of call-to-action to be displayed." on: type: "string" description: "String representation of whether the post-roll is enabled." conversionOpportunityKey: type: "string" description: "The key used for tracking conversion opportunities." description: "Adds a Call To Action to your Video (response format)" captions-v1: type: "object" unevaluatedProperties: false properties: on: type: "string" description: "String representation of whether the captions plugin is enabled (\"true\" or \"false\")." onByDefault: type: "string" description: "String representation of whether captions are turned on by default (\"true\" or \"false\")." description: "Captions plugin configuration (response format)" description: "Container for player plugin configurations. Plugin keys are extensible and\nnot strictly validated; the documented sub-objects represent the most\ncommon plugins.\n" private: type: "object" unevaluatedProperties: false properties: password_protect_on: type: "string" show_comments: type: "string" encrypted: type: "object" unevaluatedProperties: false properties: password_protect_password: type: "string" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "create" put: summary: "Update Customizations" 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.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video to be customized." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: autoPlay: type: "boolean" 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." controlsVisibleOnLoad: type: "boolean" description: "If set to true, controls like the big play button, playbar, volume, etc. will be visible as soon as the video is embedded." copyLinkAndThumbnailEnabled: type: "boolean" description: "If set to false, the option to “Copy Link and Thumbnail” will be removed when right-clicking on the video." doNotTrack: type: "boolean" description: "If set to true, data for each viewing session will not be tracked." email: type: "string" description: "Associate a specific email address with this video’s viewing sessions." endVideoBehavior: type: "string" 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)." fakeFullscreen: type: "boolean" description: "If set to true, the video will try to play in a pseudo-fullscreen mode on certain mobile devices." fitStrategy: type: "string" 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." fullscreenButton: type: "boolean" description: "If set to true, the fullscreen button will be available as a video control." fullscreenOnRotateToLandscape: type: "boolean" description: "If set to false, the video will not automatically go to fullscreen mode on mobile when rotated to landscape." keyMoments: type: "boolean" description: "If set to false, the key moments feature will be disabled." muted: type: "boolean" description: "If set to true, the video will start in a muted state." playbackRateControl: type: "boolean" description: "If set to false, the playback speed controls in the settings menu will be hidden." playbar: type: "boolean" description: "If set to true, the playbar will be available. If set to false, it will be hidden." playButton: type: "boolean" description: "Indicates if the play button is visible." playerColor: type: "string" description: "Changes the base color of the player. Expects a hexadecimal rgb string." playlistLinks: type: "boolean" description: "Enables the use of specially crafted links on the page to associate with a video, turning them into a playlist." playlistLoop: type: "boolean" 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." playsinline: type: "boolean" description: "If set to false, videos will play within the native mobile player." playPauseNotifier: type: "boolean" description: "If set to false, animations for the Pause and Play symbols will be removed." playSuspendedOffScreen: type: "boolean" description: "If set to false for a muted autoplay video, the video won't pause when out of view." plugin: type: "object" unevaluatedProperties: false properties: videoThumbnail: type: "object" unevaluatedProperties: false properties: clickToPlayButton: type: "boolean" description: "If set to false, removes the “Click to Play” button on video thumbnails." socialbar-v1: type: "object" unevaluatedProperties: false properties: buttons: type: "string" showTweetCount: type: "boolean" tweetText: type: "string" height: type: "integer" chapters: type: "object" unevaluatedProperties: false properties: visibleOnLoad: type: "boolean" chapterList: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" on: type: "boolean" postRoll-v1: type: "object" unevaluatedProperties: false properties: rewatch: type: "boolean" description: "If set to true, allows the video to be rewatched." text: type: "string" description: "The URL of the text to be displayed." link: type: "string" description: "The URL of the link to be displayed." time: oneOf: - type: "string" - type: "number" unevaluatedProperties: false description: "The time when the post-roll should be displayed. Can be a string like \"end\" or a number representing seconds." autoSize: type: "boolean" description: "If set to true, the post-roll will automatically adjust its size." style: type: "object" unevaluatedProperties: false properties: backgroundColor: type: "string" examples: - "#303030" description: "The background color of the post-roll." ctaType: type: "string" examples: - "text" description: "The type of call-to-action to be displayed. Typically set to \"text\". Other options are \"image\" which allows for \"altText\", and \"html\"." on: type: "boolean" description: "If set to true, the post-roll is enabled." conversionOpportunityKey: type: "string" description: "The key used for tracking conversion opportunities." description: "Adds a Call To Action to your Video" captions-v1: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the captions plugin is enabled and captions controls will be available to viewers." onByDefault: type: "boolean" description: "If set to true, captions will be turned on automatically when the video loads. Only takes effect when the captions plugin is enabled." description: "Enables closed captions for the video" preload: type: "string" description: "Sets the video’s preload property. Possible values are metadata, auto, none, true, and false." qualityControl: type: "boolean" description: "If set to false, the video quality selector in the settings menu will be hidden." qualityMax: type: "integer" description: "Specifies the maximum quality the video will play at." qualityMin: type: "integer" description: "Specifies the minimum quality the video will play at." resumable: type: "string" description: "Determines if the video should resume from where the viewer left off. Options are true, false, and auto." seo: type: "boolean" description: "If set to true, the video’s metadata will be injected into the page’s markup for SEO." settingsControl: type: "boolean" description: "If set to true, the settings control will be available." silentAutoPlay: type: "string" description: "Determines how videos handle autoplay in contexts where normal autoplay might be blocked. Options are true, allow, and false." smallPlayButton: type: "boolean" stillUrl: type: "string" description: "Overrides the thumbnail image that appears before the video plays." time: type: "string" description: "Sets the starting time of the video." thumbnailAltText: type: "string" description: "Sets the Thumbnail Alt Text for the media." videoFoam: anyOf: - type: "boolean" examples: - true - type: "object" unevaluatedProperties: false properties: minWidth: type: "integer" description: "Minimum width the video can be resized to." maxWidth: type: "integer" description: "Maximum width the video can be resized to." minHeight: type: "integer" description: "Minimum height the video can be resized to." maxHeight: type: "integer" description: "Maximum height the video can be resized to." description: "Examples:\n```json\n{\n \"minWidth\": 400,\n \"maxWidth\": 960\n}\n```\n```json\n{\n \"minHeight\": 300,\n \"maxHeight\": 450\n}\n```\n" unevaluatedProperties: false 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." volume: type: "number" description: "Sets the volume of the video." volumeControl: type: "boolean" description: "When set to true, a volume control is available over the video." wmode: type: "string" description: "If set to transparent, the background behind the player will be transparent instead of black." description: "A collection of settings you can apply to a video to change its appearance and\nbehavior.\n" required: true responses: "200": description: "Video customization update successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: playerColor: type: "string" description: "The color of the video player." stillUrl: type: "string" autoPlay: type: "string" description: "Whether the video should auto play or not." bpbTime: type: "string" controlsVisibleOnLoad: type: "string" endVideoBehavior: type: "string" description: "Behavior of the video at the end." fullscreenButton: type: "string" branding: type: "string" playbar: type: "string" playButton: type: "string" description: "Indicates if the play button is visible." 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: type: "string" description: "String representation of whether the key moments feature is enabled." plugin: type: "object" unevaluatedProperties: true properties: passwordProtectedVideo: type: "object" unevaluatedProperties: false properties: on: type: "string" src: type: "string" challenge: type: "string" async: type: "string" videoThumbnail: type: "object" unevaluatedProperties: false properties: clickToPlayButton: type: "string" socialbar-v1: type: "object" unevaluatedProperties: false properties: buttons: type: "string" showTweetCount: type: "string" tweetText: type: "string" height: type: "string" chapters: type: "object" unevaluatedProperties: false properties: visibleOnLoad: type: "string" chapterList: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" on: type: "string" postRoll-v1: type: "object" unevaluatedProperties: false properties: rewatch: type: "string" description: "String representation of whether the video can be rewatched." text: type: "string" description: "The URL of the text to be displayed." link: type: "string" description: "The URL of the link to be displayed." time: type: "string" description: "The time when the post-roll should be displayed as a string." autoSize: type: "string" description: "String representation of whether the post-roll will automatically adjust its size." style: type: "object" unevaluatedProperties: false properties: backgroundColor: type: "string" description: "The background color of the post-roll." ctaType: type: "string" description: "The type of call-to-action to be displayed." on: type: "string" description: "String representation of whether the post-roll is enabled." conversionOpportunityKey: type: "string" description: "The key used for tracking conversion opportunities." description: "Adds a Call To Action to your Video (response format)" captions-v1: type: "object" unevaluatedProperties: false properties: on: type: "string" description: "String representation of whether the captions plugin is enabled (\"true\" or \"false\")." onByDefault: type: "string" description: "String representation of whether captions are turned on by default (\"true\" or \"false\")." description: "Captions plugin configuration (response format)" description: "Container for player plugin configurations. Plugin keys are extensible and\nnot strictly validated; the documented sub-objects represent the most\ncommon plugins.\n" private: type: "object" unevaluatedProperties: false properties: password_protect_on: type: "string" show_comments: type: "string" encrypted: type: "object" unevaluatedProperties: false properties: password_protect_password: type: "string" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "update" delete: summary: "Delete Customizations" description: "Deletes all explicit customizations for a video, making it act as if it has never been customized.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] 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": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "delete" /medias/{mediaId}/customizations/appearance: get: summary: "Show Appearance Customizations" description: "Fetches the explicitly-set appearance customizations (player color, gradient,\nrounded corners, control contrast, and customer logo) for the video.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: playerColor: type: "string" playerColorGradient: type: "object" unevaluatedProperties: false properties: on: type: "string" colors: type: "array" items: type: "array" roundedPlayer: type: "string" opaqueControls: type: "string" contrastIcons: type: "string" branding: type: "string" showCustomerLogo: type: "string" customerLogoImageUrl: type: "string" customerLogoTargetUrl: type: "string" customerLogoPlacement: type: "string" customerLogoSizePercent: type: "string" description: "Explicitly-set appearance customizations for the video. Values are returned\nas strings (e.g. \"true\", \"12\"); fields that have never been set are omitted.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "getAppearance" put: summary: "Update Appearance Customizations" description: "Applies a partial update to a video's appearance customizations. Only the\nfields supplied are changed; sending a field as null deletes it (reverting to\nthe default).\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video to be customized." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: playerColor: type: "string" examples: - "2949E5" description: "Base color of the player as a hexadecimal RGB string (no leading '#')." playerColorGradient: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "Whether the gradient is enabled." colors: type: "array" items: type: "array" description: "Ordered list of [hex color, stop] pairs defining the gradient." description: "Optional gradient applied to the player color." roundedPlayer: type: "integer" description: "Corner radius of the player in pixels. 0 disables rounding." opaqueControls: type: "boolean" description: "If true, player controls render on an opaque background." contrastIcons: type: "boolean" description: "If true, control icons use a higher-contrast treatment." branding: type: "boolean" description: "If false, Wistia branding is hidden on the player." showCustomerLogo: type: "boolean" description: "If true, your customer logo is shown on the player." customerLogoImageUrl: type: "string" description: "URL of the customer logo image to display on the player." customerLogoTargetUrl: type: "string" description: "URL the customer logo links to when clicked." customerLogoPlacement: type: "string" description: "Placement of the customer logo on the player (e.g. top-right)." customerLogoSizePercent: type: "integer" description: "Size of the customer logo as a percentage of the player." description: "Player visual identity & branding for a video. Every field is optional; only\nthe fields you send are changed (partial update). Send a field as null to\nreset it to its default.\n" required: true responses: "200": description: "Appearance customization update successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: playerColor: type: "string" playerColorGradient: type: "object" unevaluatedProperties: false properties: on: type: "string" colors: type: "array" items: type: "array" roundedPlayer: type: "string" opaqueControls: type: "string" contrastIcons: type: "string" branding: type: "string" showCustomerLogo: type: "string" customerLogoImageUrl: type: "string" customerLogoTargetUrl: type: "string" customerLogoPlacement: type: "string" customerLogoSizePercent: type: "string" description: "Explicitly-set appearance customizations for the video. Values are returned\nas strings (e.g. \"true\", \"12\"); fields that have never been set are omitted.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "updateAppearance" /medias/{mediaId}/customizations/playback: get: summary: "Show Playback Customizations" description: "Fetches the explicitly-set playback customizations (autoplay, mute, controls\nvisibility, player control buttons, end behavior, looping, quality bounds, and\nembed/runtime flags) for the video.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: autoPlay: type: "string" silentAutoPlay: type: "string" muted: type: "string" volume: type: "string" controlsVisibleOnLoad: type: "string" playButton: type: "string" smallPlayButton: type: "string" playbar: type: "string" volumeControl: type: "string" fullscreenButton: type: "string" settingsControl: type: "string" playbackRateControl: type: "string" qualityControl: type: "string" qualityMin: type: "string" qualityMax: type: "string" videoQuality: type: "string" hls: type: "string" endVideoBehavior: type: "string" playsinline: type: "string" playlistLoop: type: "string" playlistLinks: type: "string" playPauseNotifier: type: "string" playSuspendedOffScreen: type: "string" resumable: type: "string" preload: type: "string" time: type: "string" keyMoments: type: "string" fullscreenOnRotateToLandscape: type: "string" fakeFullScreen: type: "string" videoFoam: anyOf: - type: "string" - type: "object" unevaluatedProperties: false properties: minWidth: type: "string" maxWidth: type: "string" minHeight: type: "string" maxHeight: type: "string" unevaluatedProperties: false description: "Either a string (e.g. \"true\") when set as a boolean, or an object with\nstring-valued min/max width/height when set as a responsive-size config.\n" wmode: type: "string" bpbTime: type: "string" spherical: type: "string" clickForSound: oneOf: - type: "string" - type: "object" unevaluatedProperties: true unevaluatedProperties: false seo: type: "string" doNotTrack: type: "string" copyLinkAndThumbnailEnabled: type: "string" email: type: "string" googleAnalytics: type: "string" description: "Explicitly-set playback customizations for the video. Values are returned as\nstrings (e.g. \"true\", \"12\"); fields that have never been set are omitted.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "getPlayback" put: summary: "Update Playback Customizations" description: "Applies a partial update to a video's playback customizations. Only the\nfields supplied are changed; sending a field as null deletes it (reverting to\nthe default).\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video to be customized." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: autoPlay: type: "boolean" 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." silentAutoPlay: type: "string" description: "Determines how videos handle autoplay in contexts where normal autoplay might be blocked. Options are \"true\", \"allow\", and \"false\"." muted: type: "boolean" description: "If set to true, the video will start in a muted state." volume: type: "number" description: "Sets the volume of the video." controlsVisibleOnLoad: type: "boolean" description: "If set to true, controls like the big play button, playbar, volume, etc. will be visible as soon as the video is embedded." playButton: type: "boolean" description: "Indicates if the play button is visible." smallPlayButton: type: "boolean" description: "If set to true, the small play button control is shown." playbar: type: "boolean" description: "If set to true, the playbar will be available. If set to false, it will be hidden." volumeControl: type: "boolean" description: "When set to true, a volume control is available over the video." fullscreenButton: type: "boolean" description: "If set to true, the fullscreen button will be available as a video control." settingsControl: type: "boolean" description: "If set to true, the settings control will be available." playbackRateControl: type: "boolean" description: "If set to false, the playback speed controls in the settings menu will be hidden." qualityControl: type: "boolean" description: "If set to false, the video quality selector in the settings menu will be hidden." qualityMin: type: "integer" description: "Specifies the minimum quality the video will play at." qualityMax: type: "integer" description: "Specifies the maximum quality the video will play at." videoQuality: type: "string" description: "Sets the default video quality the video will play at." hls: type: "boolean" description: "If set to true, HLS adaptive bitrate streaming is enabled." endVideoBehavior: type: "string" 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)." playsinline: type: "boolean" description: "If set to false, videos will play within the native mobile player." playlistLoop: type: "boolean" 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." playlistLinks: type: "boolean" description: "Enables the use of specially crafted links on the page to associate with a video, turning them into a playlist." playPauseNotifier: type: "boolean" description: "If set to false, animations for the Pause and Play symbols will be removed." playSuspendedOffScreen: type: "boolean" description: "If set to false for a muted autoplay video, the video won’t pause when out of view." resumable: type: "string" description: "Determines if the video should resume from where the viewer left off. Options are \"true\", \"false\", and \"auto\"." preload: type: "string" description: "Sets the video’s preload property. Possible values are metadata, auto, none, true, and false." time: type: "string" description: "Sets the starting time of the video." keyMoments: type: "boolean" description: "If set to false, the key moments feature will be disabled." fullscreenOnRotateToLandscape: type: "boolean" description: "If set to false, the video will not automatically go to fullscreen mode on mobile when rotated to landscape." fakeFullScreen: type: "boolean" description: "If set to true, the video will try to play in a pseudo-fullscreen mode on certain mobile devices." videoFoam: anyOf: - type: "boolean" examples: - true - type: "object" unevaluatedProperties: false properties: minWidth: type: "integer" description: "Minimum width the video can be resized to." maxWidth: type: "integer" description: "Maximum width the video can be resized to." minHeight: type: "integer" description: "Minimum height the video can be resized to." maxHeight: type: "integer" description: "Maximum height the video can be resized to." description: "Examples:\n```json\n{\n \"minWidth\": 400,\n \"maxWidth\": 960\n}\n```\n```json\n{\n \"minHeight\": 300,\n \"maxHeight\": 450\n}\n```\n" unevaluatedProperties: false 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." wmode: type: "string" description: "If set to transparent, the background behind the player will be transparent instead of black." bpbTime: type: "string" description: "Controls when the big play button appears, expressed as a string." spherical: type: "boolean" description: "If set to true, the video is rendered as a spherical (360-degree) video." clickForSound: type: "boolean" description: "If set to true, viewers can click to enable sound on a muted video." seo: type: "boolean" description: "If set to true, the video’s metadata will be injected into the page’s markup for SEO." doNotTrack: type: "boolean" description: "If set to true, data for each viewing session will not be tracked." copyLinkAndThumbnailEnabled: type: "boolean" description: "If set to false, the option to “Copy Link and Thumbnail” will be removed when right-clicking on the video." email: type: "string" description: "Associate a specific email address with this video’s viewing sessions." googleAnalytics: type: "string" description: "Google Analytics tracking configuration to associate with this video’s viewing sessions." description: "Playback behavior and player controls for a video. Every field is optional;\nonly the fields you send are changed (partial update). Send a field as null\nto reset it to its default.\n" required: true responses: "200": description: "Playback customization update successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: autoPlay: type: "string" silentAutoPlay: type: "string" muted: type: "string" volume: type: "string" controlsVisibleOnLoad: type: "string" playButton: type: "string" smallPlayButton: type: "string" playbar: type: "string" volumeControl: type: "string" fullscreenButton: type: "string" settingsControl: type: "string" playbackRateControl: type: "string" qualityControl: type: "string" qualityMin: type: "string" qualityMax: type: "string" videoQuality: type: "string" hls: type: "string" endVideoBehavior: type: "string" playsinline: type: "string" playlistLoop: type: "string" playlistLinks: type: "string" playPauseNotifier: type: "string" playSuspendedOffScreen: type: "string" resumable: type: "string" preload: type: "string" time: type: "string" keyMoments: type: "string" fullscreenOnRotateToLandscape: type: "string" fakeFullScreen: type: "string" videoFoam: anyOf: - type: "string" - type: "object" unevaluatedProperties: false properties: minWidth: type: "string" maxWidth: type: "string" minHeight: type: "string" maxHeight: type: "string" unevaluatedProperties: false description: "Either a string (e.g. \"true\") when set as a boolean, or an object with\nstring-valued min/max width/height when set as a responsive-size config.\n" wmode: type: "string" bpbTime: type: "string" spherical: type: "string" clickForSound: oneOf: - type: "string" - type: "object" unevaluatedProperties: true unevaluatedProperties: false seo: type: "string" doNotTrack: type: "string" copyLinkAndThumbnailEnabled: type: "string" email: type: "string" googleAnalytics: type: "string" description: "Explicitly-set playback customizations for the video. Values are returned as\nstrings (e.g. \"true\", \"12\"); fields that have never been set are omitted.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "updatePlayback" /medias/{mediaId}/customizations/thumbnail: get: summary: "Show Thumbnail Customizations" description: "Fetches the explicitly-set thumbnail customizations (still image URL, alt\ntext, fit strategy, and the looping video thumbnail / text-overlay plugins)\nfor the video.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: stillUrl: type: "string" thumbnailAltText: type: "string" fitStrategy: type: "string" unalteredStillImageAsset: oneOf: - type: "string" - type: "object" unevaluatedProperties: true unevaluatedProperties: false plugin: type: "object" unevaluatedProperties: true properties: videoThumbnail: type: "object" unevaluatedProperties: true properties: clickToPlayButton: type: "string" clickForSound: type: "string" hashedId: type: "string" trimStart: type: "string" trimEnd: type: "string" priorityMode: type: "string" thumbnailTextOverlay-v2: type: "object" unevaluatedProperties: true properties: on: type: "string" text: type: "string" description: "Explicitly-set thumbnail customizations for the video. Values are returned\nas strings (e.g. \"true\"); fields that have never been set are omitted.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "getThumbnail" put: summary: "Update Thumbnail Customizations" description: "Applies a partial update to a video's thumbnail customizations. Only the\nfields supplied are changed; sending a field as null deletes it (reverting to\nthe default).\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video to be customized." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: stillUrl: type: "string" description: "Overrides the thumbnail image that appears before the video plays." thumbnailAltText: type: "string" description: "Alt text for the thumbnail image, used for accessibility." fitStrategy: type: "string" description: "Resizes the thumbnail when there's a discrepancy between its aspect ratio and that of its parent container. Options are contain, cover, fill, and none." unalteredStillImageAsset: type: "string" description: "Reference to the original, unaltered still image asset." plugin: type: "object" unevaluatedProperties: false properties: videoThumbnail: type: "object" unevaluatedProperties: false properties: clickToPlayButton: type: "boolean" description: "If set to false, removes the “Click to Play” button on video thumbnails." clickForSound: type: "boolean" description: "If set to true, shows a click-for-sound affordance on the video thumbnail." hashedId: type: "string" description: "The hashed ID of the media used as the looping video thumbnail." trimStart: type: "string" description: "Start time of the trimmed clip used as the video thumbnail." trimEnd: type: "string" description: "End time of the trimmed clip used as the video thumbnail." priorityMode: type: "string" description: "Priority mode controlling how the video thumbnail is loaded." description: "Looping video thumbnail (a short clip used as the poster)." thumbnailTextOverlay-v2: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the text overlay is enabled." text: type: "string" description: "The text displayed in the overlay." description: "Text overlay rendered on top of the thumbnail." description: "Container for thumbnail-related player plugin configurations." description: "Pre-play poster image and looping video thumbnail / text-overlay plugins for\na video. Every field is optional; only the fields you send are changed\n(partial update). Send a field as null to reset it to its default.\n" required: true responses: "200": description: "Thumbnail customization update successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: stillUrl: type: "string" thumbnailAltText: type: "string" fitStrategy: type: "string" unalteredStillImageAsset: oneOf: - type: "string" - type: "object" unevaluatedProperties: true unevaluatedProperties: false plugin: type: "object" unevaluatedProperties: true properties: videoThumbnail: type: "object" unevaluatedProperties: true properties: clickToPlayButton: type: "string" clickForSound: type: "string" hashedId: type: "string" trimStart: type: "string" trimEnd: type: "string" priorityMode: type: "string" thumbnailTextOverlay-v2: type: "object" unevaluatedProperties: true properties: on: type: "string" text: type: "string" description: "Explicitly-set thumbnail customizations for the video. Values are returned\nas strings (e.g. \"true\"); fields that have never been set are omitted.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "updateThumbnail" /medias/{mediaId}/customizations/accessibility: get: summary: "Show Accessibility Customizations" description: "Fetches the explicitly-set accessibility customizations (caption display and\nstyling, transcript display, and audio description) for the video.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: captionsBackgroundColor: type: "string" captionsBorderRadius: type: "string" captionsTextColor: type: "string" captionsTextSize: type: "string" captionsFontFamily: type: "string" transcriptEnabled: type: "string" showTranscriptSpeakers: type: "string" audioDescriptionControl: type: "string" plugin: type: "object" unevaluatedProperties: true properties: captions: type: "object" unevaluatedProperties: true properties: on: type: "string" onByDefault: type: "string" captions-v1: type: "object" unevaluatedProperties: true properties: on: type: "string" onByDefault: type: "string" extendedAudioDescription: type: "object" unevaluatedProperties: true properties: on: type: "string" description: "Explicitly-set accessibility customizations for the video. Values are\nreturned as strings (e.g. \"true\", \"12\"); fields that have never been set are\nomitted.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "getAccessibility" put: summary: "Update Accessibility Customizations" description: "Applies a partial update to a video's accessibility customizations. Only the\nfields supplied are changed; sending a field as null deletes it (reverting to\nthe default).\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video to be customized." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: captionsBackgroundColor: type: "string" examples: - "000000" description: "Background color of the captions as a hexadecimal RGB string (no leading '#')." captionsBorderRadius: type: "integer" description: "Corner radius of the captions background in pixels." captionsTextColor: type: "string" examples: - "ffffff" description: "Color of the captions text as a hexadecimal RGB string (no leading '#')." captionsTextSize: type: "integer" description: "Size of the captions text in pixels." captionsFontFamily: type: "string" description: "Font family used for the captions text." transcriptEnabled: type: "boolean" description: "If true, the interactive transcript is shown alongside the video." showTranscriptSpeakers: type: "boolean" description: "If true, speaker labels are displayed in the transcript." audioDescriptionControl: type: "boolean" description: "If true, the audio description control is available to viewers." plugin: type: "object" unevaluatedProperties: false properties: captions: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the captions plugin is enabled and captions controls will be available to viewers." onByDefault: type: "boolean" description: "If set to true, captions will be turned on automatically when the video loads. Only takes effect when the captions plugin is enabled." description: "Modern captions plugin configuration." captions-v1: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the captions plugin is enabled and captions controls will be available to viewers." onByDefault: type: "boolean" description: "If set to true, captions will be turned on automatically when the video loads. Only takes effect when the captions plugin is enabled." description: "Enables closed captions for the video." extendedAudioDescription: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the extended audio description plugin is enabled." description: "Enables an extended audio description track for the video." description: "Accessibility customizations for a video: caption display & styling,\ntranscript display, and audio description. Every field is optional; only the\nfields you send are changed (partial update). Send a field as null to reset\nit to its default.\n" required: true responses: "200": description: "Accessibility customization update successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: captionsBackgroundColor: type: "string" captionsBorderRadius: type: "string" captionsTextColor: type: "string" captionsTextSize: type: "string" captionsFontFamily: type: "string" transcriptEnabled: type: "string" showTranscriptSpeakers: type: "string" audioDescriptionControl: type: "string" plugin: type: "object" unevaluatedProperties: true properties: captions: type: "object" unevaluatedProperties: true properties: on: type: "string" onByDefault: type: "string" captions-v1: type: "object" unevaluatedProperties: true properties: on: type: "string" onByDefault: type: "string" extendedAudioDescription: type: "object" unevaluatedProperties: true properties: on: type: "string" description: "Explicitly-set accessibility customizations for the video. Values are\nreturned as strings (e.g. \"true\", \"12\"); fields that have never been set are\nomitted.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "updateAccessibility" /medias/{mediaId}/customizations/chapters: get: summary: "Show Chapters Customizations" description: "Fetches the explicitly-set chapter customizations (the chapter list and its\nvisibility) for the media.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the media." required: true schema: type: "string" responses: "200": description: "Successful response" content: application/json: schema: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: chapters: type: "object" unevaluatedProperties: true properties: on: type: "string" visibleOnLoad: type: "string" chapterList: type: "array" items: type: "object" unevaluatedProperties: true properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" audioChapters: type: "object" unevaluatedProperties: true properties: on: type: "string" visibleOnLoad: type: "string" chapterList: type: "array" items: type: "object" unevaluatedProperties: true properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" description: "Explicitly-set chapter customizations. Values are returned as strings.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "getChapters" put: summary: "Update Chapters Customizations" description: "Applies a partial update to a media's chapter customizations. Only the fields\nsupplied are changed; sending a field as null deletes it.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the media to be customized." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: false properties: chapters: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "Whether chapters are enabled." visibleOnLoad: type: "boolean" description: "Whether the chapter list is visible when the player loads." chapterList: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" title: type: "string" time: type: "string" description: "Start time of the chapter, in seconds." deleted: type: "string" description: "The ordered list of chapters." audioChapters: type: "object" unevaluatedProperties: false properties: on: type: "boolean" visibleOnLoad: type: "boolean" chapterList: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" description: "Table-of-contents chapters for the media. Use the `chapters` plugin for\nvideo and `audioChapters` for audio. Partial update; send a field as null to\nclear it.\n" required: true responses: "200": description: "Chapters customization update successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: chapters: type: "object" unevaluatedProperties: true properties: on: type: "string" visibleOnLoad: type: "string" chapterList: type: "array" items: type: "object" unevaluatedProperties: true properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" audioChapters: type: "object" unevaluatedProperties: true properties: on: type: "string" visibleOnLoad: type: "string" chapterList: type: "array" items: type: "object" unevaluatedProperties: true properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" description: "Explicitly-set chapter customizations. Values are returned as strings.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "updateChapters" /medias/{mediaId}/customizations/engagement: get: summary: "Show Engagement Customizations" description: "Fetches the explicitly-set engagement customizations (the end/pause Call To\nAction and timed annotation links) for the video.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: postRoll-v1: type: "object" unevaluatedProperties: true properties: rewatch: type: "string" text: type: "string" link: type: "string" time: type: "string" autoSize: type: "string" style: type: "object" unevaluatedProperties: true properties: backgroundColor: type: "string" ctaType: type: "string" on: type: "string" conversionOpportunityKey: type: "string" midrollLink-v1: type: "object" unevaluatedProperties: true properties: on: type: "string" links: type: "array" items: type: "object" unevaluatedProperties: true properties: text: type: "string" url: type: "string" time: type: "string" duration: type: "string" conversionOpportunityKey: type: "string" description: "Explicitly-set engagement customizations for the video. Values are returned\nas strings (e.g. \"true\"); fields that have never been set are omitted.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "getEngagement" put: summary: "Update Engagement Customizations" description: "Applies a partial update to a video's engagement customizations. Only the\nfields supplied are changed; sending a field as null deletes it (reverting to\nthe default).\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video to be customized." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: false properties: postRoll-v1: type: "object" unevaluatedProperties: false properties: rewatch: type: "boolean" description: "If set to true, allows the video to be rewatched." text: type: "string" description: "The text to be displayed." link: type: "string" description: "The URL of the link to be displayed." time: oneOf: - type: "string" - type: "number" unevaluatedProperties: false description: "The time when the post-roll should be displayed. Can be a string like \"end\" or a number representing seconds." autoSize: type: "boolean" description: "If set to true, the post-roll will automatically adjust its size." style: type: "object" unevaluatedProperties: false properties: backgroundColor: type: "string" examples: - "#303030" description: "The background color of the post-roll." ctaType: type: "string" examples: - "text" description: "The type of call-to-action to be displayed. Typically set to \"text\". Other options are \"image\" which allows for \"altText\", and \"html\"." on: type: "boolean" description: "If set to true, the post-roll is enabled." conversionOpportunityKey: type: "string" description: "The key used for tracking conversion opportunities." description: "Adds a Call To Action to your Video." midrollLink-v1: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the timed annotation links are enabled." links: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" description: "The text of the annotation link." url: type: "string" description: "The URL the annotation link points to." time: type: "string" description: "The time (in seconds) at which the link appears." duration: type: "string" description: "How long (in seconds) the link remains visible." description: "The set of annotation links." description: "Timed annotation links that appear over the video at specific times." description: "Container for engagement plugin configurations." description: "On-video engagement settings for a video: the end/pause Call To Action\n(postRoll-v1) and timed annotation links (midrollLink-v1). Every field is\noptional; only the fields you send are changed (partial update). Send a field\nas null to reset it to its default.\n" required: true responses: "200": description: "Engagement customization update successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: postRoll-v1: type: "object" unevaluatedProperties: true properties: rewatch: type: "string" text: type: "string" link: type: "string" time: type: "string" autoSize: type: "string" style: type: "object" unevaluatedProperties: true properties: backgroundColor: type: "string" ctaType: type: "string" on: type: "string" conversionOpportunityKey: type: "string" midrollLink-v1: type: "object" unevaluatedProperties: true properties: on: type: "string" links: type: "array" items: type: "object" unevaluatedProperties: true properties: text: type: "string" url: type: "string" time: type: "string" duration: type: "string" conversionOpportunityKey: type: "string" description: "Explicitly-set engagement customizations for the video. Values are returned\nas strings (e.g. \"true\"); fields that have never been set are omitted.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "updateEngagement" /medias/{mediaId}/customizations/related_media: get: summary: "Show Related Media Customizations" description: "Fetches the explicitly-set related-media (\"discover more\") customizations\n(which videos to recommend, when to show them, label and button text) for\nthe video.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: relatedMedia: type: "object" unevaluatedProperties: true properties: on: type: "string" hashedIdList: type: "array" items: type: "string" shouldShowOnPause: type: "string" shouldShowOnEnd: type: "string" mediaLabelText: type: "string" watchButtonText: type: "string" description: "Explicitly-set related-media customizations for the video. Values are\nreturned as strings (e.g. \"true\"); fields that have never been set are\nomitted.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "getRelatedMedia" put: summary: "Update Related Media Customizations" description: "Applies a partial update to a video's related-media customizations. Only the\nfields supplied are changed; sending a field as null deletes it (reverting to\nthe default).\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video to be customized." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: false properties: relatedMedia: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "Whether related-media recommendations are enabled." hashedIdList: type: "array" items: type: "string" description: "Ordered list of media hashed IDs to recommend." shouldShowOnPause: type: "boolean" description: "If true, recommendations are shown when the video is paused." shouldShowOnEnd: type: "boolean" description: "If true, recommendations are shown when the video ends." mediaLabelText: type: "string" description: "Label text displayed above the recommended media." watchButtonText: type: "string" description: "Text shown on the watch button for a recommended media." description: "Configuration for the related-media recommendations plugin." description: "Related-media (\"discover more\") recommendations shown on the video. Every\nfield is optional; only the fields you send are changed (partial update).\nSend a field as null to reset it to its default.\n" required: true responses: "200": description: "Related media customization update successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: relatedMedia: type: "object" unevaluatedProperties: true properties: on: type: "string" hashedIdList: type: "array" items: type: "string" shouldShowOnPause: type: "string" shouldShowOnEnd: type: "string" mediaLabelText: type: "string" watchButtonText: type: "string" description: "Explicitly-set related-media customizations for the video. Values are\nreturned as strings (e.g. \"true\"); fields that have never been set are\nomitted.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "updateRelatedMedia" /medias/{mediaId}/customizations/sharing: get: summary: "Show Sharing Customizations" description: "Fetches the explicitly-set sharing customizations (the social/embed/download\nshare bar: enabled channels, tweet text, download type, and page URL/title)\nfor the video.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: share: type: "object" unevaluatedProperties: true properties: on: type: "string" channels: type: "array" items: type: "string" tweetText: type: "string" downloadType: type: "string" overrideUrl: type: "string" pageUrl: type: "string" pageTitle: type: "string" conversionOpportunityKey: type: "string" description: "Explicitly-set sharing customizations for the video. Values are returned as\nstrings (e.g. \"true\"); fields that have never been set are omitted.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "getSharing" put: summary: "Update Sharing Customizations" description: "Applies a partial update to a video's sharing customizations. Only the fields\nsupplied are changed; sending a field as null deletes it (reverting to the\ndefault).\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video to be customized." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: false properties: share: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "Whether the share bar is enabled." channels: type: "array" items: type: "string" enum: - "embed" - "email" - "download" - "facebook" - "twitter" - "linkedIn" description: "Complete ordered list of share channels to enable on the share bar. This replaces the entire list — include every channel you want active. To enable downloads, include \"download\" here AND set downloadType." tweetText: type: "string" description: "Default text used when sharing the video to X/Twitter." downloadType: type: "string" enum: - "sd_mp4" - "hd_mp4" - "original" - "all_qualities" description: "Which download quality is offered to viewers. Only takes effect when \"download\" is included in the channels array." overrideUrl: type: "string" description: "URL used in place of the default share URL." pageUrl: type: "string" description: "URL of the page the share bar should reference." pageTitle: type: "string" description: "Title of the page the share bar should reference." conversionOpportunityKey: type: "string" description: "The key used for tracking conversion opportunities. Managed by Wistia when the share bar is enabled." description: "Configuration for the share bar plugin." description: "Social/embed/download share bar for a video. Every field is optional; only\nthe fields you send are changed (partial update). Send a field as null to\nreset it to its default.\n" required: true responses: "200": description: "Sharing customization update successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: share: type: "object" unevaluatedProperties: true properties: on: type: "string" channels: type: "array" items: type: "string" tweetText: type: "string" downloadType: type: "string" overrideUrl: type: "string" pageUrl: type: "string" pageTitle: type: "string" conversionOpportunityKey: type: "string" description: "Explicitly-set sharing customizations for the video. Values are returned as\nstrings (e.g. \"true\"); fields that have never been set are omitted.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "updateSharing" /medias/{mediaId}/customizations/lead_capture: get: summary: "Show Lead Capture Customizations" description: "Fetches the explicitly-set lead-capture plugins (Turnstile, Wistia Form, and\nHubSpot/Marketo/Pardot form embeds) for the video.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: requireEmail-v1: type: "object" unevaluatedProperties: true properties: on: type: "string" form: type: "object" unevaluatedProperties: true properties: on: type: "string" hubspotForm: type: "object" unevaluatedProperties: true properties: on: type: "string" marketoForm: type: "object" unevaluatedProperties: true properties: on: type: "string" pardotForm: type: "object" unevaluatedProperties: true properties: on: type: "string" description: "Explicitly-set lead-capture plugins for the video. Values are returned as\nstrings. Plugin contents are extensible, so additional keys may be present.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "getLeadCapture" put: summary: "Update Lead Capture Customizations" description: "Configures a single lead-capture provider for the video, mapping it to the\nappropriate underlying plugin. Only the selected provider is changed.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video to be customized." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: provider: type: "string" enum: - "wistia_form" - "hubspot" - "marketo" - "pardot" description: "Which lead-capture mechanism to configure." enabled: type: "boolean" description: "Whether the selected provider is turned on. Defaults to true." settings: type: "object" unevaluatedProperties: false properties: time: type: "string" description: "When the form appears: \"start\"/\"before\", a number of seconds, or \"end\"." allowSkip: type: "boolean" description: "Whether the viewer may skip the form." hashedId: type: "string" description: "(Wistia Form) The hashed ID of the Wistia form to embed." displayMode: type: "string" description: "(Wistia Form) How the form is displayed." showLogo: type: "boolean" description: "(Wistia Form) Whether to show the Wistia logo on the form." backgroundColor: type: "string" description: "Background color of the form as a hex string." formId: type: "string" description: "(HubSpot/Marketo/Pardot) The external form identifier." portalId: type: "string" description: "(HubSpot) The HubSpot portal/account identifier." description: "Provider-specific settings. Only the fields relevant to the chosen provider are used." required: - "provider" description: "Configure viewer email collection for a video using a single provider\ndiscriminator. Choose a provider, whether it is enabled, and provider-specific\nsettings. Which settings apply depends on the provider (e.g. a Wistia Form\nuses hashedId; CRM providers reference an external form).\n" required: true responses: "200": description: "Lead capture customization update successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: requireEmail-v1: type: "object" unevaluatedProperties: true properties: on: type: "string" form: type: "object" unevaluatedProperties: true properties: on: type: "string" hubspotForm: type: "object" unevaluatedProperties: true properties: on: type: "string" marketoForm: type: "object" unevaluatedProperties: true properties: on: type: "string" pardotForm: type: "object" unevaluatedProperties: true properties: on: type: "string" description: "Explicitly-set lead-capture plugins for the video. Values are returned as\nstrings. Plugin contents are extensible, so additional keys may be present.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "updateLeadCapture" /medias/{mediaId}/customizations/access: get: summary: "Show Access Customizations" description: "Fetches the explicitly-set password-protection settings for the video,\nincluding the stored password.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: private: type: "object" unevaluatedProperties: false properties: password_protect_on: type: "string" encrypted: type: "object" unevaluatedProperties: false properties: password_protect_password: type: "string" plugin: type: "object" unevaluatedProperties: true properties: passwordProtectedVideo: type: "object" unevaluatedProperties: true properties: on: type: "string" challenge: type: "string" src: type: "string" async: type: "string" description: "Explicitly-set password-protection settings. Values are returned as strings.\nIncludes the stored password under `encrypted` (redaction tracked in sc-65366).\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "getAccess" put: summary: "Update Access Customizations" description: "Applies a partial update to a video's password-protection settings. Only the\nfields supplied are changed; sending a field as null deletes it.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Customizations" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video to be customized." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: private: type: "object" unevaluatedProperties: false properties: password_protect_on: type: "boolean" description: "Whether password protection is enabled for the video." encrypted: type: "object" unevaluatedProperties: false properties: password_protect_password: type: "string" description: "The password viewers must enter. Stored encrypted; also returned by the show endpoint." plugin: type: "object" unevaluatedProperties: false properties: passwordProtectedVideo: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "Whether the password-protection plugin is enabled." challenge: type: "string" description: "Optional challenge/prompt text shown to viewers." src: type: "string" description: "Internal source marker for the protection plugin." async: type: "boolean" description: "Whether the password check is performed asynchronously." description: "Password-protection settings for a video. Partial update; send a field as\nnull to clear it. The password you send is stored encrypted.\n" required: true responses: "200": description: "Access customization update successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: private: type: "object" unevaluatedProperties: false properties: password_protect_on: type: "string" encrypted: type: "object" unevaluatedProperties: false properties: password_protect_password: type: "string" plugin: type: "object" unevaluatedProperties: true properties: passwordProtectedVideo: type: "object" unevaluatedProperties: true properties: on: type: "string" challenge: type: "string" src: type: "string" async: type: "string" description: "Explicitly-set password-protection settings. Values are returned as strings.\nIncludes the stored password under `encrypted` (redaction tracked in sc-65366).\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "customizations" x-speakeasy-name-override: "updateAccess" /share_links/{identifier}: get: summary: "Resolve share link" description: "Resolves a share link URL segment — the part after `/s/` in a share\nlink like `https://example.wistia.com/s/summer-sale` — to the share\nlink and the media it points to, including the media's hashed ID.\n\nThe identifier may be the share link's hashed ID or its custom slug.\nHistorical slugs that were later changed still resolve to the link.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Share Links" security: - BearerAuth: [] parameters: - name: "identifier" in: "path" description: "The share link's URL segment — its hashed ID or custom slug." required: true schema: type: "string" responses: "200": description: "Successful response" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "The hashed ID of the share link. This appears in the link's URL." media_id: type: "string" description: "The hashed ID of the media this share link points to." url: type: "string" format: "uri" description: "The full URL viewers can use to view the media via this share link." slug: type: - "string" - "null" description: "The share link's custom slug, if one is set. When present, the slug\nreplaces the hashed ID in the link's URL.\n" visibility: type: "string" enum: - "unlocked" - "account" - "locked" - "domain_verified" description: "Controls who can view the media via this share link.\n\n- `unlocked`: anyone with the link can view the media.\n- `account`: only signed-in members of the media's account can view.\n- `locked`: only contacts with access to the media's folder can view.\n- `domain_verified`: only viewers signed in with an email address at a\n domain verified on the media's account can view. Requires the account\n to be enrolled in the domain validation gate; otherwise setting this\n value returns 400.\n" created_at: type: "string" format: "date-time" description: "When the share link was created." updated_at: type: "string" format: "date-time" description: "When the share link was last updated." required: - "id" - "media_id" - "url" - "slug" - "visibility" - "created_at" - "updated_at" description: "A shareable link for a single media. Each media can have at most one\nshare link, and the link's `visibility` controls who can view the\nmedia when visiting the link.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "shareLinks" x-speakeasy-name-override: "resolve" /medias/{mediaId}/share_link: get: summary: "Show share link" description: "Fetches the share link for a single media. If the media does not have a\nshare link yet, one is created on first request with a default\nvisibility derived from the parent folder.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Share Links" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the media." required: true schema: type: "string" responses: "200": description: "Successful response" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "The hashed ID of the share link. This appears in the link's URL." media_id: type: "string" description: "The hashed ID of the media this share link points to." url: type: "string" format: "uri" description: "The full URL viewers can use to view the media via this share link." slug: type: - "string" - "null" description: "The share link's custom slug, if one is set. When present, the slug\nreplaces the hashed ID in the link's URL.\n" visibility: type: "string" enum: - "unlocked" - "account" - "locked" - "domain_verified" description: "Controls who can view the media via this share link.\n\n- `unlocked`: anyone with the link can view the media.\n- `account`: only signed-in members of the media's account can view.\n- `locked`: only contacts with access to the media's folder can view.\n- `domain_verified`: only viewers signed in with an email address at a\n domain verified on the media's account can view. Requires the account\n to be enrolled in the domain validation gate; otherwise setting this\n value returns 400.\n" created_at: type: "string" format: "date-time" description: "When the share link was created." updated_at: type: "string" format: "date-time" description: "When the share link was last updated." required: - "id" - "media_id" - "url" - "slug" - "visibility" - "created_at" - "updated_at" description: "A shareable link for a single media. Each media can have at most one\nshare link, and the link's `visibility` controls who can view the\nmedia when visiting the link.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "shareLinks" x-speakeasy-name-override: "get" put: summary: "Update share link" description: "Updates the share link for a single media. If the media does not have a\nshare link yet, one is created with the supplied visibility.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Share Links" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the media." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: visibility: type: "string" enum: - "unlocked" - "account" - "locked" - "domain_verified" description: "Controls who can view the media via this share link.\n\n- `unlocked`: anyone with the link can view the media.\n- `account`: only signed-in members of the media's account can view.\n- `locked`: only contacts with access to the media's folder can view.\n- `domain_verified`: only viewers signed in with an email address at a\n domain verified on the media's account can view. Requires the account\n to be enrolled in the domain validation gate; otherwise setting this\n value returns 400.\n" required: - "visibility" description: "Fields that can be set when updating a share link." required: true responses: "200": description: "Share link update successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "The hashed ID of the share link. This appears in the link's URL." media_id: type: "string" description: "The hashed ID of the media this share link points to." url: type: "string" format: "uri" description: "The full URL viewers can use to view the media via this share link." slug: type: - "string" - "null" description: "The share link's custom slug, if one is set. When present, the slug\nreplaces the hashed ID in the link's URL.\n" visibility: type: "string" enum: - "unlocked" - "account" - "locked" - "domain_verified" description: "Controls who can view the media via this share link.\n\n- `unlocked`: anyone with the link can view the media.\n- `account`: only signed-in members of the media's account can view.\n- `locked`: only contacts with access to the media's folder can view.\n- `domain_verified`: only viewers signed in with an email address at a\n domain verified on the media's account can view. Requires the account\n to be enrolled in the domain validation gate; otherwise setting this\n value returns 400.\n" created_at: type: "string" format: "date-time" description: "When the share link was created." updated_at: type: "string" format: "date-time" description: "When the share link was last updated." required: - "id" - "media_id" - "url" - "slug" - "visibility" - "created_at" - "updated_at" description: "A shareable link for a single media. Each media can have at most one\nshare link, and the link's `visibility` controls who can view the\nmedia when visiting the link.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "shareLinks" x-speakeasy-name-override: "update" delete: summary: "Delete share link" description: "Deletes the share link for a media, revoking the URL. A new share link\ncan be created later with a fresh URL by calling the show or update\nendpoint again.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Share Links" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the media." required: true schema: type: "string" responses: "200": description: "Share link deleted" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "shareLinks" x-speakeasy-name-override: "delete" /medias/{mediaHashedId}/captions: get: summary: "List Captions by Media" description: "Lists captions belonging to a specific media.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Captions" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: english_name: type: "string" description: "English name of the language." native_name: type: "string" description: "Native name of the language." language: type: "string" description: "A 3 character language code as specified by ISO-639–2." text: type: - "string" - "null" description: "The text of the captions for the specified language in SRT format." is_draft: type: "boolean" id: type: "string" description: "The unique hashed identifier of the time-coded transcript." media_id: type: "string" description: "The hashed ID of the media the captions belong to." version: type: - "integer" - "null" description: "The active caption payload version, or null when no payload is active." segments: type: - "array" - "null" items: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" description: "The segment's start offset from the beginning of the media, in milliseconds." end_ms: type: "integer" description: "The segment's end offset from the beginning of the media, in milliseconds." text: type: "string" description: "The segment's transcript text." required: - "start_ms" - "end_ms" - "text" description: "Time-coded caption cues when `include=segments`; null otherwise." diarized_segments: type: "array" items: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" description: "The speaker-turn segment's start offset from the beginning of the media, in milliseconds." end_ms: type: "integer" description: "The speaker-turn segment's end offset from the beginning of the media, in milliseconds." text: type: "string" description: "Transcript text attributed to this speaker turn." speaker: type: "object" unevaluatedProperties: false properties: media_speaker_id: type: - "string" - "null" description: "The media-specific speaker assignment identifier, or null for an unidentified turn." speaker_profile_id: type: - "string" - "null" description: "The reusable account speaker-profile identifier, or null for an unidentified turn." detected_speaker_id: type: - "string" - "null" description: "The anonymous detected-speaker identifier that can be assigned, or null once resolved or when unknown." display_label: type: "string" description: "The resolved name, a display-only generic label, or `Unknown speaker`. Speakers are numbered by when they first appear in the transcript. Assigning a name does not renumber the other speakers, so generic labels may start at `Speaker 2` or skip numbers. Use `detected_speaker_id` as the identifier." name: type: - "string" - "null" description: "The assigned speaker profile's name, or null for an unidentified turn." required: - "media_speaker_id" - "speaker_profile_id" - "detected_speaker_id" - "display_label" - "name" required: - "start_ms" - "end_ms" - "text" - "speaker" description: "Transcript text split at speaker-turn boundaries when `include=diarized_segments`. The media-level speaker timeline is shared across language tracks." diarization_status: type: "string" enum: - "ready" - "processing" - "unavailable" - "disabled" description: "Speaker-data availability when `include=diarized_segments`. Reading a derivable media\nwith no speaker data starts generating it and reports `processing`; read again shortly\nfor `ready`. `disabled` means the account has speaker identification turned off; an\naccount owner or manager can turn it on in Account Settings.\n" diarization_derivable: type: "boolean" description: "Whether speaker data can be generated from the active default transcript when `include=diarized_segments`. When false, the media stays `unavailable`." speaker_data_version: type: - "integer" - "null" description: "The concurrency version for speaker assignments when `include=diarized_segments`, or null when speaker data is unavailable." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "language" - "is_draft" - "id" - "media_id" - "version" - "segments" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Media not found" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "captions" x-speakeasy-name-override: "list" post: summary: "Create Captions" description: "Adds captions to a specified media by providing an SRT file or its contents directly.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Captions" security: - BearerAuth: [] 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: content: application/json: schema: type: "object" unevaluatedProperties: false properties: caption_file: type: "string" description: "Either an attached SRT file or a string parameter with the contents of an SRT file." language: type: "string" 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." required: - "caption_file" multipart/form-data: schema: type: "object" unevaluatedProperties: false properties: caption_file: type: "string" format: "binary" description: "Either an attached SRT file or a string parameter with the contents of an SRT file." language: type: "string" 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." required: - "caption_file" required: true responses: "200": description: "Captions added successfully" "400": description: "Captions already exist for this media" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Media not found" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "captions" x-speakeasy-name-override: "create" /captions: get: summary: "List Captions" description: "Lists captions belonging to the account. Results can be narrowed to a specific media\nwith `media_id`, or to several media and languages at once with `media_ids[]` and\n`languages[]`. Each caption includes its text, so combining these filters with\npagination fetches transcripts for many media in a few requests. Pass\n`include=metadata` to omit transcript text when only track and language\ninformation is needed.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Captions" security: - BearerAuth: [] parameters: - name: "media_id" in: "query" description: "Find captions for a particular media by providing the media hashed ID" required: false schema: type: "string" - name: "media_ids[]" in: "query" description: "Find captions belonging to any of these media hashed IDs. IDs that don't match\na media the token can access are ignored rather than returning an error.\n" required: false schema: type: "array" items: type: "string" - name: "languages[]" in: "query" description: "Find captions in any of these languages, using the codes returned in each\ncaption's `language` field (for example `eng` or `spa`). When combined with\n`media_ids[]`, captions must match both.\n" required: false schema: type: "array" items: type: "string" - name: "include" in: "query" description: "Set to `metadata` to omit caption text and return only track metadata.\nOmitting this parameter preserves the existing response, including SRT text.\n" required: false schema: type: "string" enum: - "metadata" - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "sort_by" in: "query" description: "Ordering. When using cursor pagination (see cursor param),\nonly `id` is supported.\n" required: false schema: type: "string" enum: - "id" - "created" - "updated" - "language" default: "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 default: 1 responses: "200": description: "Captions retrieval successful" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: english_name: type: "string" description: "English name of the language." native_name: type: "string" description: "Native name of the language." language: type: "string" description: "A 3 character language code as specified by ISO-639–2." text: type: - "string" - "null" description: "The text of the captions for the specified language in SRT format." is_draft: type: "boolean" id: type: "string" description: "The unique hashed identifier of the time-coded transcript." media_id: type: "string" description: "The hashed ID of the media the captions belong to." version: type: - "integer" - "null" description: "The active caption payload version, or null when no payload is active." segments: type: - "array" - "null" items: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" description: "The segment's start offset from the beginning of the media, in milliseconds." end_ms: type: "integer" description: "The segment's end offset from the beginning of the media, in milliseconds." text: type: "string" description: "The segment's transcript text." required: - "start_ms" - "end_ms" - "text" description: "Time-coded caption cues when `include=segments`; null otherwise." diarized_segments: type: "array" items: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" description: "The speaker-turn segment's start offset from the beginning of the media, in milliseconds." end_ms: type: "integer" description: "The speaker-turn segment's end offset from the beginning of the media, in milliseconds." text: type: "string" description: "Transcript text attributed to this speaker turn." speaker: type: "object" unevaluatedProperties: false properties: media_speaker_id: type: - "string" - "null" description: "The media-specific speaker assignment identifier, or null for an unidentified turn." speaker_profile_id: type: - "string" - "null" description: "The reusable account speaker-profile identifier, or null for an unidentified turn." detected_speaker_id: type: - "string" - "null" description: "The anonymous detected-speaker identifier that can be assigned, or null once resolved or when unknown." display_label: type: "string" description: "The resolved name, a display-only generic label, or `Unknown speaker`. Speakers are numbered by when they first appear in the transcript. Assigning a name does not renumber the other speakers, so generic labels may start at `Speaker 2` or skip numbers. Use `detected_speaker_id` as the identifier." name: type: - "string" - "null" description: "The assigned speaker profile's name, or null for an unidentified turn." required: - "media_speaker_id" - "speaker_profile_id" - "detected_speaker_id" - "display_label" - "name" required: - "start_ms" - "end_ms" - "text" - "speaker" description: "Transcript text split at speaker-turn boundaries when `include=diarized_segments`. The media-level speaker timeline is shared across language tracks." diarization_status: type: "string" enum: - "ready" - "processing" - "unavailable" - "disabled" description: "Speaker-data availability when `include=diarized_segments`. Reading a derivable media\nwith no speaker data starts generating it and reports `processing`; read again shortly\nfor `ready`. `disabled` means the account has speaker identification turned off; an\naccount owner or manager can turn it on in Account Settings.\n" diarization_derivable: type: "boolean" description: "Whether speaker data can be generated from the active default transcript when `include=diarized_segments`. When false, the media stays `unavailable`." speaker_data_version: type: - "integer" - "null" description: "The concurrency version for speaker assignments when `include=diarized_segments`, or null when speaker data is unavailable." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "language" - "is_draft" - "id" - "media_id" - "version" - "segments" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Media not found (when media_id parameter is provided)" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "captions" x-speakeasy-name-override: "listAll" /caption_matches: post: summary: "Find Caption Matches" description: "Finds exact text in caption tracks without modifying them. Matching uses the\nsame normalization, composite-media boundaries, and time coordinates as the\ntargeted caption edit endpoint. Fuzzy alternatives are returned separately\nas suggestions and are never reported as exact matches. A resolved match\nmeans the wording was located; a later write can still fail authorization,\nversion, or edit-boundary checks.\n\nWhen more than 10 exact matches exist, use the one-based `occurrence`\nparameter to retrieve a specific later match.\n\nAuthentication and request validation failures apply to the whole request.\nMissing, inaccessible, or otherwise unreadable media are reported as\nper-media statuses without exposing whether an inaccessible ID exists.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used.\n" tags: - "Captions" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: media_ids: type: "array" items: type: "string" minLength: 1 maxItems: 50 minItems: 1 uniqueItems: true description: "Explicit hashed IDs of the media whose captions should be searched." target_text: type: "string" maxLength: 500 minLength: 1 description: "Exact caption wording to locate." language_code: type: "string" minLength: 1 description: "Exact IETF language tag. Omit when each media has only one caption track." occurrence: type: "integer" minimum: 1 description: "One-based exact occurrence to return, including occurrences after the first 10." start_ms: type: "integer" minimum: 0 description: "Optional start of a time range used to disambiguate the match." end_ms: type: "integer" minimum: 0 description: "Optional end of a time range used to disambiguate the match." required: - "media_ids" - "target_text" required: true responses: "200": description: "Every requested media ID was processed; inspect each result's status." content: application/json: schema: type: "object" unevaluatedProperties: false properties: requested_count: type: "integer" succeeded_count: type: "integer" description: "Number of media whose transcript search was processed successfully, whether or not an exact match was found." failed_count: type: "integer" description: "Number of media that returned a non-ok per-media status." complete: type: "boolean" description: "True when every requested media ID was processed, including per-media negative results." results: type: "array" items: type: "object" unevaluatedProperties: false properties: media_hashed_id: type: "string" status: type: "string" enum: - "ok" - "media_not_found" - "invalid_media" - "no_tracks" - "language_required" - "track_not_found" - "no_active_payload" - "response_too_large" tracks: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" language: type: "string" english_name: type: - "string" - "null" native_name: type: - "string" - "null" version: type: - "integer" - "null" is_draft: type: "boolean" required: - "id" - "language" - "version" - "is_draft" track: type: "object" unevaluatedProperties: false properties: id: type: "string" language: type: "string" english_name: type: - "string" - "null" native_name: type: - "string" - "null" version: type: - "integer" - "null" is_draft: type: "boolean" required: - "id" - "language" - "version" - "is_draft" match_status: type: "string" enum: - "resolved" - "ambiguous" - "not_found" - "occurrence_not_found" match_count: type: "integer" description: "Total number of exact matches, including matches not present in this response page." matches: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" context: type: "string" start_ms: type: "integer" end_ms: type: "integer" required: - "text" - "context" - "start_ms" - "end_ms" description: "Exact matches only." matches_truncated: type: "boolean" next_occurrence: type: "integer" minimum: 1 description: "The next one-based occurrence that can be requested when exact matches are truncated." suggestions: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" context: type: "string" start_ms: type: "integer" end_ms: type: "integer" required: - "text" - "context" - "start_ms" - "end_ms" description: "Fuzzy alternatives when no exact match exists. These are not exact matches." suggestions_truncated: type: "boolean" hint: type: - "string" - "null" recovery: type: "string" required: - "media_hashed_id" - "status" required: - "requested_count" - "succeeded_count" - "failed_count" - "complete" - "results" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "captions" x-speakeasy-name-override: "findMatches" /medias/{mediaHashedId}/captions/purchase: post: summary: "Purchase Captions" description: "This method is for purchasing English captions for a media. The request will charge the credit card on the account if successful. A saved credit card is required to use this endpoint.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Captions" security: - BearerAuth: [] parameters: - name: "mediaHashedId" in: "path" description: "Unique identifier for the media." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: automated: type: "boolean" description: "Order computer-generated captions or human-reviewed ones. What each costs depends on the account's plan and billing settings; computer-generated captions are included at no cost on some plans and billed per minute on others." default: false rush: type: "boolean" description: "Enable rush order for one business day turnaround instead of the standard four, for human-reviewed captions only. Rush bills at the account's higher per-minute rate." default: true automatically_enable: type: "boolean" description: "Automatically enable captions for the media once the order is ready or hold the captions for review before manually enabling." default: true required: true responses: "200": description: "Successful operation. Captions purchased." content: application/json: schema: type: "object" unevaluatedProperties: false properties: message: type: "string" examples: - "Captions purchased for this video. Your account will be charged when the captions are ready." description: "Success message indicating the captions have been purchased" id: type: "string" examples: - "abc123def456" description: "The unique hashed identifier of the time-coded transcript that was created" required: - "message" - "id" "400": description: "English captions already exist for this media." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Media not found." "422": description: "Unprocessable entity. Account not eligible, captions already purchased, or other validation error." content: application/json: schema: type: "object" unevaluatedProperties: false properties: message: type: "string" description: "Error message explaining why the purchase cannot be completed" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "captions" x-speakeasy-name-override: "purchase" /medias/{mediaHashedId}/captions/{languageCode}: get: summary: "Show Captions" description: "Returns a media's captions in the specified language.\nSupports multiple formats: JSON (default), SRT, VTT, and TXT.\nUse file extensions (.srt, .vtt, .txt) or Accept headers to specify format.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Captions" security: - BearerAuth: [] 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" - name: "include" in: "query" description: "Set to `segments` for time-coded caption cues or `diarized_segments` for speaker-turn segments in JSON responses." required: false schema: type: "string" enum: - "segments" - "diarized_segments" description: "Set to `segments` to include time-coded caption cues." - name: "include_speakers" in: "query" description: "For TXT responses, set to true to group the transcript by speaker turns and include speaker labels. Ignored for other response formats." required: false schema: type: "boolean" default: false responses: "200": description: "Successful response containing captions in the requested format" content: application/json: schema: type: "object" unevaluatedProperties: false properties: english_name: type: "string" description: "English name of the language." native_name: type: "string" description: "Native name of the language." language: type: "string" description: "A 3 character language code as specified by ISO-639–2." text: type: - "string" - "null" description: "The text of the captions for the specified language in SRT format." is_draft: type: "boolean" id: type: "string" description: "The unique hashed identifier of the time-coded transcript." media_id: type: "string" description: "The hashed ID of the media the captions belong to." version: type: - "integer" - "null" description: "The active caption payload version, or null when no payload is active." segments: type: - "array" - "null" items: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" description: "The segment's start offset from the beginning of the media, in milliseconds." end_ms: type: "integer" description: "The segment's end offset from the beginning of the media, in milliseconds." text: type: "string" description: "The segment's transcript text." required: - "start_ms" - "end_ms" - "text" description: "Time-coded caption cues when `include=segments`; null otherwise." diarized_segments: type: "array" items: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" description: "The speaker-turn segment's start offset from the beginning of the media, in milliseconds." end_ms: type: "integer" description: "The speaker-turn segment's end offset from the beginning of the media, in milliseconds." text: type: "string" description: "Transcript text attributed to this speaker turn." speaker: type: "object" unevaluatedProperties: false properties: media_speaker_id: type: - "string" - "null" description: "The media-specific speaker assignment identifier, or null for an unidentified turn." speaker_profile_id: type: - "string" - "null" description: "The reusable account speaker-profile identifier, or null for an unidentified turn." detected_speaker_id: type: - "string" - "null" description: "The anonymous detected-speaker identifier that can be assigned, or null once resolved or when unknown." display_label: type: "string" description: "The resolved name, a display-only generic label, or `Unknown speaker`. Speakers are numbered by when they first appear in the transcript. Assigning a name does not renumber the other speakers, so generic labels may start at `Speaker 2` or skip numbers. Use `detected_speaker_id` as the identifier." name: type: - "string" - "null" description: "The assigned speaker profile's name, or null for an unidentified turn." required: - "media_speaker_id" - "speaker_profile_id" - "detected_speaker_id" - "display_label" - "name" required: - "start_ms" - "end_ms" - "text" - "speaker" description: "Transcript text split at speaker-turn boundaries when `include=diarized_segments`. The media-level speaker timeline is shared across language tracks." diarization_status: type: "string" enum: - "ready" - "processing" - "unavailable" - "disabled" description: "Speaker-data availability when `include=diarized_segments`. Reading a derivable media\nwith no speaker data starts generating it and reports `processing`; read again shortly\nfor `ready`. `disabled` means the account has speaker identification turned off; an\naccount owner or manager can turn it on in Account Settings.\n" diarization_derivable: type: "boolean" description: "Whether speaker data can be generated from the active default transcript when `include=diarized_segments`. When false, the media stays `unavailable`." speaker_data_version: type: - "integer" - "null" description: "The concurrency version for speaker assignments when `include=diarized_segments`, or null when speaker data is unavailable." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "language" - "is_draft" - "id" - "media_id" - "version" - "segments" text/plain: schema: type: "string" description: "Caption content in SRT or TXT format" text/vtt: schema: type: "string" description: "Caption content in VTT format" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Captions not found or media not found" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "captions" x-speakeasy-name-override: "get" put: summary: "Update Captions" description: "This method is for replacing the captions on a video or audio media for the specified language.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Captions" security: - BearerAuth: [] parameters: - name: "mediaHashedId" in: "path" description: "Unique identifier for the media." 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: content: application/json: schema: type: "object" unevaluatedProperties: false properties: caption_file: type: "string" description: "Either an attached SRT file or a string parameter with the contents of an SRT file." required: - "caption_file" multipart/form-data: schema: type: "object" unevaluatedProperties: false properties: caption_file: type: "string" format: "binary" description: "Either an attached SRT file or a string parameter with the contents of an SRT file." required: - "caption_file" required: true responses: "200": description: "Successful operation. Captions replaced." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Captions or media not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "captions" x-speakeasy-name-override: "update" delete: summary: "Delete Captions" description: "Removes the captions file from a media for the specified language.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Captions" security: - BearerAuth: [] parameters: - name: "mediaHashedId" in: "path" description: "Unique identifier for the media." 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": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Captions or media not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "captions" x-speakeasy-name-override: "delete" /medias/{mediaHashedId}/captions/{languageCode}/edits: post: summary: "Edit Captions Text" description: "Applies targeted find-and-replace corrections to a media's transcript for\nthe specified language, preserving the timings of unchanged words. The whole\nbatch is applied atomically against a specific caption version, or nothing is.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Captions" security: - BearerAuth: [] parameters: - name: "mediaHashedId" in: "path" description: "The hashed ID of the media whose transcript should be edited." required: true schema: type: "string" - name: "languageCode" in: "path" description: "The 3-character ISO 639-2 language code of the caption track to edit (e.g., `eng`, `fra`, `spa`). Some languages use extended IETF subtags (e.g., `zh-Hant`)." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: edits: type: "array" items: type: "object" unevaluatedProperties: false properties: target_text: type: "string" description: "The exact transcript text to replace. Matched exactly after normalization (case, punctuation, and whitespace are ignored). Fuzzy matches are never applied — they are only returned as suggestions." replacement_text: type: "string" description: "The text to substitute for the target. Use an empty string to delete the target." start_ms: type: "integer" description: "Optional lower bound (inclusive, in the requested media's coordinate space) restricting the match to a time window. Must be sent with end_ms." end_ms: type: "integer" description: "Optional upper bound (inclusive) restricting the match to a time window. Must be sent with start_ms." required: - "target_text" - "replacement_text" maxItems: 20 minItems: 1 description: "The corrections to apply, all-or-nothing, in one new version." expected_version: type: "integer" description: "The active caption version returned with the caption content used to prepare these edits. The edit applies only if that is still the active version; otherwise it returns 409 so you re-read and retry." required: - "edits" - "expected_version" required: true responses: "200": description: "Corrections applied; a new caption version was written." content: application/json: schema: type: "object" unevaluatedProperties: false properties: applied: type: "boolean" description: "Always true on a 200; the whole batch was applied." media_id: type: "string" description: "The hashed ID of the media whose transcript was edited. Differs from the path media when the transcript is projected from a composite recording." language: type: "string" description: "The ISO-639-2 language tag of the edited caption track." version: type: "object" unevaluatedProperties: false properties: from: type: "integer" to: type: "integer" required: - "from" - "to" description: "The caption version before and after the edit." edits: type: "array" items: type: "object" unevaluatedProperties: false properties: target_text: type: "string" description: "The target text that was sent." replacement_text: type: "string" description: "The replacement text that was sent (empty string for a deletion)." matched_text: type: "string" description: "The transcript text that actually matched (may differ from target_text only in normalization)." context: type: "string" description: "Surrounding transcript text for the match, for disambiguation." original: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" end_ms: type: "integer" required: - "start_ms" - "end_ms" description: "The matched span's time range, in the requested media's coordinate space." replacement: type: - "object" - "null" unevaluatedProperties: false properties: start_ms: type: "integer" end_ms: type: "integer" required: - "start_ms" - "end_ms" description: "The replacement span's new time range, or null when the target was deleted." required: - "target_text" - "replacement_text" - "matched_text" - "context" - "original" - "replacement" description: "One entry per applied edit, echoing what matched and where it landed." warnings: type: "array" items: type: "string" description: "Non-fatal advisories, usually empty. For a Remix output, these may identify source media whose transcripts can be edited." required: - "applied" - "media_id" - "language" - "version" - "edits" - "warnings" description: "The batch was applied and a new caption version was written." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "409": description: "The version guard failed. For `stale_version`, re-read and retry with the\nactive version. For `diverged`, newer inactive versions exist, so\nre-reading will not help; wait and retry, then escalate if it persists.\n" content: application/json: schema: type: "object" unevaluatedProperties: false properties: reason: type: "string" enum: - "stale_version" - "diverged" errors: type: "array" items: type: "string" required: - "reason" - "errors" "422": description: "One or more edits could not be resolved; nothing was written." content: application/json: schema: type: "object" unevaluatedProperties: false properties: errors: type: "array" items: type: "string" description: "Human-readable summary of what went wrong." edit_failures: type: "array" items: type: "object" unevaluatedProperties: false properties: target_text: type: "string" description: "The target text of the edit that failed." reason: type: "string" enum: - "ambiguous" - "not_found" - "overlapping" - "spans_paragraph" description: "Why the edit could not be applied. `ambiguous`: matched more than once (disambiguate with a candidate's time range). `not_found`: no exact match (adopt a suggestion's exact text). `overlapping`: two edits target overlapping spans. `spans_paragraph`: the target crosses a paragraph or non-editable boundary." candidates: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" description: "The candidate's transcript text." context: type: "string" description: "Surrounding transcript text, for disambiguation." start_ms: type: "integer" description: "The candidate span's start in the requested media's coordinate space." end_ms: type: "integer" description: "The candidate span's end in the requested media's coordinate space." required: - "text" - "context" - "start_ms" - "end_ms" description: "For `ambiguous`, the exact occurrences to choose from (up to 10). For `not_found`, fuzzy suggestions to adopt verbatim (up to 3). Empty for other reasons. Times are in the requested media's coordinate space." hint: type: "string" description: "A short instruction for how to recover from this failure." required: - "target_text" - "reason" - "candidates" - "hint" description: "One entry per edit that could not be resolved." required: - "errors" - "edit_failures" description: "One or more edits could not be resolved, so nothing was written. Fix the listed failures and retry the whole batch." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "captions" x-speakeasy-name-override: "edit" /medias/{mediaHashedId}/localizations: get: summary: "List Localizations" description: "Lists all the localizations for a media.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Localizations" security: - BearerAuth: [] 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: allOf: - type: "object" properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this localization." language_code: type: "string" description: "A 3-character language code as specified by IETF." iso639_2_language_code: type: "string" description: "A 2-character language code as specified by ISO-639–2." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." created_at: type: "string" format: "date-time" description: "The date when the localization was created." updated_at: type: "string" format: "date-time" description: "The date when the localization was last updated." ordered_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was ordered." enabled_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was enabled." enabled: type: "boolean" description: "Whether or not the localization is enabled." source_media: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." name: type: "string" description: "The name of the media." duration: type: "number" description: "The duration of the media in seconds." created_at: type: "string" format: "date-time" description: "The date when the media was created." updated_at: type: "string" format: "date-time" description: "The date when the media was last updated." required: - "hashed_id" - "name" - "duration" - "created_at" - "updated_at" description: "The media that the localization is associated with." transcript: type: - "object" - "null" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this transcript." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." text: type: "string" description: "The text of the transcript." created_at: type: "string" format: "date-time" description: "The date when the transcript was created." updated_at: type: "string" format: "date-time" description: "The date when the transcript was last updated." required: - "hashed_id" - "language_name" - "native_language_name" - "text" - "created_at" - "updated_at" description: "The transcript for the localization. Selectively serialized in some endpoints. See properties for endpoint." 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" description: "A localization is a translation of a media into another language.\n" unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "localizations" x-speakeasy-name-override: "list" post: summary: "Create Localization" description: "Creates a new localization.\n\nCreating a localization can incur a charge on your account. Accounts get a\nfree-dub allowance; once it is used up, dubs bill per minute at the\naccount's configured rate.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Localizations" security: - BearerAuth: [] 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" unevaluatedProperties: false properties: output_language: type: "string" description: "The language to localize the media to as a 3-character IETF language code." auto_enable: type: "boolean" description: "Whether to automatically enable the localization." default: true required: - "output_language" responses: "201": description: "Successful creation of the localization." content: application/json: schema: allOf: - type: "object" properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this localization." language_code: type: "string" description: "A 3-character language code as specified by IETF." iso639_2_language_code: type: "string" description: "A 2-character language code as specified by ISO-639–2." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." created_at: type: "string" format: "date-time" description: "The date when the localization was created." updated_at: type: "string" format: "date-time" description: "The date when the localization was last updated." ordered_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was ordered." enabled_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was enabled." enabled: type: "boolean" description: "Whether or not the localization is enabled." source_media: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." name: type: "string" description: "The name of the media." duration: type: "number" description: "The duration of the media in seconds." created_at: type: "string" format: "date-time" description: "The date when the media was created." updated_at: type: "string" format: "date-time" description: "The date when the media was last updated." required: - "hashed_id" - "name" - "duration" - "created_at" - "updated_at" description: "The media that the localization is associated with." transcript: type: - "object" - "null" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this transcript." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." text: type: "string" description: "The text of the transcript." created_at: type: "string" format: "date-time" description: "The date when the transcript was created." updated_at: type: "string" format: "date-time" description: "The date when the transcript was last updated." required: - "hashed_id" - "language_name" - "native_language_name" - "text" - "created_at" - "updated_at" description: "The transcript for the localization. Selectively serialized in some endpoints. See properties for endpoint." 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" description: "A localization is a translation of a media into another language.\n" - type: "object" properties: auto_enable_dubbing: type: "boolean" description: "Whether or not the dubbing will be automatically enabled when completed." expected_billed_minutes: type: - "number" - "null" description: "The expected number of minutes that will be billed for the dubbing." expected_billed_price_per_minute: type: - "number" - "string" - "null" description: "The expected price per minute that will be billed for the dubbing. Decimal prices are returned as strings." expected_billed_price: type: - "number" - "string" - "null" description: "The expected total price that will be billed for the dubbing. Decimal prices are returned as strings." expected_billed_credits: type: - "string" - "null" description: "The credits held for the dubbing, deducted when it completes. Null when the dubbing is not paid for with credits. Decimal amounts are returned as strings." billed_at: type: - "string" - "null" format: "date-time" description: "The date when the dubbing was billed." required: - "auto_enable_dubbing" - "expected_billed_minutes" - "expected_billed_price_per_minute" - "expected_billed_price" - "expected_billed_credits" - "billed_at" unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "422": description: "Unprocessible entity, parameters provided were invalid." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "Error message detailing why the request failed." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "localizations" x-speakeasy-name-override: "create" /medias/{mediaHashedId}/localizations/{localizationHashedId}: get: summary: "Show Localization" description: "Obtain detailed information about a localization.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Localizations" security: - BearerAuth: [] 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: allOf: - type: "object" properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this localization." language_code: type: "string" description: "A 3-character language code as specified by IETF." iso639_2_language_code: type: "string" description: "A 2-character language code as specified by ISO-639–2." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." created_at: type: "string" format: "date-time" description: "The date when the localization was created." updated_at: type: "string" format: "date-time" description: "The date when the localization was last updated." ordered_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was ordered." enabled_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was enabled." enabled: type: "boolean" description: "Whether or not the localization is enabled." source_media: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." name: type: "string" description: "The name of the media." duration: type: "number" description: "The duration of the media in seconds." created_at: type: "string" format: "date-time" description: "The date when the media was created." updated_at: type: "string" format: "date-time" description: "The date when the media was last updated." required: - "hashed_id" - "name" - "duration" - "created_at" - "updated_at" description: "The media that the localization is associated with." transcript: type: - "object" - "null" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this transcript." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." text: type: "string" description: "The text of the transcript." created_at: type: "string" format: "date-time" description: "The date when the transcript was created." updated_at: type: "string" format: "date-time" description: "The date when the transcript was last updated." required: - "hashed_id" - "language_name" - "native_language_name" - "text" - "created_at" - "updated_at" description: "The transcript for the localization. Selectively serialized in some endpoints. See properties for endpoint." 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" description: "A localization is a translation of a media into another language.\n" unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "localizations" x-speakeasy-name-override: "get" delete: summary: "Delete Localization" description: "Deletes a localization.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Localizations" security: - BearerAuth: [] 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: allOf: - type: "object" properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this localization." language_code: type: "string" description: "A 3-character language code as specified by IETF." iso639_2_language_code: type: "string" description: "A 2-character language code as specified by ISO-639–2." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." created_at: type: "string" format: "date-time" description: "The date when the localization was created." updated_at: type: "string" format: "date-time" description: "The date when the localization was last updated." ordered_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was ordered." enabled_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was enabled." enabled: type: "boolean" description: "Whether or not the localization is enabled." source_media: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." name: type: "string" description: "The name of the media." duration: type: "number" description: "The duration of the media in seconds." created_at: type: "string" format: "date-time" description: "The date when the media was created." updated_at: type: "string" format: "date-time" description: "The date when the media was last updated." required: - "hashed_id" - "name" - "duration" - "created_at" - "updated_at" description: "The media that the localization is associated with." transcript: type: - "object" - "null" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this transcript." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." text: type: "string" description: "The text of the transcript." created_at: type: "string" format: "date-time" description: "The date when the transcript was created." updated_at: type: "string" format: "date-time" description: "The date when the transcript was last updated." required: - "hashed_id" - "language_name" - "native_language_name" - "text" - "created_at" - "updated_at" description: "The transcript for the localization. Selectively serialized in some endpoints. See properties for endpoint." 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" description: "A localization is a translation of a media into another language.\n" unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "localizations" x-speakeasy-name-override: "delete" /medias/{mediaHashedId}/trims: post: summary: "Create Media from Trims" description: "Creates a new media that trims off parts of an existing media.\n\nBy default, the `trims` parameter specifies time ranges to **remove** from the media. When `keep_trims` is set to `true`, the `trims` parameter instead specifies time ranges to **keep** in the media.\n\n**NOTE:** currently this endpoint only supports trimming video files.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Trims" security: - BearerAuth: [] parameters: - name: "mediaHashedId" in: "path" description: "The hashed ID of the media." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: trims: type: "array" items: type: "string" 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. When keep_trims is false (default), the ranges specify parts of the media to remove. When keep_trims is true, the ranges specify parts of the media to keep." keep_trims: type: "boolean" description: "When set to true, the trims parameter is treated as ranges to keep rather than ranges to remove. Defaults to false." default: false required: - "trims" required: true responses: "200": description: "Successful queueing of trims worker." content: application/json: schema: type: "object" unevaluatedProperties: false properties: background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "422": description: "Unprocessable entity, the request parameters were invalid." content: application/json: schema: type: "object" unevaluatedProperties: false properties: errors: type: "object" unevaluatedProperties: false additionalProperties: type: "array" items: type: "string" description: "Object containing validation errors grouped by field name. Each field contains an array of error messages." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "trims" x-speakeasy-name-override: "create" /media_extended_audio_descriptions: get: summary: "List Media Extended Audio Descriptions" description: "Lists all extended audio descriptions belonging to the account. Supports pagination and sorting.\n" tags: - "Extended Audio Descriptions" security: - BearerAuth: [] parameters: - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "hashed_ids[]" in: "query" description: "Filter extended audio descriptions to only those matching these hashed ids." required: false style: "form" explode: true schema: type: "array" items: type: "string" - name: "sort_by" in: "query" description: "Field to order by. The default is id." required: false schema: type: "string" enum: - "language" - "created" - "updated" - "id" - name: "sort_direction" in: "query" description: "Direction to order by. (0 = desc, 1 = asc; default is 1)" required: false schema: type: "integer" enum: - 0 - 1 responses: "200": description: "Media Extended Audio Descriptions retrieval successful" content: application/json: schema: type: "array" items: allOf: - type: "object" properties: id: type: "string" ietf_language_tag: type: "string" created_at: type: "string" format: "date-time" updated_at: type: "string" format: "date-time" media: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" provided_media_file: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" contact: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "mediaExtendedAudioDescriptions" /media_extended_audio_descriptions/{id}: get: summary: "Show Media Extended Audio Description" description: "Retrieves a single extended audio description by its hashed id, including download links.\n" tags: - "Extended Audio Descriptions" security: - BearerAuth: [] parameters: - name: "id" in: "path" description: "The hashed id of the Media Extended Audio Description" required: true schema: type: "string" responses: "200": description: "Media Extended Audio Description fetched successful" content: application/json: schema: allOf: - type: "object" properties: id: type: "string" ietf_language_tag: type: "string" created_at: type: "string" format: "date-time" updated_at: type: "string" format: "date-time" media: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" provided_media_file: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" contact: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." - type: "object" properties: assets: type: "object" unevaluatedProperties: false properties: mp3_url: type: - "string" - "null" description: "URL to download the MP3 audio file." webvtt: type: - "string" - "null" description: "The WebVTT file contents with cue timings relative to the original video. Start and\nend times show when the text is relative to the scene\n" webvtt_extended: type: - "string" - "null" description: "The extended WebVTT file contents with timings that include pause durations. Start and\nend times correspond to when an audio description starts and ends. During this time\nthe video will be paused.\n" required: - "mp3_url" - "webvtt" - "webvtt_extended" description: "Download links for the audio description files." unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "mediaExtendedAudioDescriptions" delete: summary: "Delete Media Extended Audio Description" description: "Deletes an extended audio description by its hashed id.\n" tags: - "Extended Audio Descriptions" security: - BearerAuth: [] parameters: - name: "id" in: "path" description: "The hashed id of the Media Extended Audio Description" required: true schema: type: "string" responses: "200": description: "Media Extended Audio Description deleted successful" content: application/json: schema: allOf: - type: "object" properties: id: type: "string" ietf_language_tag: type: "string" created_at: type: "string" format: "date-time" updated_at: type: "string" format: "date-time" media: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" provided_media_file: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" contact: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "mediaExtendedAudioDescriptions" /media_extended_audio_descriptions/order: post: summary: "Order Extended Audio Description" description: "Orders an extended audio description for a media. The request will charge the credit card on the account when the order is ready.\nOnly accounts on paid plans with the `order_audio_descriptions` feature can use this endpoint.\n" tags: - "Extended Audio Descriptions" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: media_id: type: "string" description: "The hashed id of the media to order the extended audio description for." enabled: type: "boolean" description: "Whether the extended audio description should be automatically enabled once the order is complete." default: true ai_enabled: type: "boolean" description: "Whether to use AI-generated audio descriptions (cheaper) or human-generated (higher quality). AI is only available for English orders." default: true order_instructions: type: "string" description: "Optional instructions for the audio description provider." ietf_language_tag: type: "string" enum: - "eng" - "es-419" description: "IETF language tag for the audio description. Defaults to `eng` (English).\nNon-English orders must set `ai_enabled: false` — AI-generated audio\ndescriptions are only available in English.\n\nSpanish (`es-419`) orders are only accepted when the source media is\ntagged as a Spanish-language variant or has no detected language\n(e.g. silent videos). Spanish orders against a media in another\nlanguage return `400`.\n" default: "eng" required: - "media_id" required: true responses: "200": description: "Extended audio description ordered successfully." content: application/json: schema: type: "object" unevaluatedProperties: false properties: message: type: "string" examples: - "Extended audio description ordered. Your account will be charged when the order is ready." - "Extended audio description ordered. Credits are held now and deducted when the order is ready." description: "Success message indicating the order has been placed." order: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "The hashed ID of the order. Use this to poll order status via the order_status endpoint." order_status: type: "string" enum: - "in_progress" - "completed" - "cancelled" - "failed" description: "The current status of the order." created_at: type: "string" format: "date-time" updated_at: type: "string" format: "date-time" ietf_language_tag: type: "string" description: "IETF language tag the audio description was ordered in (e.g. `eng`, `es-419`)." media: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" media_extended_audio_description: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" - type: "null" unevaluatedProperties: false description: "Link to the resulting media extended audio description. Null while the order is in progress." required: - "id" - "order_status" - "ietf_language_tag" - "media" - "created_at" - "updated_at" expected_billed_credits: type: - "string" - "null" description: "The credits held for the audio description, deducted when it completes. Null when the audio description is not paid for with credits. Decimal amounts are returned as strings." required: - "message" - "order" - "expected_billed_credits" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "mediaExtendedAudioDescriptions" /media_extended_audio_descriptions/order_status/{id}: get: summary: "Get Order Status" description: "Returns the current status of an extended audio description order. Use the order id returned\nfrom the order endpoint to poll for status updates.\n" tags: - "Extended Audio Descriptions" security: - BearerAuth: [] parameters: - name: "id" in: "path" description: "The hashed ID of the order returned from the order endpoint." required: true schema: type: "string" responses: "200": description: "Order status retrieved successfully." content: application/json: schema: type: "object" unevaluatedProperties: false properties: order: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "The hashed ID of the order. Use this to poll order status via the order_status endpoint." order_status: type: "string" enum: - "in_progress" - "completed" - "cancelled" - "failed" description: "The current status of the order." created_at: type: "string" format: "date-time" updated_at: type: "string" format: "date-time" ietf_language_tag: type: "string" description: "IETF language tag the audio description was ordered in (e.g. `eng`, `es-419`)." media: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" media_extended_audio_description: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" - type: "null" unevaluatedProperties: false description: "Link to the resulting media extended audio description. Null while the order is in progress." required: - "id" - "order_status" - "ietf_language_tag" - "media" - "created_at" - "updated_at" required: - "order" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "mediaExtendedAudioDescriptions" /brands: get: summary: "List Brands" description: "Lists the brands belonging to the account. A brand is a saved set of\nbranding options (colors, fonts, logos, and layout) that can be applied to\nmedia, folders, and channels. The account-level default brand is flagged\nwith `is_default`, and styles everything that has no brand of its own.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Brands" security: - BearerAuth: [] parameters: - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "sort_by" in: "query" description: "Ordering. When using cursor pagination (see cursor param),\nonly `id`, `updated` and `created` are supported. All other sort_by options\nrequire offset pagination.\n" required: false schema: type: "string" enum: - "name" - "created" - "updated" - "id" - 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 brands" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abcde12345" description: "A unique alphanumeric identifier for this brand." name: type: "string" examples: - "My Brand" description: "The brand's display name." is_default: type: "boolean" examples: - true description: "Whether this brand is the account-level default, applied to content that has no more specific brand." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date the brand was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date the brand was last updated." primary_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." page_background_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." body_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for body text. Null when unset." headline_font_family: type: - "string" - "null" examples: - "GT Walsheim" description: "The brand font family for headlines. Null when unset." button_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for buttons. Null when unset." border_radius: type: - "integer" - "null" examples: - 10 description: "The border radius in pixels for rounded corners. Null when unset." contrast_icons: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls whether the player icon color is always white or uses an accessible contrast color when necessary." opaque_controls: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls the opacity of the video player control bar and big play button." page_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for pages. Null when unset." player_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for the player. Null when unset." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: "A brand is a saved set of branding options — colors, fonts, logos, and\nlayout — that can be applied to media, folders, and channels.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "brands" x-speakeasy-name-override: "list" post: summary: "Create Brand" description: "Creates a brand. A brand is a saved set of branding options (colors, fonts,\nlogos, and layout) that can then be applied to media, folders, and\nchannels. `name` is required; every other field is optional and left unset\nwhen omitted.\n\nA new brand isn't applied to anything — it has no effect until you apply\nit to a resource with `POST /brands/{brandId}/apply`.\n\nAccounts whose plan doesn't include multiple brands can only hold one brand.\n\n## Requires api token with one of the following permissions\n```\nAll data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Brands" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "My Brand" description: "The brand's display name. Renaming the account-level default brand is ignored; its name is managed by Wistia." primary_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples." page_background_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples." body_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for body text." headline_font_family: type: - "string" - "null" examples: - "GT Walsheim" description: "The brand font family for headlines." button_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for buttons." border_radius: type: - "integer" - "null" examples: - 10 description: "The border radius in pixels for rounded corners." contrast_icons: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls whether the player icon color is always white or uses an accessible contrast color when necessary." opaque_controls: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls the opacity of the video player control bar and big play button." page_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for pages. `url` must be a Wistia delivery URL — see the note on uploading below. On accounts without custom branding the player logo is ignored, but the page logo is always applied." player_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for the player. `url` must be a Wistia delivery URL — see the note on uploading below. Ignored on accounts whose plan doesn't include custom branding." description: "Brand attributes to write. Every field is optional on update and only the\nfields you send are changed — send an explicit `null` to unset one. `name`\nis required when creating a brand.\n\nThe writable field names match the ones a brand is read back with, so an\nedit can reuse the values from a `GET`. The read-only fields (`id`,\n`is_default`, `created`, `updated`) are not accepted here and must be\ndropped from a body built that way.\n\nColors accept three-character hex shorthand and store the expanded\nsix-character form, so `#abc` is read back as `#aabbcc`.\n\n**Logos cannot be uploaded through the API.** `page_logo.url` and\n`player_logo.url` must be Wistia delivery URLs\n(`https://embed-ssl.wistia.com/deliveries/.png`) for images already in\nthe account — for example a URL returned by a previous request to this\nendpoint. Any other URL is rejected, because the brand is applied by\nresolving that image out of Wistia's own storage. To add a new logo image,\nupload it in the Wistia app first.\n" responses: "201": description: "Brand created successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abcde12345" description: "A unique alphanumeric identifier for this brand." name: type: "string" examples: - "My Brand" description: "The brand's display name." is_default: type: "boolean" examples: - true description: "Whether this brand is the account-level default, applied to content that has no more specific brand." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date the brand was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date the brand was last updated." primary_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." page_background_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." body_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for body text. Null when unset." headline_font_family: type: - "string" - "null" examples: - "GT Walsheim" description: "The brand font family for headlines. Null when unset." button_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for buttons. Null when unset." border_radius: type: - "integer" - "null" examples: - 10 description: "The border radius in pixels for rounded corners. Null when unset." contrast_icons: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls whether the player icon color is always white or uses an accessible contrast color when necessary." opaque_controls: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls the opacity of the video player control bar and big play button." page_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for pages. Null when unset." player_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for the player. Null when unset." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: "A brand is a saved set of branding options — colors, fonts, logos, and\nlayout — that can be applied to media, folders, and channels.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "brands" x-speakeasy-name-override: "create" /brands/{brandId}: get: summary: "Show Brand" description: "Returns the brand with the given id.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Brands" security: - BearerAuth: [] parameters: - name: "brandId" in: "path" description: "The id of the brand." required: true schema: type: "string" description: "Id of the brand (e.g., \"abcde12345\")" responses: "200": description: "Brand retrieval successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abcde12345" description: "A unique alphanumeric identifier for this brand." name: type: "string" examples: - "My Brand" description: "The brand's display name." is_default: type: "boolean" examples: - true description: "Whether this brand is the account-level default, applied to content that has no more specific brand." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date the brand was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date the brand was last updated." primary_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." page_background_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." body_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for body text. Null when unset." headline_font_family: type: - "string" - "null" examples: - "GT Walsheim" description: "The brand font family for headlines. Null when unset." button_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for buttons. Null when unset." border_radius: type: - "integer" - "null" examples: - 10 description: "The border radius in pixels for rounded corners. Null when unset." contrast_icons: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls whether the player icon color is always white or uses an accessible contrast color when necessary." opaque_controls: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls the opacity of the video player control bar and big play button." page_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for pages. Null when unset." player_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for the player. Null when unset." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: "A brand is a saved set of branding options — colors, fonts, logos, and\nlayout — that can be applied to media, folders, and channels.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "brands" x-speakeasy-name-override: "get" put: summary: "Update Brand" description: "Updates a brand. Only the fields you send are changed; send an explicit\n`null` to unset one. Renaming the account-level default brand is ignored —\nits name is managed by Wistia.\n\nChanges propagate to everything the brand is applied to.\n\n## Requires api token with one of the following permissions\n```\nAll data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Brands" security: - BearerAuth: [] parameters: - name: "brandId" in: "path" description: "The id of the brand" required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "My Brand" description: "The brand's display name. Renaming the account-level default brand is ignored; its name is managed by Wistia." primary_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples." page_background_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples." body_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for body text." headline_font_family: type: - "string" - "null" examples: - "GT Walsheim" description: "The brand font family for headlines." button_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for buttons." border_radius: type: - "integer" - "null" examples: - 10 description: "The border radius in pixels for rounded corners." contrast_icons: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls whether the player icon color is always white or uses an accessible contrast color when necessary." opaque_controls: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls the opacity of the video player control bar and big play button." page_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for pages. `url` must be a Wistia delivery URL — see the note on uploading below. On accounts without custom branding the player logo is ignored, but the page logo is always applied." player_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for the player. `url` must be a Wistia delivery URL — see the note on uploading below. Ignored on accounts whose plan doesn't include custom branding." description: "Brand attributes to write. Every field is optional on update and only the\nfields you send are changed — send an explicit `null` to unset one. `name`\nis required when creating a brand.\n\nThe writable field names match the ones a brand is read back with, so an\nedit can reuse the values from a `GET`. The read-only fields (`id`,\n`is_default`, `created`, `updated`) are not accepted here and must be\ndropped from a body built that way.\n\nColors accept three-character hex shorthand and store the expanded\nsix-character form, so `#abc` is read back as `#aabbcc`.\n\n**Logos cannot be uploaded through the API.** `page_logo.url` and\n`player_logo.url` must be Wistia delivery URLs\n(`https://embed-ssl.wistia.com/deliveries/.png`) for images already in\nthe account — for example a URL returned by a previous request to this\nendpoint. Any other URL is rejected, because the brand is applied by\nresolving that image out of Wistia's own storage. To add a new logo image,\nupload it in the Wistia app first.\n" responses: "200": description: "Brand updated successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abcde12345" description: "A unique alphanumeric identifier for this brand." name: type: "string" examples: - "My Brand" description: "The brand's display name." is_default: type: "boolean" examples: - true description: "Whether this brand is the account-level default, applied to content that has no more specific brand." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date the brand was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date the brand was last updated." primary_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." page_background_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." body_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for body text. Null when unset." headline_font_family: type: - "string" - "null" examples: - "GT Walsheim" description: "The brand font family for headlines. Null when unset." button_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for buttons. Null when unset." border_radius: type: - "integer" - "null" examples: - 10 description: "The border radius in pixels for rounded corners. Null when unset." contrast_icons: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls whether the player icon color is always white or uses an accessible contrast color when necessary." opaque_controls: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls the opacity of the video player control bar and big play button." page_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for pages. Null when unset." player_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for the player. Null when unset." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: "A brand is a saved set of branding options — colors, fonts, logos, and\nlayout — that can be applied to media, folders, and channels.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "brands" x-speakeasy-name-override: "update" delete: summary: "Delete Brand" description: "Deletes a brand. Anything the brand was applied to falls back to the\naccount-level default brand, unless `sync_to_customizations` is set, in\nwhich case the brand's values are written into each item's own\ncustomizations first so they keep their current look.\n\nThe account-level default brand (`is_default: true`) can't be deleted.\n\n## Requires api token with one of the following permissions\n```\nAll data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Brands" security: - BearerAuth: [] parameters: - name: "brandId" in: "path" description: "The id of the brand" required: true schema: type: "string" - name: "sync_to_customizations" in: "query" description: "When true, the brand's values are baked into the customizations of everything it was applied to before it is deleted, so those items keep their current appearance. Defaults to false." required: false schema: type: "boolean" responses: "200": description: "Brand deleted successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abcde12345" description: "A unique alphanumeric identifier for this brand." name: type: "string" examples: - "My Brand" description: "The brand's display name." is_default: type: "boolean" examples: - true description: "Whether this brand is the account-level default, applied to content that has no more specific brand." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date the brand was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date the brand was last updated." primary_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." page_background_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." body_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for body text. Null when unset." headline_font_family: type: - "string" - "null" examples: - "GT Walsheim" description: "The brand font family for headlines. Null when unset." button_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for buttons. Null when unset." border_radius: type: - "integer" - "null" examples: - 10 description: "The border radius in pixels for rounded corners. Null when unset." contrast_icons: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls whether the player icon color is always white or uses an accessible contrast color when necessary." opaque_controls: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls the opacity of the video player control bar and big play button." page_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for pages. Null when unset." player_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for the player. Null when unset." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: "A brand is a saved set of branding options — colors, fonts, logos, and\nlayout — that can be applied to media, folders, and channels.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "brands" x-speakeasy-name-override: "delete" /brands/{brandId}/apply: post: summary: "Apply Brand" description: "Applies a brand to a media, folder, or channel, so that resource is styled\nby the brand's colors, fonts, logos, and layout.\n\nA brand has no effect until it is applied to something. Media inherit from\ntheir folder, and folders from the account's default brand, so applying a\nbrand to a folder styles everything inside it that has no brand of its own.\n\nApplying the account-level default brand (`is_default: true`) is how a\nresource is un-branded: it detaches the resource so it inherits again.\n\nBy default this also clears any brand-mapped appearance settings the\nresource had set directly, so the brand is what shows. Pass\n`clear_overrides: false` to leave those in place.\n\nResponds with the brand now in effect on the resource, which is not always\nthe one you applied — detaching a media returns the brand it falls back to.\n\nWebinars can't be branded through this endpoint yet.\n\n## Requires api token with one of the following permissions\n```\nAll data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Brands" security: - BearerAuth: [] parameters: - name: "brandId" in: "path" description: "The id of the brand to apply" required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: resource_type: type: "string" enum: - "media" - "folder" - "channel" description: "The kind of resource being branded. Webinars can't be branded through this endpoint yet." resource_id: type: "string" examples: - "abcde12345" description: "The id of the resource being branded." clear_overrides: type: "boolean" description: "When true (the default), appearance settings the resource had set directly are cleared for the fields the brand controls, so the brand is what shows. Set to false to leave them in place, in which case they continue to win over the brand." default: true required: - "resource_type" - "resource_id" description: "The resource to apply the brand to.\n" responses: "200": description: "Brand applied successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abcde12345" description: "A unique alphanumeric identifier for this brand." name: type: "string" examples: - "My Brand" description: "The brand's display name." is_default: type: "boolean" examples: - true description: "Whether this brand is the account-level default, applied to content that has no more specific brand." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date the brand was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date the brand was last updated." primary_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." page_background_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." body_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for body text. Null when unset." headline_font_family: type: - "string" - "null" examples: - "GT Walsheim" description: "The brand font family for headlines. Null when unset." button_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for buttons. Null when unset." border_radius: type: - "integer" - "null" examples: - 10 description: "The border radius in pixels for rounded corners. Null when unset." contrast_icons: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls whether the player icon color is always white or uses an accessible contrast color when necessary." opaque_controls: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls the opacity of the video player control bar and big play button." page_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for pages. Null when unset." player_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for the player. Null when unset." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: "A brand is a saved set of branding options — colors, fonts, logos, and\nlayout — that can be applied to media, folders, and channels.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "brands" x-speakeasy-name-override: "apply" /speakers: get: summary: "List Speakers" description: "Lists reusable speaker profiles belonging to the account.\n\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token. View-only contacts cannot list speaker\nprofiles.\n\n" tags: - "Speakers" security: - BearerAuth: [] parameters: - name: "name" in: "query" description: "Restrict the results to speaker profiles whose name contains this value (case-insensitive)." required: false schema: type: "string" - name: "sort_by" in: "query" description: "Field to order by. The default is id." required: false schema: type: "string" enum: - "id" - "name" - "created" - "updated" - name: "sort_direction" in: "query" description: "Direction to order by. (0 = desc, 1 = asc; default is 1)" required: false schema: type: "integer" enum: - 0 - 1 - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" responses: "200": description: "Speaker profiles retrieved successfully" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: speaker_profile_id: type: "string" examples: - "abc123def4" description: "The unique identifier for this reusable speaker profile." name: type: "string" examples: - "Alice Example" description: "The speaker's display name." title: type: - "string" - "null" examples: - "Product Manager" description: "The speaker's title." image_url: type: - "string" - "null" format: "uri" description: "The URL of the speaker's profile image." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "speaker_profile_id" - "name" - "title" - "image_url" description: "A reusable speaker profile in the account." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "speakers" x-speakeasy-name-override: "list" /tags: get: summary: "List Tags" description: "Lists tags belonging to the account.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Tags" security: - BearerAuth: [] parameters: - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "sort_by" in: "query" description: "Ordering. When using cursor pagination (see cursor param),\nonly `id`, `updated` and `created` are supported. All other sort_by options\nrequire offset pagination.\n" required: false schema: type: "string" enum: - "name" - "created" - "updated" - "taggingsCount" - "id" - 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: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "My tag Title" description: "The tag's display name." taggings_count: type: "integer" examples: - 2 description: "The number of different medias that have been associated with this tag." created_at: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the tag was originally created." updated_at: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date that the tag was last updated." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: "A tag is used to tag related media. You can then filter media\nby a specific tag.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "tags" x-speakeasy-name-override: "list" post: summary: "Create Tags" description: "Creates a new tag.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Tags" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The tag name. Stored lowercased with whitespace squished, 50 characters max, and must not already exist on the account." required: - "name" required: true responses: "200": description: "Tag created successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "My tag Title" description: "The tag's display name." taggings_count: type: "integer" examples: - 2 description: "The number of different medias that have been associated with this tag." created_at: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the tag was originally created." updated_at: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date that the tag was last updated." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: "A tag is used to tag related media. You can then filter media\nby a specific tag.\n" "400": description: "Bad request - missing or invalid parameters" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "param is missing or the value is empty: name" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "422": description: "Validation error - tag already exists" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Validation failed: Name has already been taken" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "tags" x-speakeasy-name-override: "create" /tags/{name}: delete: summary: "Delete Tag" description: "Deletes a tag\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Tags" security: - BearerAuth: [] parameters: - name: "name" in: "path" description: "Name of the tag to delete" required: true schema: type: "string" description: "Name of the tag to delete" responses: "200": description: "Successful response." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "tags" x-speakeasy-name-override: "delete" /bulk: post: summary: "Create Bulk Actions" description: "Submits a batch of up to 1000 create, update, delete, and move actions to be\nprocessed asynchronously. Returns a background job status whose Show\nendpoint reports aggregate progress and per-action results, including the\nhashed IDs of created records.\n\nSupported resource types are `media`, `folder`, `subfolder`, `channel`,\n`channel_episode`, `captions`, and the ten `customization_*` concerns. A\n`folder` is a top-level folder (previously called a project); a `subfolder`\nis nested inside one and requires `folder_id` and `name` when created. A\n`captions` action operates on one caption track -- one media in one\nlanguage.\n\nBecause caption actions carry SRT contents inline, they are the resource\ntype most likely to reach the request body limit before the action cap.\nPurchasing captions is not available here -- it has its own endpoint.\n\nA `move` action targets one media and accepts a destination `folder_id` and\noptional `subfolder_id`. Bulk moves can use different destinations and are\nnot subject to the Move Media endpoint's 100-item limit or separate throttle.\n\nPlayer customizations are addressed one concern at a time\n(`customization_appearance`, `customization_playback`, and so on), matching\nthe Update Customizations endpoints; each accepts `update` only, takes the\nmedia's hashed ID as its `id`, and takes the same payload as its\ncorresponding endpoint. There is no batch equivalent of the broad customize\nendpoint, so a batch always states which slice of the player it is changing.\n\nA `media` update payload can also carry a `custom_metadata` object mapping\nfield keys to the values to set (`null` clears a field; omitted fields are\nleft untouched). Values are validated against each field's type exactly as\nthe Set Custom Metadata Field Value endpoint validates them, and each write\nis recorded with its actor and source. Requires the custom metadata feature\non the account; without it actions carrying `custom_metadata` fail\nindividually.\n\nDeleting a folder or subfolder also soft-deletes its media. An account owner\nor manager can restore that media from the trash until it purges. To keep the\nmedia when deleting a subfolder, use the Delete Subfolder endpoint; it moves\nthe media to the folder's root level instead.\n\nEach action in the batch is authorized and processed independently:\nfailures (including authorization failures) are reported per action and do\nnot prevent other actions from completing. Media creation is not supported\n-- uploads and URL imports have their own endpoints.\n\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Bulk Actions" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: actions: type: "array" items: type: "object" unevaluatedProperties: false properties: operation: type: "string" enum: - "create" - "update" - "delete" - "move" description: "The operation to perform. Media creation is not supported here --\nuploads and URL imports have their own endpoints.\n\n`delete` also soft-deletes media inside a `folder` or `subfolder`. An\naccount owner or manager can restore it from the trash until it purges.\n\n`move` applies to `media` only, one action per media. Each action\ncarries its own destination, so a single request can move media into\nmany different folders.\n" resource_type: type: "string" enum: - "media" - "folder" - "subfolder" - "channel" - "channel_episode" - "captions" - "customization_access" - "customization_accessibility" - "customization_appearance" - "customization_chapters" - "customization_engagement" - "customization_lead_capture" - "customization_playback" - "customization_related_media" - "customization_sharing" - "customization_thumbnail" description: "The type of resource to operate on. `folder` means a top-level folder\n(previously called a project); use `subfolder` for a folder nested\ninside one. `captions` operates on a single caption track -- one media\nin one language.\n\nThe `customization_*` types each write one concern of a media's player\ncustomizations and accept `update` only. Their `id` is the media's\nhashed ID, and their payload matches the corresponding Update\nCustomizations endpoint (for example, `customization_appearance` takes\nthe same fields as Update Appearance Customizations). Sending a field\nanother concern owns fails that action rather than writing it, so a\nbatch can never quietly overwrite unrelated player settings.\n" id: type: "string" examples: - "abc123" description: "The hashed ID of the resource. Required for update, delete, and move\noperations.\n\nFor `captions` this is the caption track's own ID (the `id` field\nreturned by List Captions), not the media's -- a media can have a track\nper language.\n" payload: type: "object" unevaluatedProperties: true description: "The data for the operation. Required for create, update, and move\noperations.\nThe accepted fields depend on the resource type and match the corresponding\ncreate or update endpoint's request body (for example, a channel_episode\ncreate takes the same fields as the Create Channel Episode endpoint,\nincluding channel_id).\n\nCreating a subfolder requires `folder_id` (the parent folder's hashed ID)\nand `name`.\n\nCreating captions requires `media_id` and `caption_file` (the SRT\ncontents as a string; the multipart file upload the Create Captions\nendpoint accepts is not available here) and takes an optional\n`language`, detected from the file when omitted. Updating captions\ntakes `caption_file`; the track's language is fixed by the record.\nCreating captions for a language that already has a track replaces it,\nmatching the Create Captions endpoint.\n\nMoving a media requires `folder_id` (the destination folder's hashed ID)\nand accepts an optional `subfolder_id`, which must belong to that\nfolder. Omit `subfolder_id` to move the media to the folder's root\nlevel.\n\nA `customization_*` payload is a partial update of that concern only:\njust the fields you send are changed, and a field naming another\nconcern's setting fails the action.\n\nA `media` update payload can also carry a `custom_metadata` object\nmapping field keys to the values to set, in the same shapes the Set\nCustom Metadata Field Value endpoint accepts for each field's type. A\n`null` value clears that field; fields the object omits are left\nuntouched. Requires the custom metadata feature on the account, and\neach write is recorded with its actor and source.\n" required: - "operation" - "resource_type" description: "A single action within a bulk request." maxItems: 1000 minItems: 1 description: "An array of actions to process, one per record. Maximum 1000 actions per\nrequest, and the request body must stay under 2 MB -- whichever limit is\nreached first. An oversized body is rejected with a `413` and no action\nin it runs. Each action specifies an operation (create, update, delete,\nor move), a resource type, and the relevant payload or record ID.\n\nUse `job` instead when every record takes the same payload.\n" job: type: "object" unevaluatedProperties: false properties: operation: type: "string" enum: - "update" - "delete" - "move" description: "The operation to apply to every matching record. `create` is not\naccepted here.\n" resource_type: type: "string" enum: - "media" - "folder" - "subfolder" - "channel" - "channel_episode" - "captions" - "customization_access" - "customization_accessibility" - "customization_appearance" - "customization_chapters" - "customization_engagement" - "customization_lead_capture" - "customization_playback" - "customization_related_media" - "customization_sharing" - "customization_thumbnail" description: "The type of record to operate on, using the same vocabulary as a single\naction. Which parents are valid depends on it -- see `scope`.\n" scope: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "account" - "folder" - "subfolder" - "channel" - "media" description: "The kind of parent `id` names. Required, because a hashed ID does not say\nwhat it belongs to -- the same value could name a folder or a channel.\nUse `account` to mean every record the job could reach, with no `id`.\n" id: type: "string" examples: - "abc123" description: "The parent's hashed ID. Required for every scope type except `account`.\n" required: - "type" description: "The parent whose records the job applies to.\n\nWhich parent types are valid depends on the job's `resource_type` and\n`operation`:\n\n- `media` and the `customization_*` types: `account`, `folder`, `subfolder`,\n `channel`.\n- `captions` with `update` or `delete`, which address a caption track:\n `account`, `media`, `folder`, `channel`.\n- `channel_episode`: `account`, `channel`, `media`.\n- `subfolder`: `account`, `folder`.\n- `folder` and `channel`: `account`.\n\nAn invalid combination is rejected with the valid parents listed.\n" ids: type: "array" examples: - - "abc1234567" - "def8901234" items: type: "string" maxItems: 1000 minItems: 1 description: "The records to apply the change to, named explicitly. Use this instead of\n`scope` when the records do not share a parent -- it is still far cheaper\nthan one action each, since only the ids repeat and the payload is stated\nonce.\n\nGive either `scope` or `ids`, never both.\n" payload: type: "object" unevaluatedProperties: true description: "The data applied to every matching record, in the same shape a single\naction's payload takes for this resource type. Required for `update` and\n`move`.\n" required: - "operation" - "resource_type" description: "One change applied to many records, named by a parent (`scope`) or listed\nexplicitly (`ids`). The server resolves the target and runs one action per\nrecord, so a folder of 400 media takes one job rather than 400 actions.\n\nA `scope` resolves to exactly what the matching list endpoint returns for\nthat parent, including its defaults -- so a `folder` scope on `media` reaches\nmedia in that folder's subfolders, and includes **archived** media.\n\nA job resolves to at most 5000 records. Beyond that it is rejected rather\nthan truncated, so a job never silently acts on part of the set you named --\nnarrow the scope, or send the records as an actions array.\n\nCannot be used with `create`, which has no record to address, and is not\navailable to external contacts.\n" description: "A bulk request, in one of two shapes.\n\nSend `actions` when each record needs its own payload, and `job` when the\nsame change applies to every record under a parent. Provide exactly one of\nthem -- a request carrying both is rejected, and so is a request carrying\nneither. To make a mixed change, send two requests.\n" required: true responses: "202": description: "Bulk request accepted and queued for processing" content: application/json: schema: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: bulkActions x-speakeasy-name-override: create /bulk/purchase: post: summary: "Create Bulk Purchase" description: "Submits either an `actions` array of up to 1000 orders or one `job` that can\nresolve to up to 5000 media. Orders are placed asynchronously. Returns a\nbackground job status whose Show endpoint reports aggregate progress and\nper-order results.\n\nOrders in the batch can incur charges, so a saved credit card is required.\nSupported resource types are `captions` (Wistia-generated English captions),\n`localization` (a dubbed, language-specific version of a media),\n`extended_audio_description`, and `text_translation` (the media's transcript\ntranslated into another language, audio untouched). Each order's `id` is the\nhashed ID of the media to order for.\n\nWhat an order costs depends on the account, not on this endpoint. Automated\ncaptions are included at no cost on plans that provide them and billed at\nthe account's configured per-minute rate otherwise; human-reviewed captions\nbill per minute at the account's standard or rush rate; localizations bill\nper minute once the account's free-dub allowance is used up; text\ntranslations bill as an overage once the account's included translation\nminutes are used up. Check the account's plan and billing settings for its\nactual rates.\n\nOrders are priced and placed individually: failures -- an ineligible media,\na language that already has a localization, an account not entitled to buy\n-- are reported per order and do not stop the rest of the batch. Pricing and\neligibility match the equivalent single-media endpoints exactly.\n\nUse the Create Bulk Actions endpoint for create, update, and delete work; it\ndoes not accept `purchase`, and this endpoint accepts nothing else.\n\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Bulk Purchases" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: actions: type: "array" items: type: "object" unevaluatedProperties: false properties: operation: type: "string" enum: - "purchase" description: "Always `purchase`. This endpoint places orders only; to create, update,\nor delete records in bulk use the Create Bulk Actions endpoint, which\ndoes not accept `purchase`.\n" resource_type: type: "string" enum: - "captions" - "localization" - "extended_audio_description" - "text_translation" description: "What to order for the media.\n\n`captions` orders Wistia-generated English captions -- computer-generated\nor human-reviewed. `localization` orders a dubbed, language-specific\nversion of the media. `extended_audio_description` orders an extended\naudio description track. `text_translation` translates the media's\nexisting transcript into another language, leaving the audio alone.\n" id: type: "string" examples: - "abc123" description: "The hashed ID of the media to order for. Always the media's own ID: what\nthe order produces does not exist yet.\n" payload: type: "object" unevaluatedProperties: true description: "Order options. The accepted fields depend on the resource type and match\nthe corresponding single-media endpoint's request body. Omit it to take\nevery default.\n\n`captions` accepts `automated` (order computer-generated captions\ninstead of human-reviewed ones), `rush` (one business day turnaround\ninstead of four, human-reviewed only, at a higher per-minute rate), and\n`automatically_enable` (show the captions on the video as soon as they\nare ready). Each is treated as `false` when omitted or unrecognized.\nWhat each option costs depends on the account's plan and billing\nsettings.\n\n`localization` requires `output_language`, a 3-character IETF language\ncode, and accepts `auto_enable` (default `true`).\n\n`extended_audio_description` accepts `enabled` (default `true`),\n`ai_enabled` (default `true`), `ietf_language_tag` (default `eng`), and\n`order_instructions`.\n\n`text_translation` requires `target_language` and accepts\n`source_language` (which transcript to translate from, defaulting to the\nmedia's own language). Use the bibliographic ISO 639-2 form or a\nsupported regional or script IETF tag for either value.\n" required: - "operation" - "resource_type" - "id" description: "A single paid order within a bulk purchase request." maxItems: 1000 minItems: 1 description: "The orders to place, one per media. Maximum 1000 per request, and the\nrequest body must stay under 2 MB -- whichever limit is reached first. An\noversized body is rejected with a `413` and no order in it is placed.\n\nEvery order is priced and placed independently: one failing (an\nineligible media, an account without a saved card, a language that\nalready has a localization) does not stop the rest of the batch.\n\nUse `job` instead to order for a whole folder, channel, or account.\n" job: type: "object" unevaluatedProperties: false properties: operation: type: "string" enum: - "purchase" description: "Always `purchase`." resource_type: type: "string" enum: - "captions" - "localization" - "extended_audio_description" - "text_translation" description: "What to order for the media.\n\n`captions` orders Wistia-generated English captions -- computer-generated\nor human-reviewed. `localization` orders a dubbed, language-specific\nversion of the media. `extended_audio_description` orders an extended\naudio description track. `text_translation` translates the media's\nexisting transcript into another language, leaving the audio alone.\n" scope: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "account" - "folder" - "subfolder" - "channel" description: "The kind of parent `id` names. Required, because a hashed ID does not say\nwhat it belongs to -- the same value could name a folder or a channel.\nUse `account` to order for every media in the account.\n" id: type: "string" examples: - "abc123" description: "The parent's hashed ID. Required for every scope type except `account`.\n" required: - "type" description: "The parent whose media the order applies to. An order always addresses the\nmedia, so the valid parent types are the same for every resource type here.\n" ids: type: "array" examples: - - "abc1234567" - "def8901234" items: type: "string" maxItems: 1000 minItems: 1 description: "The media to order for, named explicitly. Use this instead of `scope`\nwhen the media do not share a parent. Give either `scope` or `ids`, never\nboth.\n" payload: type: "object" unevaluatedProperties: true description: "Order options applied to every matching media, in the same shape a single\norder's payload takes for this resource type.\n" required: - "operation" - "resource_type" description: "One order placed for many media, named by a parent (`scope`) or listed\nexplicitly (`ids`), so ordering captions for a folder of 47 videos takes one\njob rather than 47 orders.\n\nA `scope` resolves to exactly what List Media returns for that parent,\nincluding media in the folder's subfolders and **archived** media, and to at\nmost 5000 media -- beyond that the job is rejected rather than truncated.\n\nThe job attempts one order for every media it resolves to. Ineligible media\nfail individually without placing an order; successful orders are metered\nand may incur charges according to the account's plan. Confirm the scope and\npotential cost with the customer before submitting. Not available to external\ncontacts.\n" description: "A bulk purchase request, in one of two shapes.\n\nSend `actions` to name each media individually, and `job` to order for every\nmedia under a parent. Provide exactly one of them -- a request carrying both\nis rejected, and so is a request carrying neither.\n" required: true responses: "202": description: "Bulk purchase accepted and queued for processing" content: application/json: schema: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "bulk" x-speakeasy-name-override: "purchase" /taggings/bulk_create: post: summary: "Bulk Tag Media" description: "This method accepts a list of medias to tag. It processes requests asynchronously and will return a background_job_status object rather than the typical Media response object.\n\nThe tags will be added to the existing tags on each media file, not replaced.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Taggings" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: hashed_ids: type: "array" items: type: "string" description: "An array of the media hashed IDs to be tagged." tag_names: type: "array" items: type: "string" description: "An array of tag names to add to each media." required: - "hashed_ids" - "tag_names" required: true responses: "200": description: "Successful tagging of media." content: application/json: schema: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "422": description: "Unprocessable entity, e.g. missing required parameters." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "taggings" x-speakeasy-name-override: "bulkCreate" x-cli-action-override: "bulk-tag" /folders: get: summary: "List Folders" description: "Lists folders (previously called projects) belonging to the account.\nMy Library folders are not included.\n\nFor tokens scoped to a specific user (`all:delegate_to_contact_permissions`),\nresults are limited to folders that user can see in their content library:\nfolders shared with them directly, through a contact group, or with the\nwhole account (owners and managers see every folder). Public (unlocked)\nfolders the user has no sharing on remain viewable by link but are not\nlisted.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope can also be\nused. Results are limited to the folders its authorizations name (any\npermission granted on a folder qualifies it), filtered as they would be\nfor the contact the token was created for.\n" tags: - "Folders" security: - BearerAuth: [] parameters: - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "sort_by" in: "query" description: "Ordering. When using cursor pagination (see cursor param),\nonly `id`, `updated` and `created` are supported. All other sort_by options\nrequire offset pagination.\n" 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 folders to fetch" required: false schema: type: "array" items: type: "string" responses: "200": description: "A list of folders" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." description: type: - "string" - "null" examples: - "About My Folder" description: "The folder’s description." media_count: type: "integer" examples: - 2 description: "The number of different medias that have been uploaded to the folder." medias: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A URL for fetching all child records of the parent record." description: "A link to where you can fetch the medias for this folder." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the folder was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date that the folder was last updated." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." public: type: "boolean" examples: - false description: "A boolean indicating whether the folder is available for public (anonymous) viewing." public_id: type: - "string" - "null" examples: - "4bD" description: "If the folder is public, this field contains a string representing the ID used for referencing the folder in public URLs." anonymous_can_upload: type: "boolean" examples: - false anonymous_can_download: type: "boolean" examples: - false kind: type: "string" examples: - "shared" enum: - "library" - "shared" - "account" description: "Indicates the folder's access scope, relative to the requesting user. One of:\n- `library`: a library the requester owns. Libraries can still be shared with specific contacts or contact groups; the only restriction is that they cannot be shared with the whole account.\n- `shared`: a folder the requester has access to via a Contact or ContactGroup sharing — this includes both shared folders and another contact's library that the requester has been granted access to.\n- `account`: a folder shared with the whole account (everyone in the company can see it).\n" personal_library: type: "boolean" examples: - false description: "Whether this folder is someone's personal library (\"My Library\"). Unlike `kind`, this is a property of the folder itself and does not depend on who is requesting — it is `true` for a personal library even when that library has been shared with you (where `kind` would read `shared`). Use this, not `kind`, to tell whether a folder is a personal library.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "name" - "media_count" - "created" - "updated" - "hashed_id" - "public" - "public_id" - "kind" - "personal_library" - "medias" description: "A folder (previously called a project) is a container in which to organize media into. It can be\nused to set permissions that apply to all the media in the folder as well as\norganizing media into subfolders (previously called media groups).\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "folders" x-speakeasy-name-override: "list" post: summary: "Create Folder" description: "Creates a new folder (previously called project). If the folder is created successfully the Location HTTP header will point to the new folder.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\n`account` authorization granting the `create-folders` permission can also\nbe used. The folder's creator is the contact behind the token (the account\nowner for a token minted from an account-level token); `adminEmail` selects\nthe folder's administrator (defaults to the account owner). `personalLibrary`\ncreates the folder inside the My Library of the contact behind the token.\nThe new folder is not covered by the token that created it, so follow-up\nrequests need a token whose authorizations name the returned hashed id.\n" tags: - "Folders" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "My New Folder" description: "The name of the folder you want to create." adminEmail: type: "string" examples: - "admin@example.com" description: "The email address of the person you want to set as the owner of this folder. Defaults to the Wistia Account Owner." description: type: "string" examples: - "My New Folder Description" description: "The folder’s description." anonymousCanUpload: type: "boolean" description: "Whether anonymous users can upload media to the folder." anonymousCanDownload: type: "boolean" description: "Whether anonymous users can download media from the folder." public: type: "boolean" examples: - false description: "A flag indicating whether or not the folder is enabled for public access." personalLibrary: type: "boolean" examples: - false description: "When true, creates the folder inside the requesting user's personal \"My Library\" (owned by them) instead of a shared account folder." responses: "201": description: "Folder created" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." description: type: - "string" - "null" examples: - "About My Folder" description: "The folder’s description." media_count: type: "integer" examples: - 2 description: "The number of different medias that have been uploaded to the folder." medias: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A URL for fetching all child records of the parent record." description: "A link to where you can fetch the medias for this folder." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the folder was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date that the folder was last updated." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." public: type: "boolean" examples: - false description: "A boolean indicating whether the folder is available for public (anonymous) viewing." public_id: type: - "string" - "null" examples: - "4bD" description: "If the folder is public, this field contains a string representing the ID used for referencing the folder in public URLs." anonymous_can_upload: type: "boolean" examples: - false anonymous_can_download: type: "boolean" examples: - false kind: type: "string" examples: - "shared" enum: - "library" - "shared" - "account" description: "Indicates the folder's access scope, relative to the requesting user. One of:\n- `library`: a library the requester owns. Libraries can still be shared with specific contacts or contact groups; the only restriction is that they cannot be shared with the whole account.\n- `shared`: a folder the requester has access to via a Contact or ContactGroup sharing — this includes both shared folders and another contact's library that the requester has been granted access to.\n- `account`: a folder shared with the whole account (everyone in the company can see it).\n" personal_library: type: "boolean" examples: - false description: "Whether this folder is someone's personal library (\"My Library\"). Unlike `kind`, this is a property of the folder itself and does not depend on who is requesting — it is `true` for a personal library even when that library has been shared with you (where `kind` would read `shared`). Use this, not `kind`, to tell whether a folder is a personal library.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "name" - "media_count" - "created" - "updated" - "hashed_id" - "public" - "public_id" - "kind" - "personal_library" - "medias" description: "A folder (previously called a project) is a container in which to organize media into. It can be\nused to set permissions that apply to all the media in the folder as well as\norganizing media into subfolders (previously called media groups).\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "folders" x-speakeasy-name-override: "create" /folders/{id}: get: summary: "Show Folder" description: "Retrieves a single folder (previously called project).\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization for this folder can also be used; any permission granted on a\nfolder allows showing it.\n" tags: - "Folders" security: - BearerAuth: [] parameters: - name: "id" in: "path" description: "Folder Hashed ID" required: true schema: type: "string" description: "Hashed ID of the folder (e.g., \"4d23503f70\")" responses: "200": description: "A single folder" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." description: type: - "string" - "null" examples: - "About My Folder" description: "The folder’s description." media_count: type: "integer" examples: - 2 description: "The number of different medias that have been uploaded to the folder." medias: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A URL for fetching all child records of the parent record." description: "A link to where you can fetch the medias for this folder." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the folder was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date that the folder was last updated." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." public: type: "boolean" examples: - false description: "A boolean indicating whether the folder is available for public (anonymous) viewing." public_id: type: - "string" - "null" examples: - "4bD" description: "If the folder is public, this field contains a string representing the ID used for referencing the folder in public URLs." anonymous_can_upload: type: "boolean" examples: - false anonymous_can_download: type: "boolean" examples: - false kind: type: "string" examples: - "shared" enum: - "library" - "shared" - "account" description: "Indicates the folder's access scope, relative to the requesting user. One of:\n- `library`: a library the requester owns. Libraries can still be shared with specific contacts or contact groups; the only restriction is that they cannot be shared with the whole account.\n- `shared`: a folder the requester has access to via a Contact or ContactGroup sharing — this includes both shared folders and another contact's library that the requester has been granted access to.\n- `account`: a folder shared with the whole account (everyone in the company can see it).\n" personal_library: type: "boolean" examples: - false description: "Whether this folder is someone's personal library (\"My Library\"). Unlike `kind`, this is a property of the folder itself and does not depend on who is requesting — it is `true` for a personal library even when that library has been shared with you (where `kind` would read `shared`). Use this, not `kind`, to tell whether a folder is a personal library.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "name" - "media_count" - "created" - "updated" - "hashed_id" - "public" - "public_id" - "kind" - "personal_library" - "medias" description: "A folder (previously called a project) is a container in which to organize media into. It can be\nused to set permissions that apply to all the media in the folder as well as\norganizing media into subfolders (previously called media groups).\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "folders" x-speakeasy-name-override: "get" put: summary: "Update Folder" description: "Updates a folder (previously called project)\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization granting the `update` permission on this folder can also be\nused. The `update` permission also allows creating, renaming and deleting\nthe folder's subfolders and using the folder as the destination when\nmoving or bulk-copying media the token may update.\n" tags: - "Folders" security: - BearerAuth: [] parameters: - name: "id" in: "path" description: "Folder Hashed ID" required: true schema: type: "string" description: "Hashed ID of the folder (e.g., \"4d23503f70\")" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "My New Folder Name" description: "The folder’s new name." description: type: "string" examples: - "My New Folder Description" description: "The folder’s new description." anonymousCanUpload: type: "boolean" description: "Whether anonymous users can upload media to the folder." anonymousCanDownload: type: "boolean" description: "Whether anonymous users can download media from the folder." public: type: "boolean" examples: - false description: "A flag indicating whether or not the folder is enabled for public access." responses: "200": description: "A single folder" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." description: type: - "string" - "null" examples: - "About My Folder" description: "The folder’s description." media_count: type: "integer" examples: - 2 description: "The number of different medias that have been uploaded to the folder." medias: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A URL for fetching all child records of the parent record." description: "A link to where you can fetch the medias for this folder." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the folder was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date that the folder was last updated." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." public: type: "boolean" examples: - false description: "A boolean indicating whether the folder is available for public (anonymous) viewing." public_id: type: - "string" - "null" examples: - "4bD" description: "If the folder is public, this field contains a string representing the ID used for referencing the folder in public URLs." anonymous_can_upload: type: "boolean" examples: - false anonymous_can_download: type: "boolean" examples: - false kind: type: "string" examples: - "shared" enum: - "library" - "shared" - "account" description: "Indicates the folder's access scope, relative to the requesting user. One of:\n- `library`: a library the requester owns. Libraries can still be shared with specific contacts or contact groups; the only restriction is that they cannot be shared with the whole account.\n- `shared`: a folder the requester has access to via a Contact or ContactGroup sharing — this includes both shared folders and another contact's library that the requester has been granted access to.\n- `account`: a folder shared with the whole account (everyone in the company can see it).\n" personal_library: type: "boolean" examples: - false description: "Whether this folder is someone's personal library (\"My Library\"). Unlike `kind`, this is a property of the folder itself and does not depend on who is requesting — it is `true` for a personal library even when that library has been shared with you (where `kind` would read `shared`). Use this, not `kind`, to tell whether a folder is a personal library.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "name" - "media_count" - "created" - "updated" - "hashed_id" - "public" - "public_id" - "kind" - "personal_library" - "medias" description: "A folder (previously called a project) is a container in which to organize media into. It can be\nused to set permissions that apply to all the media in the folder as well as\norganizing media into subfolders (previously called media groups).\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "folders" x-speakeasy-name-override: "update" delete: summary: "Delete Folder" description: "Deletes a folder (previously called project) and the media inside it.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization granting the `destroy` permission on this folder can also be\nused.\n" tags: - "Folders" security: - BearerAuth: [] parameters: - name: "id" in: "path" description: "Folder Hashed ID" required: true schema: type: "string" description: "Hashed ID of the folder (e.g., \"4d23503f70\")" responses: "200": description: "Successful response" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." description: type: - "string" - "null" examples: - "About My Folder" description: "The folder’s description." media_count: type: "integer" examples: - 2 description: "The number of different medias that have been uploaded to the folder." medias: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A URL for fetching all child records of the parent record." description: "A link to where you can fetch the medias for this folder." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the folder was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date that the folder was last updated." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." public: type: "boolean" examples: - false description: "A boolean indicating whether the folder is available for public (anonymous) viewing." public_id: type: - "string" - "null" examples: - "4bD" description: "If the folder is public, this field contains a string representing the ID used for referencing the folder in public URLs." anonymous_can_upload: type: "boolean" examples: - false anonymous_can_download: type: "boolean" examples: - false kind: type: "string" examples: - "shared" enum: - "library" - "shared" - "account" description: "Indicates the folder's access scope, relative to the requesting user. One of:\n- `library`: a library the requester owns. Libraries can still be shared with specific contacts or contact groups; the only restriction is that they cannot be shared with the whole account.\n- `shared`: a folder the requester has access to via a Contact or ContactGroup sharing — this includes both shared folders and another contact's library that the requester has been granted access to.\n- `account`: a folder shared with the whole account (everyone in the company can see it).\n" personal_library: type: "boolean" examples: - false description: "Whether this folder is someone's personal library (\"My Library\"). Unlike `kind`, this is a property of the folder itself and does not depend on who is requesting — it is `true` for a personal library even when that library has been shared with you (where `kind` would read `shared`). Use this, not `kind`, to tell whether a folder is a personal library.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "name" - "media_count" - "created" - "updated" - "hashed_id" - "public" - "public_id" - "kind" - "personal_library" - "medias" description: "A folder (previously called a project) is a container in which to organize media into. It can be\nused to set permissions that apply to all the media in the folder as well as\norganizing media into subfolders (previously called media groups).\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "folders" x-speakeasy-name-override: "delete" /folders/{id}/copy: post: summary: "Copy Folder" description: "This copies a folder (previously called project) and all its media and subfolders asynchronously in a background job.\n\nThis method does not copy the folder’s sharing information (i.e. users that could see the old folder will not automatically be able to see the new one).\n\nFor the request you can specify the owner of a new folder by passing an optional parameter. The person you specify must be a Manager in the account.\n\nThe body of the response will contain an object representing the background job that was created.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Folders" security: - BearerAuth: [] parameters: - name: "id" in: "path" description: "Folder Hashed ID" required: true schema: type: "string" description: "Hashed ID of the folder (e.g., \"4d23503f70\")" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: adminEmail: type: "string" examples: - "admin@example.com" description: "The email address of the account Manager that will be the owner of the new folder. Defaults to the Account Owner if invalid or omitted." responses: "202": description: "Folder queued to be copied" content: application/json: schema: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "folders" x-speakeasy-name-override: "copy" /folders/{folderId}/sharings: get: summary: "List Folder Sharings" description: "Lists the sharings of contacts and contact groups on a folder.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Folder Sharings" security: - BearerAuth: [] parameters: - name: "folderId" in: "path" description: "Folder Hashed ID" required: true schema: type: "string" description: "Hashed ID of the folder (e.g., \"4d23503f70\")" - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "sort_by" in: "query" description: "Ordering. When using cursor pagination (see cursor param),\nonly `id` is supported.\n" required: false schema: type: "string" enum: - "created" - "updated" - "id" default: "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 default: 1 - name: "hashed_ids[]" in: "query" description: "Filter sharings by their hashed IDs" required: false style: "form" explode: true schema: type: "array" items: type: "string" responses: "200": description: "Successfully retrieved list of sharings" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 is_admin: type: "boolean" examples: - true can_share: type: "boolean" examples: - true can_download: type: "boolean" examples: - true can_upload: type: "boolean" examples: - true share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" email: type: "string" examples: - "jim@wistia.com" format: "email" required: - "id" - "name" - "type" folder: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 13 name: type: "string" examples: - "My Folder" required: - "id" - "name" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "is_admin" - "can_share" - "can_download" - "can_upload" - "share" - "folder" description: "A sharing is an object that links either a contact or a contact group to a folder, including information about the contacts' permissions to that folder.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "folderSharings" x-speakeasy-name-override: "list" post: summary: "Create Folder Sharing" description: "Creates a new sharing object for a folder by specifying the email of the person to share with and other optional parameters.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Folder Sharings" security: - BearerAuth: [] parameters: - name: "folderId" in: "path" description: "Hashed ID of the folder to be shared" required: true schema: type: "string" description: "Hashed ID of the folder (e.g., \"4d23503f70\")" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: sharing: type: "object" unevaluatedProperties: false properties: with: type: "string" format: "email" description: "The email address of the person with whom you want to share the folder." requirePassword: type: "boolean" examples: - false description: "A flag indicating whether or not a password is required. Defaults to true." canShare: type: "boolean" examples: - false description: "Whether the user is allowed to share the folder with others. Defaults to false." canDownload: type: "boolean" examples: - false description: "Whether the user is allowed to download files from the folder. Defaults to false." canUpload: type: "boolean" examples: - false description: "Whether the user is allowed to upload files to the folder. Defaults to false." sendEmailNotification: type: "string" enum: - "0" - "1" description: "Deprecated! Email notifications are always sent now." deprecated: true required: - "with" required: - "sharing" required: true responses: "201": description: "Folder shared successfully" headers: Location: description: "The API endpoint for the new sharing object." schema: type: "string" content: application/json: schema: type: "object" unevaluatedProperties: false properties: project: type: "string" examples: - "http://myaccount.wistia.com/folders/13" format: "uri" description: "The URL of the folder that was shared." sharing: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 is_admin: type: "boolean" examples: - true can_share: type: "boolean" examples: - true can_download: type: "boolean" examples: - true can_upload: type: "boolean" examples: - true share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" email: type: "string" examples: - "jim@wistia.com" format: "email" required: - "id" - "name" - "type" folder: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 13 name: type: "string" examples: - "My Folder" required: - "id" - "name" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "is_admin" - "can_share" - "can_download" - "can_upload" - "share" - "folder" description: "A sharing is an object that links either a contact or a contact group to a folder, including information about the contacts' permissions to that folder.\n" description: "The response includes a link for the user to access the folder." "400": description: "Bad request" content: application/json: schema: type: "array" examples: - - "email@example.com is already shared on this folder." items: type: "string" description: "Error message detailing the reason for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "folderSharings" x-speakeasy-name-override: "create" /folders/{folderId}/sharings/{sharingId}: get: summary: "Show Folder Sharing" description: "Retrieves the details of a specific sharing object for a given folder.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Folder Sharings" security: - BearerAuth: [] parameters: - name: "folderId" in: "path" description: "Hashed ID for the folder for which you'd like to see sharings." required: true schema: type: "string" description: "Hashed ID of the folder (e.g., \"4d23503f70\")" - 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: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 is_admin: type: "boolean" examples: - true can_share: type: "boolean" examples: - true can_download: type: "boolean" examples: - true can_upload: type: "boolean" examples: - true share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" email: type: "string" examples: - "jim@wistia.com" format: "email" required: - "id" - "name" - "type" folder: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 13 name: type: "string" examples: - "My Folder" required: - "id" - "name" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "is_admin" - "can_share" - "can_download" - "can_upload" - "share" - "folder" description: "A sharing is an object that links either a contact or a contact group to a folder, including information about the contacts' permissions to that folder.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "folderSharings" x-speakeasy-name-override: "get" put: summary: "Update Folder Sharing" description: "Updates a sharing on a folder.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Folder Sharings" security: - BearerAuth: [] parameters: - name: "folderId" in: "path" description: "ID of the folder" required: true schema: type: "string" - name: "sharingId" in: "path" description: "ID of the sharing to be updated" required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: sharing: type: "object" unevaluatedProperties: false properties: canShare: type: "boolean" description: "Allow the user or group to share the folder with others." canDownload: type: "boolean" description: "Allow the user or group to download media from the folder." canUpload: type: "boolean" description: "Allow the user or group to upload media to the folder." isAdmin: type: "boolean" description: "Give this user admin rights to the folder." required: true responses: "200": description: "Sharing updated successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 is_admin: type: "boolean" examples: - true can_share: type: "boolean" examples: - true can_download: type: "boolean" examples: - true can_upload: type: "boolean" examples: - true share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" email: type: "string" examples: - "jim@wistia.com" format: "email" required: - "id" - "name" - "type" folder: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 13 name: type: "string" examples: - "My Folder" required: - "id" - "name" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "is_admin" - "can_share" - "can_download" - "can_upload" - "share" - "folder" description: "A sharing is an object that links either a contact or a contact group to a folder, including information about the contacts' permissions to that folder.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "folderSharings" x-speakeasy-name-override: "update" delete: summary: "Delete Folder Sharing" description: "Deletes a sharing on a folder.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Folder Sharings" security: - BearerAuth: [] parameters: - name: "folderId" in: "path" description: "Hashed ID of the folder" required: true schema: type: "string" description: "Hashed ID of the folder (e.g., \"4d23503f70\")" - 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: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 is_admin: type: "boolean" examples: - true can_share: type: "boolean" examples: - true can_download: type: "boolean" examples: - true can_upload: type: "boolean" examples: - true share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" email: type: "string" examples: - "jim@wistia.com" format: "email" required: - "id" - "name" - "type" folder: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 13 name: type: "string" examples: - "My Folder" required: - "id" - "name" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "is_admin" - "can_share" - "can_download" - "can_upload" - "share" - "folder" description: "A sharing is an object that links either a contact or a contact group to a folder, including information about the contacts' permissions to that folder.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "folderSharings" x-speakeasy-name-override: "delete" /folders/{folderId}/subfolders: get: summary: "List Subfolders" description: "Lists subfolders in a specific folder.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization naming this folder (any permission) can also be used; it\nlists the folder's subfolders.\n" tags: - "Subfolders" security: - BearerAuth: [] parameters: - name: "folderId" in: "path" description: "The hashed ID of the folder" required: true schema: type: "string" examples: - "abc123def4" - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "sort_by" in: "query" description: "Field to sort by. When using cursor pagination (see cursor param),\nonly `id` is supported.\n" required: false schema: type: "string" enum: - "name" - "created" - "updated" - "position" - "id" default: "position" - name: "sort_direction" in: "query" description: "Sort direction (0 = desc, 1 = asc; default is 1)" required: false schema: type: "integer" enum: - 0 - 1 default: 1 - name: "hashed_ids[]" in: "query" description: "Filter subfolders by their hashed IDs" required: false style: "form" explode: true schema: type: "array" items: type: "string" responses: "200": description: "A list of subfolders" content: application/json: schema: type: "array" items: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Folder not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID abc123def4 not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "subfolders" x-speakeasy-name-override: "list" post: summary: "Create Subfolder" description: "Creates a new subfolder within a folder. The subfolder will be created with the next available position.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization granting the `update` permission on this folder can also\nbe used.\n" tags: - "Subfolders" security: - BearerAuth: [] parameters: - name: "folderId" in: "path" description: "The hashed ID of the folder" required: true schema: type: "string" examples: - "abc123def4" requestBody: description: "Subfolder data" content: application/json: schema: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "Marketing Videos" maxLength: 255 description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" maxLength: 1000 description: "A description for the subfolder." required: - "name" description: "Input data for creating or updating a subfolder." example: name: "Marketing Videos" description: "Collection of all marketing and promotional videos" required: true responses: "201": description: "Subfolder created successfully" content: application/json: schema: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Folder not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID abc123def4 not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "subfolders" x-speakeasy-name-override: "create" /folders/{folderId}/subfolders/{subfolderId}: get: summary: "Show Subfolder" description: "Retrieves detailed information about a specific subfolder, including all media contained within it.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization naming this folder (any permission) can also be used. The\nembedded media are limited to those the token's authorizations name.\n" tags: - "Subfolders" security: - BearerAuth: [] parameters: - name: "folderId" in: "path" description: "The hashed ID of the folder" 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: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." - type: "object" properties: medias: type: "array" items: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" unevaluatedProperties: false description: "Array of media files contained in this subfolder." unevaluatedProperties: false description: "A subfolder with its contained media files." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Folder or subfolder not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Subfolder with ID xyz789ghi0 not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "subfolders" x-speakeasy-name-override: "get" put: summary: "Update Subfolder" description: "Updates a subfolder's name and/or description.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization granting the `update` permission on this folder can also\nbe used.\n" tags: - "Subfolders" security: - BearerAuth: [] parameters: - name: "folderId" in: "path" description: "The hashed ID of the folder" 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" content: application/json: schema: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "Updated Marketing Videos" maxLength: 255 description: "The new name for the subfolder" description: type: - "string" - "null" examples: - "Updated collection of marketing materials" maxLength: 1000 description: "The new description for the subfolder" example: name: "Updated Marketing Videos" description: "Updated collection of marketing materials" required: true responses: "200": description: "Subfolder updated successfully" content: application/json: schema: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Folder or subfolder not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Subfolder with ID xyz789ghi0 not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "subfolders" x-speakeasy-name-override: "update" delete: summary: "Delete Subfolder" description: "Deletes one subfolder and moves its media to the folder's root level. The subfolder is soft-deleted and is no longer accessible via the API. To delete multiple subfolders and their media, use the Bulk Delete Subfolders endpoint.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization granting the `update` permission on this folder can also\nbe used.\n" tags: - "Subfolders" security: - BearerAuth: [] parameters: - name: "folderId" in: "path" description: "The hashed ID of the folder" 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: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." unevaluatedProperties: false 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": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Folder or subfolder not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Subfolder with ID xyz789ghi0 not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "subfolders" x-speakeasy-name-override: "delete" /folders/{folderId}/subfolders/bulk_delete: delete: summary: "Bulk Delete Subfolders" description: "Deletes multiple subfolders asynchronously. Their media is also soft-deleted and can be restored from the trash by an account owner or manager until it is purged. To keep the media, use the Delete Subfolder endpoint, which moves it to the folder's root level.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization granting the `update` permission on this folder can also\nbe used.\n\nAn [expiring access token](https://docs.wistia.com/reference/post_expiring-token)\ncreated with the `all:delegate_to_contact_permissions` scope and an\nauthorization granting the `update` permission on the folder can also be\nused.\n" tags: - "Subfolders" security: - BearerAuth: [] parameters: - name: "folderId" in: "path" description: "The hashed ID of the folder containing the subfolders" required: true schema: type: "string" examples: - "abc123def4" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: hashed_ids: type: "array" items: type: "string" description: "An array of the subfolder hashed IDs to be deleted." required: - "hashed_ids" required: true responses: "200": description: "Successful queuing of subfolder deletion." content: application/json: schema: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Folder not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Project with ID abc123def4 not found." "422": description: "Unprocessable entity, e.g. missing required parameters." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "subfolders" x-speakeasy-name-override: "bulkDelete" /channels: get: summary: "List Channels" description: "Lists all Channels belonging to an account. This endpoint can also be used to\ndo a batch fetch based off of the hashed id.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channels" security: - BearerAuth: [] parameters: - name: "cursor" in: "query" description: "If `cursor[enabled]` is set to 1 then cursor pagination is enabled and the\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - 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.\nNote: Only 'id' and 'created' are supported when using cursor pagination.\n" 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 style: "form" explode: true schema: type: "array" items: type: "string" responses: "200": description: "Channels retrieval successful" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "The numeric id of the channel." created: type: "string" format: "date-time" description: "The date when the channel was originally created." description: type: "string" description: "The channel's description." hashed_id: type: "string" description: "A unique alphanumeric identifier for this channel." media_count: type: "integer" description: "The number of medias in the channel." live_stream_event_count: type: "integer" description: "The number of live stream events in the channel." name: type: "string" description: "The display name for the channel" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." auto_publish_enabled: type: - "boolean" - "null" description: "Whether episodes are automatically published when added to the channel." podcast_enabled: type: - "boolean" - "null" description: "Whether podcasting is enabled for the channel." custom_url: type: - "string" - "null" description: "The custom URL used when embedding the channel on your own site. Null if no custom URL is set." podcast_settings: type: "object" unevaluatedProperties: false properties: copyright: type: - "string" - "null" description: "The channel's copyright information, published in the RSS feed as ``." episode_format: oneOf: - type: "string" enum: - "episodic" - "episodic_with_seasons" - "serial" - type: "null" unevaluatedProperties: false description: "The format for episodes for the podcast channel, published in the RSS feed as ``. `episodic_with_seasons` is published as `episodic`." author_name: type: - "string" - "null" description: "The name of the author(s) for the channel, published in the RSS feed as ``." explicit: type: - "boolean" - "null" description: "Whether the channel contains explicit content, published in the RSS feed as ``." owner_name: type: - "string" - "null" description: "The podcast owner's name, published in the channel's public RSS feed as ``. Podcast directories use this as the show's administrative contact." owner_email: type: - "string" - "null" description: "The podcast owner's email address, published in the channel's public RSS feed as ``. Podcast directories such as Apple Podcasts require it for ownership verification." category1: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The primary category for the channel, published in the RSS feed as ``." category2: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The secondary category for the channel, published in the RSS feed as ``." category3: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The third category for the channel, published in the RSS feed as ``." language: type: - "string" - "null" enum: - "af" - "be" - "bg" - "ca" - "cs" - "da" - "de-at" - "de-ch" - "de-de" - "de-li" - "de-lu" - "de" - "el" - "en-au" - "en-bz" - "en-ca" - "en-gb" - "en-ie" - "en-jm" - "en-nz" - "en-ph" - "en-tt" - "en-us" - "en-za" - "en-zw" - "en" - "es-ar" - "es-bo" - "es-cl" - "es-co" - "es-cr" - "es-do" - "es-ec" - "es-es" - "es-gt" - "es-hn" - "es-mx" - "es-ni" - "es-pa" - "es-pe" - "es-pr" - "es-py" - "es-sv" - "es-uy" - "es-ve" - "es" - "et" - "eu" - "fi" - "fo" - "fr-be" - "fr-ca" - "fr-ch" - "fr-fr" - "fr-lu" - "fr-mc" - "fr" - "ga" - "gd" - "gl" - "haw" - "hr" - "hu" - "in" - "is" - "it-ch" - "it-it" - "it" - "ja" - "ko" - "mk" - "nl-be" - "nl-nl" - "nl" - "no" - "pl" - "pt-br" - "pt-pt" - "pt" - "ro-mo" - "ro-ro" - "ro" - "ru-mo" - "ru-ru" - "ru" - "sk" - "sl" - "sq" - "sr" - "sv-fi" - "sv-se" - "sv" - "tr" - "uk" - "zh-cn" - "zh-tw" description: "The ISO 639-1 language code for the channel, published in the RSS feed as ``." description: "Podcast specific settings for the channel. Only present when podcasting\nis enabled for the channel.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "created" - "description" - "hashed_id" - "media_count" - "name" - "updated" description: "A Channel lets you take a collection of video (or audio) and embed them\non your site, as well as distribute through podcasting.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channels" x-speakeasy-name-override: "list" post: summary: "Create Channel" description: "Creates a channel.\n" tags: - "Channels" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: name: type: - "string" - "null" description: "The display name for the channel" description: type: - "string" - "null" description: "The channel's description." auto_publish_enabled: type: "boolean" description: "Whether the episodes are automatically published when added to the channel. Cannot be enabled if podcasting is on." podcast_enabled: type: "boolean" description: "Whether podcasting is enabled for this channel." custom_url: type: - "string" - "null" description: "Use if embedding the channel on your own site. The custom URL ensures links always direct to your page and not Wistia's." podcast_settings: type: "object" unevaluatedProperties: false properties: copyright: type: - "string" - "null" description: "The channel's copyright information, published in the RSS feed as ``." episode_format: oneOf: - type: "string" enum: - "episodic" - "episodic_with_seasons" - "serial" - type: "null" unevaluatedProperties: false description: "The format for episodes for the podcast channel, published in the RSS feed as ``. `episodic_with_seasons` is published as `episodic`." author_name: type: - "string" - "null" description: "The name of the author(s) for the channel, published in the RSS feed as ``." explicit: type: - "boolean" - "null" description: "Whether the channel contains explicit content, published in the RSS feed as ``." owner_name: type: - "string" - "null" description: "The podcast owner's name, published in the channel's public RSS feed as ``. Podcast directories use this as the show's administrative contact." owner_email: type: - "string" - "null" description: "The podcast owner's email address, published in the channel's public RSS feed as ``. Podcast directories such as Apple Podcasts require it for ownership verification." category1: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The primary category for the channel, published in the RSS feed as ``." category2: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The secondary category for the channel, published in the RSS feed as ``." category3: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The third category for the channel, published in the RSS feed as ``." language: type: - "string" - "null" enum: - "af" - "be" - "bg" - "ca" - "cs" - "da" - "de-at" - "de-ch" - "de-de" - "de-li" - "de-lu" - "de" - "el" - "en-au" - "en-bz" - "en-ca" - "en-gb" - "en-ie" - "en-jm" - "en-nz" - "en-ph" - "en-tt" - "en-us" - "en-za" - "en-zw" - "en" - "es-ar" - "es-bo" - "es-cl" - "es-co" - "es-cr" - "es-do" - "es-ec" - "es-es" - "es-gt" - "es-hn" - "es-mx" - "es-ni" - "es-pa" - "es-pe" - "es-pr" - "es-py" - "es-sv" - "es-uy" - "es-ve" - "es" - "et" - "eu" - "fi" - "fo" - "fr-be" - "fr-ca" - "fr-ch" - "fr-fr" - "fr-lu" - "fr-mc" - "fr" - "ga" - "gd" - "gl" - "haw" - "hr" - "hu" - "in" - "is" - "it-ch" - "it-it" - "it" - "ja" - "ko" - "mk" - "nl-be" - "nl-nl" - "nl" - "no" - "pl" - "pt-br" - "pt-pt" - "pt" - "ro-mo" - "ro-ro" - "ro" - "ru-mo" - "ru-ru" - "ru" - "sk" - "sl" - "sq" - "sr" - "sv-fi" - "sv-se" - "sv" - "tr" - "uk" - "zh-cn" - "zh-tw" description: "The ISO 639-1 language code for the channel, published in the RSS feed as ``." description: "Podcast specific settings for a channel. These settings only take effect if\npodcasting is enabled for the channel. These values appear in the channel's\npublicly accessible podcast RSS feed.\n" responses: "201": description: "Channel created successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "The numeric id of the channel." created: type: "string" format: "date-time" description: "The date when the channel was originally created." description: type: "string" description: "The channel's description." hashed_id: type: "string" description: "A unique alphanumeric identifier for this channel." media_count: type: "integer" description: "The number of medias in the channel." live_stream_event_count: type: "integer" description: "The number of live stream events in the channel." name: type: "string" description: "The display name for the channel" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." auto_publish_enabled: type: - "boolean" - "null" description: "Whether episodes are automatically published when added to the channel." podcast_enabled: type: - "boolean" - "null" description: "Whether podcasting is enabled for the channel." custom_url: type: - "string" - "null" description: "The custom URL used when embedding the channel on your own site. Null if no custom URL is set." podcast_settings: type: "object" unevaluatedProperties: false properties: copyright: type: - "string" - "null" description: "The channel's copyright information, published in the RSS feed as ``." episode_format: oneOf: - type: "string" enum: - "episodic" - "episodic_with_seasons" - "serial" - type: "null" unevaluatedProperties: false description: "The format for episodes for the podcast channel, published in the RSS feed as ``. `episodic_with_seasons` is published as `episodic`." author_name: type: - "string" - "null" description: "The name of the author(s) for the channel, published in the RSS feed as ``." explicit: type: - "boolean" - "null" description: "Whether the channel contains explicit content, published in the RSS feed as ``." owner_name: type: - "string" - "null" description: "The podcast owner's name, published in the channel's public RSS feed as ``. Podcast directories use this as the show's administrative contact." owner_email: type: - "string" - "null" description: "The podcast owner's email address, published in the channel's public RSS feed as ``. Podcast directories such as Apple Podcasts require it for ownership verification." category1: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The primary category for the channel, published in the RSS feed as ``." category2: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The secondary category for the channel, published in the RSS feed as ``." category3: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The third category for the channel, published in the RSS feed as ``." language: type: - "string" - "null" enum: - "af" - "be" - "bg" - "ca" - "cs" - "da" - "de-at" - "de-ch" - "de-de" - "de-li" - "de-lu" - "de" - "el" - "en-au" - "en-bz" - "en-ca" - "en-gb" - "en-ie" - "en-jm" - "en-nz" - "en-ph" - "en-tt" - "en-us" - "en-za" - "en-zw" - "en" - "es-ar" - "es-bo" - "es-cl" - "es-co" - "es-cr" - "es-do" - "es-ec" - "es-es" - "es-gt" - "es-hn" - "es-mx" - "es-ni" - "es-pa" - "es-pe" - "es-pr" - "es-py" - "es-sv" - "es-uy" - "es-ve" - "es" - "et" - "eu" - "fi" - "fo" - "fr-be" - "fr-ca" - "fr-ch" - "fr-fr" - "fr-lu" - "fr-mc" - "fr" - "ga" - "gd" - "gl" - "haw" - "hr" - "hu" - "in" - "is" - "it-ch" - "it-it" - "it" - "ja" - "ko" - "mk" - "nl-be" - "nl-nl" - "nl" - "no" - "pl" - "pt-br" - "pt-pt" - "pt" - "ro-mo" - "ro-ro" - "ro" - "ru-mo" - "ru-ru" - "ru" - "sk" - "sl" - "sq" - "sr" - "sv-fi" - "sv-se" - "sv" - "tr" - "uk" - "zh-cn" - "zh-tw" description: "The ISO 639-1 language code for the channel, published in the RSS feed as ``." description: "Podcast specific settings for the channel. Only present when podcasting\nis enabled for the channel.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "created" - "description" - "hashed_id" - "media_count" - "name" - "updated" description: "A Channel lets you take a collection of video (or audio) and embed them\non your site, as well as distribute through podcasting.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channels" x-speakeasy-name-override: "create" /channels/{channelHashedId}: get: summary: "Show Channel" description: "Returns the Channel associated with the hashedId.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channels" security: - BearerAuth: [] parameters: - name: "channelHashedId" in: "path" description: "The hashed ID of the channel." required: true schema: type: "string" description: "Hashed ID of the channel (e.g., \"4d23503f70\")" responses: "200": description: "Channel retrieval successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "The numeric id of the channel." created: type: "string" format: "date-time" description: "The date when the channel was originally created." description: type: "string" description: "The channel's description." hashed_id: type: "string" description: "A unique alphanumeric identifier for this channel." media_count: type: "integer" description: "The number of medias in the channel." live_stream_event_count: type: "integer" description: "The number of live stream events in the channel." name: type: "string" description: "The display name for the channel" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." auto_publish_enabled: type: - "boolean" - "null" description: "Whether episodes are automatically published when added to the channel." podcast_enabled: type: - "boolean" - "null" description: "Whether podcasting is enabled for the channel." custom_url: type: - "string" - "null" description: "The custom URL used when embedding the channel on your own site. Null if no custom URL is set." podcast_settings: type: "object" unevaluatedProperties: false properties: copyright: type: - "string" - "null" description: "The channel's copyright information, published in the RSS feed as ``." episode_format: oneOf: - type: "string" enum: - "episodic" - "episodic_with_seasons" - "serial" - type: "null" unevaluatedProperties: false description: "The format for episodes for the podcast channel, published in the RSS feed as ``. `episodic_with_seasons` is published as `episodic`." author_name: type: - "string" - "null" description: "The name of the author(s) for the channel, published in the RSS feed as ``." explicit: type: - "boolean" - "null" description: "Whether the channel contains explicit content, published in the RSS feed as ``." owner_name: type: - "string" - "null" description: "The podcast owner's name, published in the channel's public RSS feed as ``. Podcast directories use this as the show's administrative contact." owner_email: type: - "string" - "null" description: "The podcast owner's email address, published in the channel's public RSS feed as ``. Podcast directories such as Apple Podcasts require it for ownership verification." category1: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The primary category for the channel, published in the RSS feed as ``." category2: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The secondary category for the channel, published in the RSS feed as ``." category3: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The third category for the channel, published in the RSS feed as ``." language: type: - "string" - "null" enum: - "af" - "be" - "bg" - "ca" - "cs" - "da" - "de-at" - "de-ch" - "de-de" - "de-li" - "de-lu" - "de" - "el" - "en-au" - "en-bz" - "en-ca" - "en-gb" - "en-ie" - "en-jm" - "en-nz" - "en-ph" - "en-tt" - "en-us" - "en-za" - "en-zw" - "en" - "es-ar" - "es-bo" - "es-cl" - "es-co" - "es-cr" - "es-do" - "es-ec" - "es-es" - "es-gt" - "es-hn" - "es-mx" - "es-ni" - "es-pa" - "es-pe" - "es-pr" - "es-py" - "es-sv" - "es-uy" - "es-ve" - "es" - "et" - "eu" - "fi" - "fo" - "fr-be" - "fr-ca" - "fr-ch" - "fr-fr" - "fr-lu" - "fr-mc" - "fr" - "ga" - "gd" - "gl" - "haw" - "hr" - "hu" - "in" - "is" - "it-ch" - "it-it" - "it" - "ja" - "ko" - "mk" - "nl-be" - "nl-nl" - "nl" - "no" - "pl" - "pt-br" - "pt-pt" - "pt" - "ro-mo" - "ro-ro" - "ro" - "ru-mo" - "ru-ru" - "ru" - "sk" - "sl" - "sq" - "sr" - "sv-fi" - "sv-se" - "sv" - "tr" - "uk" - "zh-cn" - "zh-tw" description: "The ISO 639-1 language code for the channel, published in the RSS feed as ``." description: "Podcast specific settings for the channel. Only present when podcasting\nis enabled for the channel.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "created" - "description" - "hashed_id" - "media_count" - "name" - "updated" description: "A Channel lets you take a collection of video (or audio) and embed them\non your site, as well as distribute through podcasting.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channels" x-speakeasy-name-override: "get" put: summary: "Update Channel" description: "Updates a channel.\n" tags: - "Channels" security: - BearerAuth: [] parameters: - name: "channelHashedId" in: "path" description: "The hashed id of the Channel" required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: name: type: - "string" - "null" description: "The display name for the channel" description: type: - "string" - "null" description: "The channel's description." auto_publish_enabled: type: "boolean" description: "Whether the episodes are automatically published when added to the channel. Cannot be enabled if podcasting is on." podcast_enabled: type: "boolean" description: "Whether podcasting is enabled for this channel." custom_url: type: - "string" - "null" description: "Use if embedding the channel on your own site. The custom URL ensures links always direct to your page and not Wistia's." podcast_settings: type: "object" unevaluatedProperties: false properties: copyright: type: - "string" - "null" description: "The channel's copyright information, published in the RSS feed as ``." episode_format: oneOf: - type: "string" enum: - "episodic" - "episodic_with_seasons" - "serial" - type: "null" unevaluatedProperties: false description: "The format for episodes for the podcast channel, published in the RSS feed as ``. `episodic_with_seasons` is published as `episodic`." author_name: type: - "string" - "null" description: "The name of the author(s) for the channel, published in the RSS feed as ``." explicit: type: - "boolean" - "null" description: "Whether the channel contains explicit content, published in the RSS feed as ``." owner_name: type: - "string" - "null" description: "The podcast owner's name, published in the channel's public RSS feed as ``. Podcast directories use this as the show's administrative contact." owner_email: type: - "string" - "null" description: "The podcast owner's email address, published in the channel's public RSS feed as ``. Podcast directories such as Apple Podcasts require it for ownership verification." category1: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The primary category for the channel, published in the RSS feed as ``." category2: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The secondary category for the channel, published in the RSS feed as ``." category3: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The third category for the channel, published in the RSS feed as ``." language: type: - "string" - "null" enum: - "af" - "be" - "bg" - "ca" - "cs" - "da" - "de-at" - "de-ch" - "de-de" - "de-li" - "de-lu" - "de" - "el" - "en-au" - "en-bz" - "en-ca" - "en-gb" - "en-ie" - "en-jm" - "en-nz" - "en-ph" - "en-tt" - "en-us" - "en-za" - "en-zw" - "en" - "es-ar" - "es-bo" - "es-cl" - "es-co" - "es-cr" - "es-do" - "es-ec" - "es-es" - "es-gt" - "es-hn" - "es-mx" - "es-ni" - "es-pa" - "es-pe" - "es-pr" - "es-py" - "es-sv" - "es-uy" - "es-ve" - "es" - "et" - "eu" - "fi" - "fo" - "fr-be" - "fr-ca" - "fr-ch" - "fr-fr" - "fr-lu" - "fr-mc" - "fr" - "ga" - "gd" - "gl" - "haw" - "hr" - "hu" - "in" - "is" - "it-ch" - "it-it" - "it" - "ja" - "ko" - "mk" - "nl-be" - "nl-nl" - "nl" - "no" - "pl" - "pt-br" - "pt-pt" - "pt" - "ro-mo" - "ro-ro" - "ro" - "ru-mo" - "ru-ru" - "ru" - "sk" - "sl" - "sq" - "sr" - "sv-fi" - "sv-se" - "sv" - "tr" - "uk" - "zh-cn" - "zh-tw" description: "The ISO 639-1 language code for the channel, published in the RSS feed as ``." description: "Podcast specific settings for a channel. These settings only take effect if\npodcasting is enabled for the channel. These values appear in the channel's\npublicly accessible podcast RSS feed.\n" responses: "200": description: "Channel updated successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "The numeric id of the channel." created: type: "string" format: "date-time" description: "The date when the channel was originally created." description: type: "string" description: "The channel's description." hashed_id: type: "string" description: "A unique alphanumeric identifier for this channel." media_count: type: "integer" description: "The number of medias in the channel." live_stream_event_count: type: "integer" description: "The number of live stream events in the channel." name: type: "string" description: "The display name for the channel" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." auto_publish_enabled: type: - "boolean" - "null" description: "Whether episodes are automatically published when added to the channel." podcast_enabled: type: - "boolean" - "null" description: "Whether podcasting is enabled for the channel." custom_url: type: - "string" - "null" description: "The custom URL used when embedding the channel on your own site. Null if no custom URL is set." podcast_settings: type: "object" unevaluatedProperties: false properties: copyright: type: - "string" - "null" description: "The channel's copyright information, published in the RSS feed as ``." episode_format: oneOf: - type: "string" enum: - "episodic" - "episodic_with_seasons" - "serial" - type: "null" unevaluatedProperties: false description: "The format for episodes for the podcast channel, published in the RSS feed as ``. `episodic_with_seasons` is published as `episodic`." author_name: type: - "string" - "null" description: "The name of the author(s) for the channel, published in the RSS feed as ``." explicit: type: - "boolean" - "null" description: "Whether the channel contains explicit content, published in the RSS feed as ``." owner_name: type: - "string" - "null" description: "The podcast owner's name, published in the channel's public RSS feed as ``. Podcast directories use this as the show's administrative contact." owner_email: type: - "string" - "null" description: "The podcast owner's email address, published in the channel's public RSS feed as ``. Podcast directories such as Apple Podcasts require it for ownership verification." category1: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The primary category for the channel, published in the RSS feed as ``." category2: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The secondary category for the channel, published in the RSS feed as ``." category3: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The third category for the channel, published in the RSS feed as ``." language: type: - "string" - "null" enum: - "af" - "be" - "bg" - "ca" - "cs" - "da" - "de-at" - "de-ch" - "de-de" - "de-li" - "de-lu" - "de" - "el" - "en-au" - "en-bz" - "en-ca" - "en-gb" - "en-ie" - "en-jm" - "en-nz" - "en-ph" - "en-tt" - "en-us" - "en-za" - "en-zw" - "en" - "es-ar" - "es-bo" - "es-cl" - "es-co" - "es-cr" - "es-do" - "es-ec" - "es-es" - "es-gt" - "es-hn" - "es-mx" - "es-ni" - "es-pa" - "es-pe" - "es-pr" - "es-py" - "es-sv" - "es-uy" - "es-ve" - "es" - "et" - "eu" - "fi" - "fo" - "fr-be" - "fr-ca" - "fr-ch" - "fr-fr" - "fr-lu" - "fr-mc" - "fr" - "ga" - "gd" - "gl" - "haw" - "hr" - "hu" - "in" - "is" - "it-ch" - "it-it" - "it" - "ja" - "ko" - "mk" - "nl-be" - "nl-nl" - "nl" - "no" - "pl" - "pt-br" - "pt-pt" - "pt" - "ro-mo" - "ro-ro" - "ro" - "ru-mo" - "ru-ru" - "ru" - "sk" - "sl" - "sq" - "sr" - "sv-fi" - "sv-se" - "sv" - "tr" - "uk" - "zh-cn" - "zh-tw" description: "The ISO 639-1 language code for the channel, published in the RSS feed as ``." description: "Podcast specific settings for the channel. Only present when podcasting\nis enabled for the channel.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "created" - "description" - "hashed_id" - "media_count" - "name" - "updated" description: "A Channel lets you take a collection of video (or audio) and embed them\non your site, as well as distribute through podcasting.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channels" x-speakeasy-name-override: "update" delete: summary: "Delete Channel" description: "Deletes a channel.\n" tags: - "Channels" security: - BearerAuth: [] parameters: - name: "channelHashedId" in: "path" description: "The hashed id of the Channel" required: true schema: type: "string" responses: "200": description: "Channel deleted successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "The numeric id of the channel." created: type: "string" format: "date-time" description: "The date when the channel was originally created." description: type: "string" description: "The channel's description." hashed_id: type: "string" description: "A unique alphanumeric identifier for this channel." media_count: type: "integer" description: "The number of medias in the channel." live_stream_event_count: type: "integer" description: "The number of live stream events in the channel." name: type: "string" description: "The display name for the channel" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." auto_publish_enabled: type: - "boolean" - "null" description: "Whether episodes are automatically published when added to the channel." podcast_enabled: type: - "boolean" - "null" description: "Whether podcasting is enabled for the channel." custom_url: type: - "string" - "null" description: "The custom URL used when embedding the channel on your own site. Null if no custom URL is set." podcast_settings: type: "object" unevaluatedProperties: false properties: copyright: type: - "string" - "null" description: "The channel's copyright information, published in the RSS feed as ``." episode_format: oneOf: - type: "string" enum: - "episodic" - "episodic_with_seasons" - "serial" - type: "null" unevaluatedProperties: false description: "The format for episodes for the podcast channel, published in the RSS feed as ``. `episodic_with_seasons` is published as `episodic`." author_name: type: - "string" - "null" description: "The name of the author(s) for the channel, published in the RSS feed as ``." explicit: type: - "boolean" - "null" description: "Whether the channel contains explicit content, published in the RSS feed as ``." owner_name: type: - "string" - "null" description: "The podcast owner's name, published in the channel's public RSS feed as ``. Podcast directories use this as the show's administrative contact." owner_email: type: - "string" - "null" description: "The podcast owner's email address, published in the channel's public RSS feed as ``. Podcast directories such as Apple Podcasts require it for ownership verification." category1: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The primary category for the channel, published in the RSS feed as ``." category2: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The secondary category for the channel, published in the RSS feed as ``." category3: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The third category for the channel, published in the RSS feed as ``." language: type: - "string" - "null" enum: - "af" - "be" - "bg" - "ca" - "cs" - "da" - "de-at" - "de-ch" - "de-de" - "de-li" - "de-lu" - "de" - "el" - "en-au" - "en-bz" - "en-ca" - "en-gb" - "en-ie" - "en-jm" - "en-nz" - "en-ph" - "en-tt" - "en-us" - "en-za" - "en-zw" - "en" - "es-ar" - "es-bo" - "es-cl" - "es-co" - "es-cr" - "es-do" - "es-ec" - "es-es" - "es-gt" - "es-hn" - "es-mx" - "es-ni" - "es-pa" - "es-pe" - "es-pr" - "es-py" - "es-sv" - "es-uy" - "es-ve" - "es" - "et" - "eu" - "fi" - "fo" - "fr-be" - "fr-ca" - "fr-ch" - "fr-fr" - "fr-lu" - "fr-mc" - "fr" - "ga" - "gd" - "gl" - "haw" - "hr" - "hu" - "in" - "is" - "it-ch" - "it-it" - "it" - "ja" - "ko" - "mk" - "nl-be" - "nl-nl" - "nl" - "no" - "pl" - "pt-br" - "pt-pt" - "pt" - "ro-mo" - "ro-ro" - "ro" - "ru-mo" - "ru-ru" - "ru" - "sk" - "sl" - "sq" - "sr" - "sv-fi" - "sv-se" - "sv" - "tr" - "uk" - "zh-cn" - "zh-tw" description: "The ISO 639-1 language code for the channel, published in the RSS feed as ``." description: "Podcast specific settings for the channel. Only present when podcasting\nis enabled for the channel.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "created" - "description" - "hashed_id" - "media_count" - "name" - "updated" description: "A Channel lets you take a collection of video (or audio) and embed them\non your site, as well as distribute through podcasting.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channels" x-speakeasy-name-override: "delete" /channels/{channelHashedId}/channel_episodes/{channelEpisodeId}: get: summary: "Show Channel Episode" description: "Returns the Channel Episode associated with a channel hashed id\nand channel episode hashed id.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channel Episodes" security: - BearerAuth: [] parameters: - name: "channelHashedId" in: "path" description: "The hashed ID of the channel." required: true schema: type: "string" description: "Hashed ID of the channel (e.g., \"4d23503f70\")" - name: "channelEpisodeId" in: "path" description: "The hashed ID of the channel episode." required: true schema: type: "string" description: "Hashed ID of the channel episode (e.g., \"4d23503f70\")" responses: "200": description: "Channel Episode retrieval successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel episode." channel_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's channel." created: type: "string" format: "date-time" description: "The date when the channel episode was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: type: "string" description: "The channel episode's description or episode notes." summary: type: "string" examples: - "A short description." description: "A short summary of the episode that is displayed when space is limited." hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode." media_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's media." live_stream_event_hashed_id: type: - "string" - "null" description: "A unique alphanumeric identifier for the channel episode's live stream event, if any. Null when the episode is not linked to a live stream event." published: type: "boolean" description: "Whether the channel episode has been published or is still in draft form." publish_at: type: "string" examples: - "2024-12-31T23:59:59Z" format: "date-time" description: "The date and time when the episode is scheduled to be published in UTC timezone (only present when publish_status is 'scheduled')." title: type: - "string" - "null" description: "The title of the channel episode" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for the episode. Only present when podcasting\nis enabled for the channel.\n" required: - "channel_hashed_id" - "created" - "description" - "summary" - "hashed_id" - "media_hashed_id" - "published" - "title" - "updated" description: "A channel episode represents a media that has been added to a channel. Only published\nepisodes are displayed in a channel.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channelEpisodes" x-speakeasy-name-override: "get" /channels/{channelHashedId}/channel_episodes: get: summary: "List Channel Episodes by Channel" description: "Lists Channel Episodes belonging to the channel passed in the path.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channel Episodes" security: - BearerAuth: [] parameters: - name: "channelHashedId" in: "path" description: "The hashed ID of the channel to grab channel episodes from." required: true schema: type: "string" - name: "sort_by" in: "query" description: "Ordering. Default is ID ASC. When using cursor pagination (see cursor param),\nonly `id` and `created` are supported. All other sort_by options (`position`, `title`, `updated`, `published_at`)\nrequire offset pagination.\n" required: false schema: type: "string" enum: - "position" - "title" - "created" - "updated" - "published_at" - "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: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "media_id[]" in: "query" description: "Filter by media id. Accepts either the numeric id or the hashed id of a media." required: false schema: type: "array" items: type: "string" - name: "hashed_ids[]" in: "query" description: "Filter by hashed id" required: false schema: type: "array" items: type: "string" - name: "published" in: "query" description: "Filter by published status." required: false schema: type: "boolean" - name: "title" in: "query" description: "Filter by channel episode name/title." required: false schema: type: "string" responses: "200": description: "Channel Episodes retrieval successful" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel episode." channel_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's channel." created: type: "string" format: "date-time" description: "The date when the channel episode was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: type: "string" description: "The channel episode's description or episode notes." summary: type: "string" examples: - "A short description." description: "A short summary of the episode that is displayed when space is limited." hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode." media_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's media." live_stream_event_hashed_id: type: - "string" - "null" description: "A unique alphanumeric identifier for the channel episode's live stream event, if any. Null when the episode is not linked to a live stream event." published: type: "boolean" description: "Whether the channel episode has been published or is still in draft form." publish_at: type: "string" examples: - "2024-12-31T23:59:59Z" format: "date-time" description: "The date and time when the episode is scheduled to be published in UTC timezone (only present when publish_status is 'scheduled')." title: type: - "string" - "null" description: "The title of the channel episode" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for the episode. Only present when podcasting\nis enabled for the channel.\n" required: - "channel_hashed_id" - "created" - "description" - "summary" - "hashed_id" - "media_hashed_id" - "published" - "title" - "updated" description: "A channel episode represents a media that has been added to a channel. Only published\nepisodes are displayed in a channel.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channels.channelEpisodes" x-speakeasy-name-override: "list" x-cli-action-override: "list-by-channel" post: summary: "Create Channel Episode" description: "Creates a new channel episode in a channel.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channel Episodes" security: - BearerAuth: [] parameters: - name: "channelHashedId" in: "path" description: "The hashed ID of the channel to add the episode to." required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: media_id: type: "string" description: "The alphanumeric hashed ID of the media to be added as a channel episode." title: type: "string" examples: - "My New Episode" description: "The episode's title. If not provided, the channel episode uses the title of the media used to create it." description: type: "string" examples: - "My Episode Description." description: "The episode's description or episode notes." summary: type: "string" examples: - "A short description." description: "A short summary of the episode that is displayed when space is limited." publish_status: type: "string" enum: - "draft" - "published" - "scheduled" description: "The status of whether or not the episode has been published to your channel." publish_at: type: "string" examples: - "2024-12-31T23:59:59Z" format: "date-time" 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.'" podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for a channel episode. These settings only take effect\nif podcasting is enabled for the channel.\n" required: true responses: "200": description: "Channel Episode creation successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel episode." channel_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's channel." created: type: "string" format: "date-time" description: "The date when the channel episode was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: type: "string" description: "The channel episode's description or episode notes." summary: type: "string" examples: - "A short description." description: "A short summary of the episode that is displayed when space is limited." hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode." media_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's media." live_stream_event_hashed_id: type: - "string" - "null" description: "A unique alphanumeric identifier for the channel episode's live stream event, if any. Null when the episode is not linked to a live stream event." published: type: "boolean" description: "Whether the channel episode has been published or is still in draft form." publish_at: type: "string" examples: - "2024-12-31T23:59:59Z" format: "date-time" description: "The date and time when the episode is scheduled to be published in UTC timezone (only present when publish_status is 'scheduled')." title: type: - "string" - "null" description: "The title of the channel episode" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for the episode. Only present when podcasting\nis enabled for the channel.\n" required: - "channel_hashed_id" - "created" - "description" - "summary" - "hashed_id" - "media_hashed_id" - "published" - "title" - "updated" description: "A channel episode represents a media that has been added to a channel. Only published\nepisodes are displayed in a channel.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channelEpisodes" x-speakeasy-name-override: "create" /channel_episodes: get: summary: "List Channel Episodes" description: "Lists Channel Episodes belonging to an account. This endpoint can also be used to\ndo a batch fetch based off of the hashed id.\n\n## Requires api token with one of the following permissions\n```\nRead all folder and media data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channel Episodes" security: - BearerAuth: [] parameters: - name: "channel_id" in: "query" description: "The hashed ID of the channel to grab channel episodes from." schema: type: "string" - name: "sort_by" in: "query" description: "Ordering. Default is ID ASC. When using cursor pagination (see cursor param),\nonly `id` and `created` are supported. All other sort_by options (`position`, `title`, `updated`, `published_at`)\nrequire offset pagination.\n" required: false schema: type: "string" enum: - "position" - "title" - "created" - "updated" - "published_at" - "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: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "media_id[]" in: "query" description: "Filter by media id. Accepts either the numeric id or the hashed id of a media." required: false schema: type: "array" items: type: "string" - name: "hashed_ids[]" in: "query" description: "Filter by hashed id" required: false schema: type: "array" items: type: "string" - name: "published" in: "query" description: "Filter by published status." required: false schema: type: "boolean" - name: "title" in: "query" description: "Filter by channel episode name/title." required: false schema: type: "string" responses: "200": description: "Channel Episodes retrieval successful" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel episode." channel_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's channel." created: type: "string" format: "date-time" description: "The date when the channel episode was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: type: "string" description: "The channel episode's description or episode notes." summary: type: "string" examples: - "A short description." description: "A short summary of the episode that is displayed when space is limited." hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode." media_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's media." live_stream_event_hashed_id: type: - "string" - "null" description: "A unique alphanumeric identifier for the channel episode's live stream event, if any. Null when the episode is not linked to a live stream event." published: type: "boolean" description: "Whether the channel episode has been published or is still in draft form." publish_at: type: "string" examples: - "2024-12-31T23:59:59Z" format: "date-time" description: "The date and time when the episode is scheduled to be published in UTC timezone (only present when publish_status is 'scheduled')." title: type: - "string" - "null" description: "The title of the channel episode" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for the episode. Only present when podcasting\nis enabled for the channel.\n" required: - "channel_hashed_id" - "created" - "description" - "summary" - "hashed_id" - "media_hashed_id" - "published" - "title" - "updated" description: "A channel episode represents a media that has been added to a channel. Only published\nepisodes are displayed in a channel.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channelEpisodes" x-speakeasy-name-override: "list" /channel_episodes/{channelEpisodeHashedId}: put: summary: "Update Channel Episode" description: "Updates an existing channel episode in a channel.\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channel Episodes" security: - BearerAuth: [] parameters: - name: "channelEpisodeHashedId" in: "path" description: "The hashed id of the Channel Episode" required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: description: type: - "string" - "null" description: "The episode's description or episode notes." title: type: - "string" - "null" description: "The episode's title. If not provided, the channel episode uses the title of the media used to create it." media_hashed_id: type: "string" description: "The unique alphanumeric identifier for the media associated with this channel episode." live_stream_event_hashed_id: type: "string" description: "The unique alphanumeric identifier for the live stream event associated with this channel episode." summary: type: - "string" - "null" description: "A short summary of the episode that is displayed when space is limited." publish_status: type: "string" enum: - "draft" - "published" - "scheduled" description: "The status of whether or not the episode has been published to your channel." publish_at: type: "string" format: "date-time" description: "The date and time when the episode is scheduled to be published in UTC timezone." episode_notes: type: "string" description: "Additional notes for the episode." podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for a channel episode. These settings only take effect\nif podcasting is enabled for the channel.\n" responses: "200": description: "Channel Episode updated successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel episode." channel_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's channel." created: type: "string" format: "date-time" description: "The date when the channel episode was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: type: "string" description: "The channel episode's description or episode notes." summary: type: "string" examples: - "A short description." description: "A short summary of the episode that is displayed when space is limited." hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode." media_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's media." live_stream_event_hashed_id: type: - "string" - "null" description: "A unique alphanumeric identifier for the channel episode's live stream event, if any. Null when the episode is not linked to a live stream event." published: type: "boolean" description: "Whether the channel episode has been published or is still in draft form." publish_at: type: "string" examples: - "2024-12-31T23:59:59Z" format: "date-time" description: "The date and time when the episode is scheduled to be published in UTC timezone (only present when publish_status is 'scheduled')." title: type: - "string" - "null" description: "The title of the channel episode" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for the episode. Only present when podcasting\nis enabled for the channel.\n" required: - "channel_hashed_id" - "created" - "description" - "summary" - "hashed_id" - "media_hashed_id" - "published" - "title" - "updated" description: "A channel episode represents a media that has been added to a channel. Only published\nepisodes are displayed in a channel.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channelEpisodes" x-speakeasy-name-override: "update" delete: summary: "Delete Channel Episode" description: "Deletes an existing channel episode in a channel.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channel Episodes" security: - BearerAuth: [] parameters: - name: "channelEpisodeHashedId" in: "path" description: "The hashed id of the Channel Episode" required: true schema: type: "string" responses: "200": description: "Channel Episode deleted successful" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel episode." channel_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's channel." created: type: "string" format: "date-time" description: "The date when the channel episode was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: type: "string" description: "The channel episode's description or episode notes." summary: type: "string" examples: - "A short description." description: "A short summary of the episode that is displayed when space is limited." hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode." media_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's media." live_stream_event_hashed_id: type: - "string" - "null" description: "A unique alphanumeric identifier for the channel episode's live stream event, if any. Null when the episode is not linked to a live stream event." published: type: "boolean" description: "Whether the channel episode has been published or is still in draft form." publish_at: type: "string" examples: - "2024-12-31T23:59:59Z" format: "date-time" description: "The date and time when the episode is scheduled to be published in UTC timezone (only present when publish_status is 'scheduled')." title: type: - "string" - "null" description: "The title of the channel episode" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for the episode. Only present when podcasting\nis enabled for the channel.\n" required: - "channel_hashed_id" - "created" - "description" - "summary" - "hashed_id" - "media_hashed_id" - "published" - "title" - "updated" description: "A channel episode represents a media that has been added to a channel. Only published\nepisodes are displayed in a channel.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channelEpisodes" x-speakeasy-name-override: "delete" /channel_episodes/{channelEpisodeHashedId}/publish: put: summary: "Publish Channel Episode" description: "Publishes an existing channel episode in a channel.\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channel Episodes" security: - BearerAuth: [] parameters: - name: "channelEpisodeHashedId" in: "path" description: "The hashed id of the Channel Episode" required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: publish_at: type: "string" format: "date-time" description: "The date and time when the episode is scheduled to be published in UTC timezone." responses: "200": description: "Channel Episode published successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel episode." channel_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's channel." created: type: "string" format: "date-time" description: "The date when the channel episode was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: type: "string" description: "The channel episode's description or episode notes." summary: type: "string" examples: - "A short description." description: "A short summary of the episode that is displayed when space is limited." hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode." media_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's media." live_stream_event_hashed_id: type: - "string" - "null" description: "A unique alphanumeric identifier for the channel episode's live stream event, if any. Null when the episode is not linked to a live stream event." published: type: "boolean" description: "Whether the channel episode has been published or is still in draft form." publish_at: type: "string" examples: - "2024-12-31T23:59:59Z" format: "date-time" description: "The date and time when the episode is scheduled to be published in UTC timezone (only present when publish_status is 'scheduled')." title: type: - "string" - "null" description: "The title of the channel episode" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for the episode. Only present when podcasting\nis enabled for the channel.\n" required: - "channel_hashed_id" - "created" - "description" - "summary" - "hashed_id" - "media_hashed_id" - "published" - "title" - "updated" description: "A channel episode represents a media that has been added to a channel. Only published\nepisodes are displayed in a channel.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channelEpisodes" x-speakeasy-name-override: "publish" /channel_episodes/{channelEpisodeHashedId}/unpublish: put: summary: "Un-publish Channel Episode" description: "Un-publishes an existing channel episode in a channel.\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channel Episodes" security: - BearerAuth: [] parameters: - name: "channelEpisodeHashedId" in: "path" description: "The hashed id of the Channel Episode" required: true schema: type: "string" responses: "200": description: "Channel Episode unpublished successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel episode." channel_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's channel." created: type: "string" format: "date-time" description: "The date when the channel episode was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: type: "string" description: "The channel episode's description or episode notes." summary: type: "string" examples: - "A short description." description: "A short summary of the episode that is displayed when space is limited." hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode." media_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's media." live_stream_event_hashed_id: type: - "string" - "null" description: "A unique alphanumeric identifier for the channel episode's live stream event, if any. Null when the episode is not linked to a live stream event." published: type: "boolean" description: "Whether the channel episode has been published or is still in draft form." publish_at: type: "string" examples: - "2024-12-31T23:59:59Z" format: "date-time" description: "The date and time when the episode is scheduled to be published in UTC timezone (only present when publish_status is 'scheduled')." title: type: - "string" - "null" description: "The title of the channel episode" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for the episode. Only present when podcasting\nis enabled for the channel.\n" required: - "channel_hashed_id" - "created" - "description" - "summary" - "hashed_id" - "media_hashed_id" - "published" - "title" - "updated" description: "A channel episode represents a media that has been added to a channel. Only published\nepisodes are displayed in a channel.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channelEpisodes" x-speakeasy-name-override: "unpublish" /channels/{channelHashedId}/collaborators: get: summary: "List Channel Collaborators" description: "Lists the collaborators (contacts and contact groups) that have been granted access to a channel.\n\nResults are scoped to what the authenticated user is allowed to see: account owners and managers see all collaborators, channel admins see all collaborators on their channels, and everyone else sees only the roles that grant them access.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channel Collaborators" security: - BearerAuth: [] parameters: - name: "channelHashedId" in: "path" description: "Channel Hashed ID" required: true schema: type: "string" description: "Hashed ID of the channel (e.g., \"abc123\")" - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "sort_by" in: "query" description: "Ordering. When using cursor pagination (see cursor param),\nonly `id` is supported.\n" required: false schema: type: "string" enum: - "created" - "updated" - "id" default: "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 default: 1 responses: "200": description: "Successfully retrieved list of channel collaborators" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 description: "The unique identifier of the channel role." role: type: "string" examples: - "admin" enum: - "admin" - "viewer" description: "The role of the collaborator on the channel." created_at: type: "string" examples: - "2024-01-15T10:30:00Z" format: "date-time" description: "The timestamp when this collaborator was added." share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" description: "Either \"Contact\" or \"ContactGroup\"" email: type: "string" examples: - "jim@wistia.com" format: "email" description: "Email address (only present for Contact type)." required: - "id" - "name" - "type" description: "The contact or contact group being granted access." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "role" - "created_at" - "share" description: "A channel collaborator is a contact or contact group that has been granted access to a channel.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channelCollaborators" x-speakeasy-name-override: "list" post: summary: "Create Channel Collaborator" description: "Invites a collaborator to a channel by specifying their email address and role. Creates a new contact if one doesn't exist with that email.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channel Collaborators" security: - BearerAuth: [] parameters: - name: "channelHashedId" in: "path" description: "Hashed ID of the channel" required: true schema: type: "string" description: "Hashed ID of the channel (e.g., \"abc123\")" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: email: type: "string" examples: - "jim@wistia.com" format: "email" description: "Email address of the contact to invite. Creates a new contact if one doesn't exist." role: type: "string" examples: - "admin" enum: - "admin" - "viewer" description: "The role to grant the collaborator." required: - "email" - "role" description: "Request body for creating a channel collaborator." required: true responses: "201": description: "Channel collaborator created successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 description: "The unique identifier of the channel role." role: type: "string" examples: - "admin" enum: - "admin" - "viewer" description: "The role of the collaborator on the channel." created_at: type: "string" examples: - "2024-01-15T10:30:00Z" format: "date-time" description: "The timestamp when this collaborator was added." share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" description: "Either \"Contact\" or \"ContactGroup\"" email: type: "string" examples: - "jim@wistia.com" format: "email" description: "Email address (only present for Contact type)." required: - "id" - "name" - "type" description: "The contact or contact group being granted access." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "role" - "created_at" - "share" description: "A channel collaborator is a contact or contact group that has been granted access to a channel.\n" "400": description: "Bad request" content: application/json: schema: type: "object" examples: - errors: - "Email is already a collaborator on this channel" unevaluatedProperties: false properties: errors: type: "array" items: type: "string" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channelCollaborators" x-speakeasy-name-override: "create" /channels/{channelHashedId}/collaborators/{id}: delete: summary: "Delete Channel Collaborator" description: "Removes a collaborator's access to a channel.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Channel Collaborators" security: - BearerAuth: [] parameters: - name: "channelHashedId" in: "path" description: "Channel Hashed ID" required: true schema: type: "string" description: "Hashed ID of the channel (e.g., \"abc123\")" - name: "id" in: "path" description: "Collaborator ID" required: true schema: type: "integer" description: "ID of the channel collaborator to delete" responses: "200": description: "Channel collaborator deleted successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 description: "The unique identifier of the channel role." role: type: "string" examples: - "admin" enum: - "admin" - "viewer" description: "The role of the collaborator on the channel." created_at: type: "string" examples: - "2024-01-15T10:30:00Z" format: "date-time" description: "The timestamp when this collaborator was added." share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" description: "Either \"Contact\" or \"ContactGroup\"" email: type: "string" examples: - "jim@wistia.com" format: "email" description: "Email address (only present for Contact type)." required: - "id" - "name" - "type" description: "The contact or contact group being granted access." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "role" - "created_at" - "share" description: "A channel collaborator is a contact or contact group that has been granted access to a channel.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "channelCollaborators" x-speakeasy-name-override: "delete" /webinars: get: summary: "List Webinars" description: "Lists webinars belonging to the account. This endpoint can also be used to\ndo a batch fetch based off of the hashed id.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Webinars" security: - BearerAuth: [] parameters: - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "sort_by" in: "query" description: "Field to sort by. When using cursor pagination (see cursor param),\nonly `id` and `scheduled_for` are supported. All other sort_by options\n(`title`, `created`, `updated`) require offset pagination.\n" required: false schema: type: "string" enum: - "scheduled_for" - "title" - "created" - "updated" - "id" - name: "sort_direction" in: "query" description: "Sort direction (0 = desc, 1 = asc; default is 1)" required: false schema: type: "integer" enum: - 0 - 1 - name: "hashed_ids[]" in: "query" description: "Filter by specific webinars IDs" required: false schema: type: "array" items: type: "string" - name: "started" in: "query" description: "Filter by whether the webinar has started. Use \"true\" for webinars that have started, \"false\" for webinars that have not started yet" required: false schema: type: "string" enum: - "true" - "false" responses: "200": description: "Successful response with a list of webinars" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar" hashed_id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar. Identical to `id`, named to match every other Wistia resource." title: type: "string" examples: - "Wellness Session: Coping with Outie Memories" description: "The title of the webinar" description: type: - "string" - "null" examples: - "A comprehensive session on managing work-life balance" description: "The description of the webinar" scheduled_for: type: - "string" - "null" examples: - "2024-03-20T15:30:00-05:00" format: "date-time" description: "The scheduled start time in W3C format with timezone" event_duration: type: - "integer" - "null" examples: - 60 description: "Duration of the webinar in minutes" time_zone: type: "string" examples: - "America/New_York" description: "The IANA time zone identifier the webinar is scheduled in" lifecycle_status: type: "string" examples: - "ready" enum: - "pending" - "ready" - "starting" - "started" - "ended" - "vod_ready" - "failed" description: "The current lifecycle status of the webinar. This is a read-only, system-managed field that Wistia updates as the event moves through its lifecycle; it cannot be set or changed via the API." readOnly: true registration_status: type: "string" examples: - "published" description: "Registration status of the event" created_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was created (UTC)" updated_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was last updated (UTC)" audience_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456" description: "Link for the audience to join the event" host_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair" description: "Link for the host to manage the event" panelist_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair/a1b2c3d4-e5f6-7890-abcd-ef1234567890" description: "Link for panelists to join the event" thumbnail_url: type: - "string" - "null" examples: - "https://embed-ssl.wistia.com/deliveries/abc123def456.jpg" description: "URL of the webinar's custom thumbnail image, or null if no custom thumbnail has been set" folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" - type: "null" unevaluatedProperties: false description: "The folder (project) this webinar belongs to" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "hashed_id" - "title" - "time_zone" - "lifecycle_status" - "registration_status" - "created_at" - "updated_at" - "audience_link" - "host_link" - "panelist_link" description: "A webinar is an event which allows you to stream a video\nto multiple participants. See our [Webinars Guide](https://support.wistia.com/en/articles/8288501-getting-started-with-webinars)\nfor more info.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "403": description: "Webinar feature not available" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "webinars" x-speakeasy-name-override: "list" post: summary: "Create Webinar" description: "Creates a new webinar.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Webinars" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: title: type: "string" examples: - "Wellness Session: Coping with Outie Memories" description: "The title of the webinar" description: type: "string" examples: - "A comprehensive session on managing work-life balance" description: "The description of the webinar" scheduled_for: type: "string" examples: - "2024-03-20T15:30:00Z" format: "date-time" description: "The scheduled start time as a UTC formatted ISO 8601 string (offset `Z` or `+00:00`)." event_duration: type: "integer" examples: - 60 minimum: 15 description: "Duration of the event in minutes (minimum 15)" time_zone: type: "string" examples: - "America/New_York" description: "The IANA time zone identifier the webinar is scheduled in." folder_id: type: "string" examples: - "abc123def456" description: "Hashed ID of the folder to place this webinar in. Defaults to the account's default webinar folder if not provided." required: - "title" - "scheduled_for" - "event_duration" - "time_zone" required: true responses: "201": description: "Webinar created successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar" hashed_id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar. Identical to `id`, named to match every other Wistia resource." title: type: "string" examples: - "Wellness Session: Coping with Outie Memories" description: "The title of the webinar" description: type: - "string" - "null" examples: - "A comprehensive session on managing work-life balance" description: "The description of the webinar" scheduled_for: type: - "string" - "null" examples: - "2024-03-20T15:30:00-05:00" format: "date-time" description: "The scheduled start time in W3C format with timezone" event_duration: type: - "integer" - "null" examples: - 60 description: "Duration of the webinar in minutes" time_zone: type: "string" examples: - "America/New_York" description: "The IANA time zone identifier the webinar is scheduled in" lifecycle_status: type: "string" examples: - "ready" enum: - "pending" - "ready" - "starting" - "started" - "ended" - "vod_ready" - "failed" description: "The current lifecycle status of the webinar. This is a read-only, system-managed field that Wistia updates as the event moves through its lifecycle; it cannot be set or changed via the API." readOnly: true registration_status: type: "string" examples: - "published" description: "Registration status of the event" created_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was created (UTC)" updated_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was last updated (UTC)" audience_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456" description: "Link for the audience to join the event" host_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair" description: "Link for the host to manage the event" panelist_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair/a1b2c3d4-e5f6-7890-abcd-ef1234567890" description: "Link for panelists to join the event" thumbnail_url: type: - "string" - "null" examples: - "https://embed-ssl.wistia.com/deliveries/abc123def456.jpg" description: "URL of the webinar's custom thumbnail image, or null if no custom thumbnail has been set" folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" - type: "null" unevaluatedProperties: false description: "The folder (project) this webinar belongs to" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "hashed_id" - "title" - "time_zone" - "lifecycle_status" - "registration_status" - "created_at" - "updated_at" - "audience_link" - "host_link" - "panelist_link" description: "A webinar is an event which allows you to stream a video\nto multiple participants. See our [Webinars Guide](https://support.wistia.com/en/articles/8288501-getting-started-with-webinars)\nfor more info.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "403": description: "Webinar feature not available" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "422": description: "Validation errors" content: application/json: schema: type: "object" unevaluatedProperties: false properties: errors: type: "array" examples: - - "Title is required" - "Event duration must be at least 15 minutes" items: type: "string" "429": description: "Rate limit exceeded" content: text/plain: schema: type: "string" examples: - "Rate limit exceeded" "500": description: "Internal server error during webinar creation" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "Error message describing the server-side failure." errors: type: "array" examples: - - "An error occurred while creating the webinar. Please try again." items: type: "string" x-speakeasy-group: "webinars" x-speakeasy-name-override: "create" /webinars/{id}: get: summary: "Show Webinar" description: "Returns the webinar associated with the hashed id.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Webinars" security: - BearerAuth: [] parameters: - name: "id" in: "path" description: "The hashed ID of the webinar" required: true schema: type: "string" responses: "200": description: "Successful response with the webinar details" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar" hashed_id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar. Identical to `id`, named to match every other Wistia resource." title: type: "string" examples: - "Wellness Session: Coping with Outie Memories" description: "The title of the webinar" description: type: - "string" - "null" examples: - "A comprehensive session on managing work-life balance" description: "The description of the webinar" scheduled_for: type: - "string" - "null" examples: - "2024-03-20T15:30:00-05:00" format: "date-time" description: "The scheduled start time in W3C format with timezone" event_duration: type: - "integer" - "null" examples: - 60 description: "Duration of the webinar in minutes" time_zone: type: "string" examples: - "America/New_York" description: "The IANA time zone identifier the webinar is scheduled in" lifecycle_status: type: "string" examples: - "ready" enum: - "pending" - "ready" - "starting" - "started" - "ended" - "vod_ready" - "failed" description: "The current lifecycle status of the webinar. This is a read-only, system-managed field that Wistia updates as the event moves through its lifecycle; it cannot be set or changed via the API." readOnly: true registration_status: type: "string" examples: - "published" description: "Registration status of the event" created_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was created (UTC)" updated_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was last updated (UTC)" audience_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456" description: "Link for the audience to join the event" host_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair" description: "Link for the host to manage the event" panelist_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair/a1b2c3d4-e5f6-7890-abcd-ef1234567890" description: "Link for panelists to join the event" thumbnail_url: type: - "string" - "null" examples: - "https://embed-ssl.wistia.com/deliveries/abc123def456.jpg" description: "URL of the webinar's custom thumbnail image, or null if no custom thumbnail has been set" folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" - type: "null" unevaluatedProperties: false description: "The folder (project) this webinar belongs to" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "hashed_id" - "title" - "time_zone" - "lifecycle_status" - "registration_status" - "created_at" - "updated_at" - "audience_link" - "host_link" - "panelist_link" description: "A webinar is an event which allows you to stream a video\nto multiple participants. See our [Webinars Guide](https://support.wistia.com/en/articles/8288501-getting-started-with-webinars)\nfor more info.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "403": description: "Webinar feature not available" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Webinar not found" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "webinars" x-speakeasy-name-override: "get" put: summary: "Update Webinar" description: "Updates an existing webinar.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Webinars" security: - BearerAuth: [] parameters: - name: "id" in: "path" description: "The hashed ID of the webinar" required: true schema: type: "string" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: webinar: type: "object" unevaluatedProperties: false properties: title: type: "string" examples: - "Updated Webinar Title" description: "The title of the webinar" description: type: "string" examples: - "Updated webinar description" description: "The description of the webinar" scheduled_for: type: "string" examples: - "2024-03-20T15:30:00Z" format: "date-time" description: "The scheduled start time as a UTC formatted ISO 8601 string (offset `Z` or `+00:00`)." event_duration: type: "integer" examples: - 90 minimum: 15 description: "Duration of the webinar in minutes (minimum 15)" time_zone: type: "string" examples: - "America/New_York" description: "The IANA time zone identifier the webinar is scheduled in." folder_id: type: "string" examples: - "abc123def456" description: "Hashed ID of the folder to move this webinar to. Can only be changed before the webinar has started." required: true responses: "200": description: "Webinar updated successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar" hashed_id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar. Identical to `id`, named to match every other Wistia resource." title: type: "string" examples: - "Wellness Session: Coping with Outie Memories" description: "The title of the webinar" description: type: - "string" - "null" examples: - "A comprehensive session on managing work-life balance" description: "The description of the webinar" scheduled_for: type: - "string" - "null" examples: - "2024-03-20T15:30:00-05:00" format: "date-time" description: "The scheduled start time in W3C format with timezone" event_duration: type: - "integer" - "null" examples: - 60 description: "Duration of the webinar in minutes" time_zone: type: "string" examples: - "America/New_York" description: "The IANA time zone identifier the webinar is scheduled in" lifecycle_status: type: "string" examples: - "ready" enum: - "pending" - "ready" - "starting" - "started" - "ended" - "vod_ready" - "failed" description: "The current lifecycle status of the webinar. This is a read-only, system-managed field that Wistia updates as the event moves through its lifecycle; it cannot be set or changed via the API." readOnly: true registration_status: type: "string" examples: - "published" description: "Registration status of the event" created_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was created (UTC)" updated_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was last updated (UTC)" audience_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456" description: "Link for the audience to join the event" host_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair" description: "Link for the host to manage the event" panelist_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair/a1b2c3d4-e5f6-7890-abcd-ef1234567890" description: "Link for panelists to join the event" thumbnail_url: type: - "string" - "null" examples: - "https://embed-ssl.wistia.com/deliveries/abc123def456.jpg" description: "URL of the webinar's custom thumbnail image, or null if no custom thumbnail has been set" folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" - type: "null" unevaluatedProperties: false description: "The folder (project) this webinar belongs to" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "hashed_id" - "title" - "time_zone" - "lifecycle_status" - "registration_status" - "created_at" - "updated_at" - "audience_link" - "host_link" - "panelist_link" description: "A webinar is an event which allows you to stream a video\nto multiple participants. See our [Webinars Guide](https://support.wistia.com/en/articles/8288501-getting-started-with-webinars)\nfor more info.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "403": description: "Webinar feature not available" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Webinar not found" "422": description: "Validation errors" content: application/json: schema: type: "object" unevaluatedProperties: false properties: errors: type: "array" examples: - - "Title is required" - "Event duration must be at least 15 minutes" items: type: "string" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "webinars" x-speakeasy-name-override: "update" delete: summary: "Delete Webinar" description: "Deletes an existing webinar.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Webinars" security: - BearerAuth: [] parameters: - name: "id" in: "path" description: "The hashed ID of the webinar" required: true schema: type: "string" responses: "200": description: "Webinar deleted successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar" hashed_id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar. Identical to `id`, named to match every other Wistia resource." title: type: "string" examples: - "Wellness Session: Coping with Outie Memories" description: "The title of the webinar" description: type: - "string" - "null" examples: - "A comprehensive session on managing work-life balance" description: "The description of the webinar" scheduled_for: type: - "string" - "null" examples: - "2024-03-20T15:30:00-05:00" format: "date-time" description: "The scheduled start time in W3C format with timezone" event_duration: type: - "integer" - "null" examples: - 60 description: "Duration of the webinar in minutes" time_zone: type: "string" examples: - "America/New_York" description: "The IANA time zone identifier the webinar is scheduled in" lifecycle_status: type: "string" examples: - "ready" enum: - "pending" - "ready" - "starting" - "started" - "ended" - "vod_ready" - "failed" description: "The current lifecycle status of the webinar. This is a read-only, system-managed field that Wistia updates as the event moves through its lifecycle; it cannot be set or changed via the API." readOnly: true registration_status: type: "string" examples: - "published" description: "Registration status of the event" created_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was created (UTC)" updated_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was last updated (UTC)" audience_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456" description: "Link for the audience to join the event" host_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair" description: "Link for the host to manage the event" panelist_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair/a1b2c3d4-e5f6-7890-abcd-ef1234567890" description: "Link for panelists to join the event" thumbnail_url: type: - "string" - "null" examples: - "https://embed-ssl.wistia.com/deliveries/abc123def456.jpg" description: "URL of the webinar's custom thumbnail image, or null if no custom thumbnail has been set" folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" - type: "null" unevaluatedProperties: false description: "The folder (project) this webinar belongs to" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "hashed_id" - "title" - "time_zone" - "lifecycle_status" - "registration_status" - "created_at" - "updated_at" - "audience_link" - "host_link" - "panelist_link" description: "A webinar is an event which allows you to stream a video\nto multiple participants. See our [Webinars Guide](https://support.wistia.com/en/articles/8288501-getting-started-with-webinars)\nfor more info.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "403": description: "Webinar feature not available" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Webinar not found" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "webinars" x-speakeasy-name-override: "delete" /webinars/{webinarId}/registrations: get: summary: "List Webinar Registrations" description: "Retrieve a paginated list of registrations for a webinar. Returns contact\ninformation, attendance status, engagement metrics, and attribution data\nfor each registrant.\n\nPagination uses cursor-based pagination with a `page_info` object in the\nresponse rather than per-record cursors. Use `page_info.end_cursor` as\nthe `cursor` parameter to fetch the next page.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Webinar Registrations" security: - BearerAuth: [] parameters: - name: "webinarId" in: "path" description: "Hashed ID of the webinar." required: true schema: type: "string" description: "Hashed ID of the webinar (e.g., \"abc123xyz\")" - name: "per_page" in: "query" description: "Number of results to return per page (max 100)." required: false schema: type: "integer" maximum: 100 minimum: 1 default: 100 - name: "cursor" in: "query" description: "Cursor for pagination. Use the value from the previous response's `page_info.end_cursor` or `page_info.start_cursor`." required: false schema: type: "string" - name: "sort_direction" in: "query" description: "Sort direction (0 = desc/previous page, 1 = asc/next page; default is 1)" required: false schema: type: "integer" enum: - 0 - 1 default: 1 - name: "attendance" in: "query" description: "Filter registrations by attendance status." required: false schema: type: "string" enum: - "all" - "attendees" - "non_attendees" default: "all" - name: "restriction" in: "query" description: "Filter registrations by restriction status." required: false schema: type: "string" enum: - "all" - "restricted" - "allowed" default: "all" - name: "emails[]" in: "query" description: "Filter registrations by email addresses." required: false schema: type: "array" items: type: "string" format: "email" responses: "200": description: "Successful response with a paginated list of registrations." content: application/json: schema: type: "object" unevaluatedProperties: false properties: registrations: type: "array" items: type: "object" unevaluatedProperties: false properties: visitor_key: type: - "string" - "null" description: "Unique visitor key for the registrant." example: "iv_abc123" email: type: - "string" - "null" description: "Registrant's email address." example: "john@example.com" first_name: type: - "string" - "null" description: "Registrant's first name." example: "John" last_name: type: - "string" - "null" description: "Registrant's last name." example: "Doe" phone_number: type: - "string" - "null" description: "Registrant's phone number." company: type: - "string" - "null" description: "Registrant's company name." job_title: type: - "string" - "null" description: "Registrant's job title." country: type: - "string" - "null" description: "Registrant's country." registered_at: type: - "string" - "null" format: "date-time" description: "When the person registered." example: "2026-01-15T10:00:00Z" attended_at: type: - "string" - "null" format: "date-time" description: "When the person first attended the webinar." example: "2026-01-15T11:00:00Z" restriction_status: type: - "string" - "null" enum: - "restricted" - "allowed" - null description: "Whether the registrant is restricted or allowed." origin_method: type: - "string" - "null" description: "How the registrant was added (e.g., \"form\", \"email\")." example: "form" form_field_data: type: "array" items: type: "object" unevaluatedProperties: false properties: value: type: "string" description: "The registrant's response." label: type: "string" description: "The form field label." description: "Custom form field responses submitted by the registrant." utm_campaign: type: - "string" - "null" description: "UTM campaign parameter captured at registration." utm_source: type: - "string" - "null" description: "UTM source parameter captured at registration." utm_medium: type: - "string" - "null" description: "UTM medium parameter captured at registration." utm_content: type: - "string" - "null" description: "UTM content parameter captured at registration." utm_term: type: - "string" - "null" description: "UTM term parameter captured at registration." referrer_domain: type: - "string" - "null" description: "HTTP referrer domain at time of registration." ip_region: type: - "string" - "null" description: "Region derived from IP address." ip_country: type: - "string" - "null" description: "Country derived from IP address." ip_city: type: - "string" - "null" description: "City derived from IP address." engagement_rate: type: - "number" - "null" format: "float" description: "Engagement rate between 0.0 and 1.0." example: 0.85 focused_rate: type: - "number" - "null" format: "float" description: "Focused engagement rate between 0.0 and 1.0." played_time: type: - "integer" - "null" description: "Total seconds of video watched." focused_played_time: type: - "integer" - "null" description: "Total seconds watched in focused state." chat_count: type: - "integer" - "null" description: "Number of chat messages sent." chats: type: "array" items: type: "object" unevaluatedProperties: false properties: rounded_player_position: type: "integer" description: "Video position in seconds (rounded)." chats: type: "array" items: type: "string" description: "Chat messages sent by the registrant." qa_questions: type: "array" items: type: "object" unevaluatedProperties: false properties: rounded_player_position: type: "integer" description: "Video position in seconds (rounded)." qa_questions: type: "array" items: type: "object" unevaluatedProperties: false properties: question_text: type: "string" description: "Q&A questions asked by the registrant." qa_answers: type: - "integer" - "null" description: "Number of Q&A answers." poll_responses: type: "array" items: type: "object" unevaluatedProperties: false properties: poll_question_text: type: - "string" - "null" poll_option_text: type: - "string" - "null" description: "Poll responses submitted by the registrant." poll_responses_count: type: - "integer" - "null" description: "Number of poll responses submitted." annotation_click_count: type: - "integer" - "null" description: "Total number of annotation clicks." attendee_histogram: type: - "array" - "null" items: type: - "integer" - "null" description: "Per-bucket attendance data for this registrant." focused_attendee_histogram: type: - "array" - "null" items: type: - "integer" - "null" description: "Per-bucket focused attendance data for this registrant." page_info: type: "object" unevaluatedProperties: false properties: has_next_page: type: "boolean" description: "Whether there are more results after this page." has_previous_page: type: "boolean" description: "Whether there are results before this page." end_cursor: type: - "string" - "null" description: "Cursor to use for fetching the next page." start_cursor: type: - "string" - "null" description: "Cursor to use for fetching the previous page." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "403": description: "Webinar feature not available" content: application/json: schema: type: "object" unevaluatedProperties: false 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" post: summary: "Create Webinar Registration" description: "Register a person for a webinar by providing their email, first name, and last name.\n\nThis endpoint generates a unique visitor key and returns a personalized webinar URL for the registrant.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Webinar Registrations" security: - BearerAuth: [] parameters: - name: "webinarId" in: "path" description: "Hashed ID of the webinar" required: true schema: type: "string" description: "Hashed ID of the webinar (e.g., \"abc123xyz\")" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false 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" required: - "email" - "first_name" - "last_name" required: true responses: "201": description: "Registration created successfully" content: application/json: schema: type: "object" unevaluatedProperties: false 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 webinar" example: "https://wistia.com/webinars/registration?vk=iv_1234567890&uid=john.doe@example.com" required: - "visitor_key" - "personalized_event_url" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "422": description: "Unprocessable entity, the request parameters were invalid." content: application/json: schema: type: "object" unevaluatedProperties: false properties: errors: type: "object" unevaluatedProperties: false additionalProperties: type: "array" items: type: "string" description: "Object containing validation errors grouped by field name. Each field contains an array of error messages." example: email: - "is invalid" - "can't be blank" first_name: - "can't be blank" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "webinarRegistrations" x-speakeasy-name-override: "create" /webinars/{webinarId}/collaborators: get: summary: "List Webinar Collaborators" description: "Lists the collaborators (contacts and contact groups) that have been granted producer access to a webinar.\n\nResults are scoped to what the authenticated user is allowed to see: account owners, managers, and the webinar's producers see all collaborators; everyone else sees an empty list.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Webinar Collaborators" security: - BearerAuth: [] parameters: - name: "webinarId" in: "path" description: "Webinar Hashed ID" required: true schema: type: "string" description: "Hashed ID of the webinar (e.g., \"abc123\")" - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "sort_by" in: "query" description: "Ordering. When using cursor pagination (see cursor param),\nonly `id` is supported.\n" required: false schema: type: "string" enum: - "created" - "updated" - "id" default: "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 default: 1 responses: "200": description: "Successfully retrieved list of webinar collaborators" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 description: "The unique identifier of the webinar role." role: type: "string" examples: - "admin" enum: - "admin" description: "The role of the collaborator on the webinar. Only \"admin\" is supported." created_at: type: "string" examples: - "2024-01-15T10:30:00Z" format: "date-time" description: "The timestamp when this collaborator was added." share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" description: "Either \"Contact\" or \"ContactGroup\"" email: type: "string" examples: - "jim@wistia.com" format: "email" description: "Email address (only present for Contact type)." required: - "id" - "name" - "type" description: "The contact or contact group being granted access." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "role" - "created_at" - "share" description: "A webinar collaborator is a contact or contact group that has been granted producer access to a webinar.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "webinarCollaborators" x-speakeasy-name-override: "list" post: summary: "Create Webinar Collaborator" description: "Invites a collaborator (producer) to a webinar by specifying their email address. Creates a new contact if one doesn't exist with that email. Note that viewers cannot be webinar collaborators.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Webinar Collaborators" security: - BearerAuth: [] parameters: - name: "webinarId" in: "path" description: "Hashed ID of the webinar" required: true schema: type: "string" description: "Hashed ID of the webinar (e.g., \"abc123\")" requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: email: type: "string" examples: - "jim@wistia.com" format: "email" description: "Email address of the contact to invite. Creates a new contact if one doesn't exist. Note that viewers cannot be webinar collaborators." required: - "email" description: "Request body for creating a webinar collaborator." required: true responses: "201": description: "Webinar collaborator created successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 description: "The unique identifier of the webinar role." role: type: "string" examples: - "admin" enum: - "admin" description: "The role of the collaborator on the webinar. Only \"admin\" is supported." created_at: type: "string" examples: - "2024-01-15T10:30:00Z" format: "date-time" description: "The timestamp when this collaborator was added." share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" description: "Either \"Contact\" or \"ContactGroup\"" email: type: "string" examples: - "jim@wistia.com" format: "email" description: "Email address (only present for Contact type)." required: - "id" - "name" - "type" description: "The contact or contact group being granted access." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "role" - "created_at" - "share" description: "A webinar collaborator is a contact or contact group that has been granted producer access to a webinar.\n" "400": description: "Bad request" content: application/json: schema: type: "object" examples: - errors: - "Email is already a collaborator on this webinar" unevaluatedProperties: false properties: errors: type: "array" items: type: "string" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "webinarCollaborators" x-speakeasy-name-override: "create" /webinars/{webinarId}/collaborators/{id}: delete: summary: "Delete Webinar Collaborator" description: "Removes a collaborator's producer access to a webinar.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Webinar Collaborators" security: - BearerAuth: [] parameters: - name: "webinarId" in: "path" description: "Webinar Hashed ID" required: true schema: type: "string" description: "Hashed ID of the webinar (e.g., \"abc123\")" - name: "id" in: "path" description: "Collaborator ID" required: true schema: type: "integer" description: "ID of the webinar collaborator to delete" responses: "200": description: "Webinar collaborator deleted successfully" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 description: "The unique identifier of the webinar role." role: type: "string" examples: - "admin" enum: - "admin" description: "The role of the collaborator on the webinar. Only \"admin\" is supported." created_at: type: "string" examples: - "2024-01-15T10:30:00Z" format: "date-time" description: "The timestamp when this collaborator was added." share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" description: "Either \"Contact\" or \"ContactGroup\"" email: type: "string" examples: - "jim@wistia.com" format: "email" description: "Email address (only present for Contact type)." required: - "id" - "name" - "type" description: "The contact or contact group being granted access." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "role" - "created_at" - "share" description: "A webinar collaborator is a contact or contact group that has been granted producer access to a webinar.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "webinarCollaborators" x-speakeasy-name-override: "delete" /account: get: operationId: "getAccountDetails" summary: "Get Current Account" description: "Retrieves a summary of the Wistia account including account name, description, URL and counts of records.\n\n## Requires api token with one of the following permissions\n```\n(any scope allowed)\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Account" security: - BearerAuth: [] responses: "200": description: "Successful response" content: application/json: schema: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "Numeric id of the account" name: type: "string" description: "Account name" url: type: "string" description: "Account’s main Wistia URL (e.g. http://brendan.wistia.com)" media_count: type: "integer" description: "The total number of medias in this account" video_limit: type: - "integer" - "null" description: "The account's video limit" folder_count: type: "integer" description: "The total number of folders in this account" channel_count: type: "integer" description: "The total number of channels in this account" required: - "id" - "name" - "url" - "media_count" - "video_limit" - "folder_count" - "channel_count" description: "An account represents a customer at Wistia. Each account can own media, folders\nchannels, etc.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "account" x-speakeasy-name-override: "get" /account_usage: get: operationId: "getAccountUsage" summary: "Get Account Usage" description: "Retrieves plan, usage, and limit information for the current account.\n\nThe response includes plan tier, upload eligibility, and links to billing pages.\nUsage and limit details (media counts, storage, seats, bandwidth) are only visible\nto account owners and managers — other contacts receive `null` for the `limits` field.\n\n## Requires api token with one of the following permissions\n```\n(any scope allowed)\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Account" security: - BearerAuth: [] responses: "200": description: "Successful response" content: application/json: schema: type: "object" unevaluatedProperties: false properties: plan: type: "object" unevaluatedProperties: false properties: tier: type: "string" description: "The plan tier identifier. Common values include `free`, `starter`, `plus`,\n`pro`, `advanced`, `business`, `enterprise`. Legacy plans may use other\ntier names. Empty string if the account has no plan.\n" name: type: "string" description: "Human-readable plan name" is_standard: type: "boolean" description: "Whether this is a 2026 storage-based plan (true) or a legacy media-count plan (false)" is_trial: type: "boolean" description: "Whether the account is currently on a trial" trial_expires_at: type: - "string" - "null" description: "ISO 8601 timestamp when the trial expires, or null if not trialing" required: - "tier" - "name" - "is_standard" - "is_trial" - "trial_expires_at" description: "The account's current plan information" can_upload: type: "boolean" description: "Whether the next upload will succeed. False when an inflexible media or storage limit has been reached." upload_blocked_reason: type: - "string" - "null" description: "The reason uploads are blocked, or null if uploads are allowed.\nKnown values: `reached_media_limit`, `reached_storage_limit`.\n" limits: type: - "object" - "null" unevaluatedProperties: false properties: primary_resource: type: "string" enum: - "storage" - "media" description: "The primary resource type for this plan's limits — \"storage\" for standard plans, \"media\" for legacy plans" media: type: "object" unevaluatedProperties: false properties: count: type: "integer" description: "Current number of media in the account" flexible_limit: type: - "integer" - "null" description: "Soft media limit (overage billed). Null if no soft limit." inflexible_limit: type: - "integer" - "null" description: "Hard media limit (uploads blocked). Null if no hard limit." required: - "count" - "flexible_limit" - "inflexible_limit" description: "Media count and limits" storage: type: "object" unevaluatedProperties: false properties: used_bytes: type: "integer" description: "Current storage usage in bytes" flexible_limit_bytes: type: - "integer" - "null" description: "Included storage limit in bytes. Null if unlimited." inflexible_limit_bytes: type: - "integer" - "null" description: "Hard storage cap in bytes. Null if no hard cap." required: - "used_bytes" - "flexible_limit_bytes" - "inflexible_limit_bytes" description: "Storage usage and limits in bytes (1 GB = 1,000,000,000 bytes)" users: type: "object" unevaluatedProperties: false properties: billable_count: type: "integer" description: "Current number of billable users (seats). For agency accounts this aggregates\ndistinct users across the parent and team accounts — the count billing compares\nagainst `flexible_limit`. Excludes viewers.\n" account_billable_count: type: "integer" description: "Billable users in this account only, the count compared against `inflexible_limit`\nwhen enforcing the hard seat limit. Matches `billable_count` for non-agency accounts.\nExcludes viewers.\n" viewers_count: type: "integer" description: "Current number of viewer contacts, which are non-billable and don't count toward seat limits." flexible_limit: type: - "integer" - "null" description: "Included seats on flexible plans (additional seats billed as overage). Null if no soft limit." inflexible_limit: type: - "integer" - "null" description: "Hard seat limit (adding users blocked at the limit). Null if no hard limit." required: - "billable_count" - "account_billable_count" - "viewers_count" - "flexible_limit" - "inflexible_limit" description: "Seat (user) usage and limits. Viewers are non-billable and excluded from the billable counts." bandwidth: type: "object" unevaluatedProperties: false properties: used_bytes: type: "integer" description: "Bandwidth used in the current billing period, in bytes" limit_bytes: type: - "integer" - "null" description: "Bandwidth limit for the billing period in bytes. Null if unlimited." period: type: "string" enum: - "monthly" - "annual" description: "Whether the bandwidth allowance is tracked monthly or annually" resets_at: type: - "string" - "null" description: "ISO 8601 timestamp when the bandwidth period resets, or null if unknown" required: - "used_bytes" - "limit_bytes" - "period" - "resets_at" description: "Bandwidth usage and limits for the current billing period, in bytes (1 GB = 1,000,000,000 bytes)" required: - "primary_resource" - "media" - "storage" - "users" - "bandwidth" description: "Usage and limit data. Null when the authenticated contact does not have\nbilling visibility (i.e. is not an account owner or manager).\n" links: type: "object" unevaluatedProperties: false properties: plans_url: type: "string" description: "URL to the account's plans page. Always present." usage_url: type: - "string" - "null" description: "URL to the account's usage page. Null for non-owner/manager contacts." billing_url: type: - "string" - "null" description: "URL to the account's billing page. Null for non-owner/manager contacts." required: - "plans_url" - "usage_url" - "billing_url" description: "URLs for plan, usage, and billing pages" role: type: - "string" - "null" description: "The authenticated contact's role on the account. One of `owner`, `manager`,\n`standard_user`, `limited_user`, `viewer`. Null when the token isn't\nassociated with a specific contact.\n" verified_domain: type: "boolean" description: "Whether the account has at least one verified business domain (i.e. an\nowner whose email domain is verified and business-classified). Independent\nof plan tier.\n" can_invite_teammates: type: "boolean" description: "Whether the authenticated contact can invite additional teammates via the\nmodern contacts endpoint. True when the contact is an owner or manager and\nthe account has a verified business domain.\n" required: - "plan" - "can_upload" - "upload_blocked_reason" - "limits" - "links" - "role" - "verified_domain" - "can_invite_teammates" description: "Account usage and plan information, including storage, media, seat, and bandwidth limits.\nFields under `limits` are only visible to account owners and managers.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "account" x-speakeasy-name-override: "getUsage" /credits/balance: get: operationId: "getCreditBalance" summary: "Get Credit Balance" description: "Retrieves the current account's available credit balance and expected next recurring credit grant time.\n\nThe balance is a near-real-time hint and can lag one in-flight metered operation. A `402`\nresponse from an operation is authoritative when deciding whether more credits are required.\nNegative ledger balances are returned as `0` available credits.\n\n`next_grant_at` comes from the account's billing schedule, not an existing grant's expiration.\nIt is null when no scheduled grant can be determined. Processing may occur later, and other\ngrants may arrive sooner.\n\n## Requires api token with one of the following permissions\n```\n(any scope allowed)\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. The account is always derived\nfrom the authenticated token; this endpoint does not accept an account identifier.\n" tags: - "Account" security: - BearerAuth: [] responses: "200": description: "Successful response" content: application/json: schema: type: "object" unevaluatedProperties: false properties: balance: type: "string" examples: - "1250.0" pattern: "^\\d+(?:\\.\\d+)?$" description: "Available Credits as an exact, nonnegative decimal string." next_grant_at: type: - "string" - "null" format: "date-time" description: "Expected next recurring Credits grant boundary from the account's billing schedule, as an ISO 8601 timestamp. Null when no scheduled grant can be determined. Processing may occur later, and other grants may arrive sooner." required: - "balance" - "next_grant_at" description: "The current account's available Credits balance and expected next recurring grant date." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "account" x-speakeasy-name-override: "getCreditBalance" /brand_preload: get: operationId: "getBrandPreload" summary: "Get Brand Preload" description: "Retrieves Brandfetch-derived brand info for the current account's contact\ndomain, plus a boolean indicating whether the account already has any brand\nkits configured. Used by Glass onboarding to preload the brand kit for new\nsignups on business-email domains.\n\nReturns `brandfetch_brand` with nil `primary_color`/`logo`/`domain` for\nfree-mail domains, Wistia's own domain, when the Brandfetch feature\nflag is off, or when Brandfetch has no data — the caller silently\nskips the preload in every such case. The object itself is always\npresent; only its fields go nil.\n\n## Requires api token with one of the following permissions\n```\n(any scope allowed)\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Account" security: - BearerAuth: [] responses: "200": description: "Successful response" content: application/json: schema: type: "object" unevaluatedProperties: false properties: has_brand_kits: type: "boolean" description: "True iff the account has one or more configured brand kits. Glass uses\nthis to skip the onboarding preload step for accounts that already have\na brand kit set up.\n" brandfetch_brand: type: "object" unevaluatedProperties: false properties: domain: type: - "string" - "null" primary_color: type: - "string" - "null" description: "Hex color string (e.g. \"#3366FF\") or null if Brandfetch returned no accent/primary color." logo: type: - "string" - "null" description: "Absolute URL to the dark-theme logo, or null if none is available." font: type: - "string" - "null" colors: type: "array" items: type: "string" logos: type: "array" items: type: "object" unevaluatedProperties: false properties: theme: type: - "string" - "null" description: "\"dark\" or \"light\"." type: type: - "string" - "null" description: "e.g. \"logo\", \"icon\", \"symbol\"." tags: type: "array" items: type: "string" formats: type: "array" items: type: "object" unevaluatedProperties: false properties: src: type: "string" format: type: "string" description: "File extension (e.g. \"png\", \"svg\")." background: type: - "string" - "null" height: type: - "integer" - "null" width: type: - "integer" - "null" size: type: - "integer" - "null" description: "Full Brandfetch logos list — Glass consumes only `logo` (the primary), but callers that want theme variants can walk this." status: type: - "integer" - "null" description: "HTTP status Brandfetch responded with (204 when empty)." required: - "domain" - "primary_color" - "logo" description: "Brandfetch response for the contact's email domain. Fields are nil for\nfree-mail domains, Wistia's own domain, and accounts where Brandfetch\nhas no data — the caller silently skips the preload in every such case.\n" required: - "has_brand_kits" - "brandfetch_brand" description: "Brandfetch-derived brand info for the current account's contact domain,\nplus whether the account has any brand kits configured.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "account" x-speakeasy-name-override: "getBrandPreload" put: operationId: "updateBrandPreload" summary: "Update Brand Preload" description: "Persists the account's default page logo (by Bakery hashed_id) and\ndefault player color. Both fields are optional independently — omit a\nfield to leave that account setting untouched. Passing an empty string\nfor `selected_logo_hashed_id` clears the logo.\n\nRequires the OAuth contact to be an owner or manager of the account\n(or a Wistia admin) — mirrors the auth check on the underlying\n`updateWtwBrandKitAccountSettings` GraphQL mutation.\n\nDeliberately narrower than the mutation: this endpoint does not\ncreate/update BrandKits or set body font family. Glass's onboarding\ncustomize step writes only these two fields; broader brand-kit\nediting continues to happen through the WTW web UI + GraphQL.\n\n## Requires api token with one of the following permissions\n```\n(any scope allowed)\n```\n" tags: - "Account" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: selected_player_color: type: "string" pattern: "^(#?[0-9a-fA-F]{6})?$" description: "Hex color string (e.g. \"#3366FF\") for the account's default player\ncolor — 6 hex digits, with or without the leading `#`. Omit or send\nan empty string to leave the current color untouched (there is no\nclear operation — color always has a value). Malformed values are\nrejected at the API boundary; without this check, the model's\nsanitize step would return nil and silently reset the account color\nto the global default.\n" selected_logo_hashed_id: type: "string" description: "Bakery hashed_id of an uploaded logo image, which will become the\naccount's default page logo. Omit to leave the current logo\nuntouched. Pass an empty string to clear the logo.\n" description: "Payload for `PUT /brand_preload`. Both fields are optional independently;\nomit either to leave that account setting untouched. Sending `null` for\neither field is not accepted — use omission for \"leave unchanged\" and an\nempty string for the documented clear operation on logo.\n" responses: "200": description: "Successful response — returns the same shape as GET /brand_preload" content: application/json: schema: type: "object" unevaluatedProperties: false properties: has_brand_kits: type: "boolean" description: "True iff the account has one or more configured brand kits. Glass uses\nthis to skip the onboarding preload step for accounts that already have\na brand kit set up.\n" brandfetch_brand: type: "object" unevaluatedProperties: false properties: domain: type: - "string" - "null" primary_color: type: - "string" - "null" description: "Hex color string (e.g. \"#3366FF\") or null if Brandfetch returned no accent/primary color." logo: type: - "string" - "null" description: "Absolute URL to the dark-theme logo, or null if none is available." font: type: - "string" - "null" colors: type: "array" items: type: "string" logos: type: "array" items: type: "object" unevaluatedProperties: false properties: theme: type: - "string" - "null" description: "\"dark\" or \"light\"." type: type: - "string" - "null" description: "e.g. \"logo\", \"icon\", \"symbol\"." tags: type: "array" items: type: "string" formats: type: "array" items: type: "object" unevaluatedProperties: false properties: src: type: "string" format: type: "string" description: "File extension (e.g. \"png\", \"svg\")." background: type: - "string" - "null" height: type: - "integer" - "null" width: type: - "integer" - "null" size: type: - "integer" - "null" description: "Full Brandfetch logos list — Glass consumes only `logo` (the primary), but callers that want theme variants can walk this." status: type: - "integer" - "null" description: "HTTP status Brandfetch responded with (204 when empty)." required: - "domain" - "primary_color" - "logo" description: "Brandfetch response for the contact's email domain. Fields are nil for\nfree-mail domains, Wistia's own domain, and accounts where Brandfetch\nhas no data — the caller silently skips the preload in every such case.\n" required: - "has_brand_kits" - "brandfetch_brand" description: "Brandfetch-derived brand info for the current account's contact domain,\nplus whether the account has any brand kits configured.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "account" x-speakeasy-name-override: "updateBrandPreload" /brand_kit_colors: get: operationId: "getBrandKitColors" summary: "Get Brand Kit Colors" description: "Retrieves the current account's brand colors for the Wistia desktop\napp's background picker.\n\n`colors` lists solid colors: every brand kit's color tokens (the colors\nthe web editor offers as \"Brand colors\"), then each brand's primary and\npage background color when it is solid, default brand first. Values are\nsix-digit hex strings, and a repeated color is listed once. Tokens whose\nvalue isn't a hex color are left out. An account without a brand kit\ngets its player color in place of the kit, which is what its default\nbrand kit would hold.\n\n`brand_gradients` lists each brand's primary and page background color\nthat is set to a gradient, as color stops sorted by position, default\nbrand first. Stops whose color isn't a hex color are left out, and a\ngradient with fewer than two hex stops left isn't listed.\n\n## Requires api token with one of the following permissions\n```\n(any scope allowed)\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Account" security: - BearerAuth: [] responses: "200": description: "Successful response" content: application/json: schema: type: "object" unevaluatedProperties: false properties: colors: type: "array" items: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The brand kit token's name, or the brand and field (e.g. \"Acme primary color\")." value: type: "string" description: "Six-digit hex color with a leading \"#\" (e.g. \"#2949E5\")." required: - "name" - "value" description: "Solid brand colors: every brand kit's color tokens (newest kit\nfirst, tokens in the order they were added), then each brand's\nprimary and page background color when it is a solid color\n(default brand first). A color already listed isn't repeated.\nEmpty when the account has none.\n" brand_gradients: type: "array" items: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The brand and field the gradient comes from (e.g. \"Acme primary color\")." stops: type: "array" items: type: "object" unevaluatedProperties: false properties: color: type: "string" description: "Six-digit hex color with a leading \"#\"." position: type: "number" description: "Where the stop sits along the gradient, as stored on the brand." required: - "color" - "position" description: "The gradient's color stops, sorted by position." required: - "name" - "stops" description: "Each brand's primary and page background color that is set to a\ngradient, default brand first. Stops whose color isn't a hex color\nare left out, and a gradient with fewer than two hex stops left\nisn't listed. Empty when none are gradients.\n" required: - "colors" - "brand_gradients" description: "The current account's brand colors, from its brand kits and its brands." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "account" x-speakeasy-name-override: "getBrandKitColors" /contacts: post: summary: "Invite Contacts" description: "Invites one or more people to the account by email. Accepts a\ncomma/whitespace/newline-separated list; each entry becomes a new contact\nif one does not already exist for that email.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n" tags: - "Contacts" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: contacts: type: "string" examples: - "alice@example.com, bob@example.com" description: "A comma-, whitespace-, or newline-separated list of email addresses to\ninvite to the account. Each entry becomes a new contact if one does not\nalready exist for that email.\n" required: - "contacts" required: true responses: "201": description: "Contacts created" content: application/json: schema: type: "object" unevaluatedProperties: false properties: contacts: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" email: type: "string" role: type: "string" required: - "id" - "email" - "role" description: "The contacts that were created (or already existed) for the requested emails." required: - "contacts" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "422": description: "Unprocessable entity, the request parameters were invalid." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "A single error message describing what went wrong." errors: type: "array" examples: - - "Title is required" - "Event duration must be at least 15 minutes" items: type: "string" description: "Array of error messages describing what went wrong." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "contacts" x-speakeasy-name-override: "create" /contact/dismiss_desktop_install_prompt: post: summary: "Dismiss Desktop Install Prompt" description: "Marks the current contact's macOS install-prompt modal as dismissed.\nCalled by the SPA when a teammate invited via the Wistia desktop app\ncloses the \"Wistia is even better on your Mac\" modal — the modal\nnever shows again for that contact.\n\nIdempotent: a repeat call returns the timestamp of the first dismissal.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n" tags: - "Contacts" security: - BearerAuth: [] responses: "200": description: "Dismissal recorded" content: application/json: schema: type: "object" unevaluatedProperties: false properties: dismissed_at: type: "string" examples: - "2026-09-02T14:00:00Z" description: "ISO-8601 timestamp of the first dismissal." required: - "dismissed_at" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "contact" x-speakeasy-name-override: "dismissDesktopInstallPrompt" /account/trials: post: summary: "Start Account Trial" description: "Starts a business-tier trial on the current account. The plan tier is\nhardcoded — the only caller is the Wistia desktop app's \"Invite and\nstart trial\" onboarding CTA.\n\nRequires the current contact to be authorized to start the trial via\nthe account's AccountPolicy — otherwise returns 403.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n" tags: - "Account Trials" security: - BearerAuth: [] responses: "201": description: "Trial started" content: application/json: schema: type: "object" unevaluatedProperties: false properties: trial_expires_at: type: - "string" - "null" format: "date-time" description: "ISO 8601 timestamp when the trial expires. Null if the trial has no end date." plan_tier: type: - "string" - "null" description: "The plan tier now active on the account." is_trial: type: "boolean" description: "Always true on success." required: - "trial_expires_at" - "plan_tier" - "is_trial" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "accountTrials" x-speakeasy-name-override: "create" /token: get: operationId: "getTokenDetails" summary: "Get Current Token" description: "Retrieves a summary of the token used to make the API request. This endpoint can primarily be used to\ndebug permission issues with the API.\n" tags: - "Account" security: - BearerAuth: [] responses: "200": description: "Successful response" content: application/json: schema: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "permanent" - "expiring" - "oauth" description: "The type of token used." application: oneOf: - type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The name of the application." scopes: type: "array" items: type: "string" description: "The scopes of the application. These may be different than the token scope." required: - "name" - "scopes" - type: "null" unevaluatedProperties: false description: "The application used by the token. Will be null if the token isn't an oauth token." scopes: type: "array" items: type: "string" description: "The scopes of the token." name: type: - "string" - "null" description: "The name of the token. This only applies to permanent tokens." expires_at: type: - "string" - "null" format: "iso8601" description: "When the token expires. A null token means it never expires." required: - "type" - "application" - "scopes" - "name" description: "The token used to make the API request. This is primarily for debugging\npurposes. Sensitive data such as the token value is excluded.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "account" x-speakeasy-name-override: "getTokenDetails" x-cli-action-override: "token" /search: get: summary: "Search" description: "Searches across folders, subfolders, medias, channels, channel episodes, and webinars.\nAlso searches through video transcripts, so media results may include transcript matches with\ntimestamps when the query matches spoken content.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Search" security: - BearerAuth: [] parameters: - name: "q" in: "query" description: "The search query string" required: true schema: type: "string" example: "screencast" - name: "tags[]" in: "query" description: "Filter results by one or more tag names. When multiple tags are provided, results matching any of the specified tags are returned (OR logic)." required: false style: "form" explode: true schema: type: "array" items: type: "string" - name: "resource_type[]" in: "query" description: "Filter results by one or more resource types." required: false style: "form" explode: true schema: type: "array" items: type: "string" enum: - "media" - "folder" - "subfolder" - "channel" - "channel_episode" - "webinar" - name: "custom_metadata" in: "query" description: "Filter media by custom metadata field value, keyed by field key:\n`custom_metadata[]=`. Only available on accounts with access to\ncustom metadata (other accounts receive a 403 when this parameter is passed).\nCustom metadata only exists on media, so results contain media only and\n`resource_type` must include `media`. Use an empty `q` to match all media.\n\nThe value shape depends on the field's type:\n- Select, text, url, and email fields take a value\n (`custom_metadata[region]=emea`) or an array of values matched as OR\n (`custom_metadata[region][]=emea&custom_metadata[region][]=amer`). Select fields\n match on option keys.\n- Boolean fields take `true` or `false`.\n- Number, money, and time fields take an exact number (`custom_metadata[year]=2026`)\n or a range object (`custom_metadata[budget][min]=100&custom_metadata[budget][max]=500`;\n either bound may be omitted).\n- Date and datetime fields take a `YYYY-MM-DD` date matching that UTC day, or a\n range object with ISO8601 bounds (`custom_metadata[shoot_date][after]=2026-01-01`,\n `custom_metadata[shoot_date][before]=2026-02-01T00:00:00Z`). A bare-date bound\n covers its whole UTC day: `after` starts at the day's beginning and `before`\n runs through the day's end.\n- Contact fields (`contact_ref`, `contact_multi_ref`) only support the presence\n filter below; a value filter on them is rejected.\n- Any field type accepts a presence filter: `custom_metadata[region][exists]=false`\n returns media missing the field entirely (useful for metadata coverage audits),\n and `exists=true` returns media that have any value for it.\n\nUnknown or archived field keys return a 400, as do select option keys that don't\nexist on the field. The primary match set holds at most 100 media with no\npagination; a non-blank `q` can add up to 100 more transcript-only matches, and\nan empty-`q` audit returns at most 100. Narrow large audits (e.g. with\n`created_after`/`created_before`) to complete full coverage.\n" required: false style: "deepObject" explode: true schema: type: "object" unevaluatedProperties: false additionalProperties: anyOf: - type: "string" - type: "array" items: type: "string" - type: "object" unevaluatedProperties: false properties: min: type: "string" max: type: "string" after: type: "string" before: type: "string" exists: type: "string" enum: - "true" - "false" unevaluatedProperties: false - name: "include" in: "query" description: "Pass `custom_metadata` to include each media result's custom metadata field values (same shape as the Get Custom Metadata Field Values endpoint). Only available on accounts with access to custom metadata (other accounts receive a 403 when this parameter is passed)." required: false schema: type: "string" enum: - "custom_metadata" - name: "created_after" in: "query" description: "Filter results created on or after this datetime. Must be a valid ISO8601 timestamp in UTC (ending with 'Z')." required: false schema: type: "string" format: "date-time" - name: "created_before" in: "query" description: "Filter results created on or before this datetime. Must be a valid ISO8601 timestamp in UTC (ending with 'Z')." required: false schema: type: "string" format: "date-time" responses: "200": description: "Search results" content: application/json: schema: type: "object" unevaluatedProperties: false properties: data: type: "object" unevaluatedProperties: false properties: folders: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." description: type: - "string" - "null" examples: - "About My Folder" description: "The folder’s description." media_count: type: "integer" examples: - 2 description: "The number of different medias that have been uploaded to the folder." medias: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A URL for fetching all child records of the parent record." description: "A link to where you can fetch the medias for this folder." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the folder was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date that the folder was last updated." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." public: type: "boolean" examples: - false description: "A boolean indicating whether the folder is available for public (anonymous) viewing." public_id: type: - "string" - "null" examples: - "4bD" description: "If the folder is public, this field contains a string representing the ID used for referencing the folder in public URLs." anonymous_can_upload: type: "boolean" examples: - false anonymous_can_download: type: "boolean" examples: - false kind: type: "string" examples: - "shared" enum: - "library" - "shared" - "account" description: "Indicates the folder's access scope, relative to the requesting user. One of:\n- `library`: a library the requester owns. Libraries can still be shared with specific contacts or contact groups; the only restriction is that they cannot be shared with the whole account.\n- `shared`: a folder the requester has access to via a Contact or ContactGroup sharing — this includes both shared folders and another contact's library that the requester has been granted access to.\n- `account`: a folder shared with the whole account (everyone in the company can see it).\n" personal_library: type: "boolean" examples: - false description: "Whether this folder is someone's personal library (\"My Library\"). Unlike `kind`, this is a property of the folder itself and does not depend on who is requesting — it is `true` for a personal library even when that library has been shared with you (where `kind` would read `shared`). Use this, not `kind`, to tell whether a folder is a personal library.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "name" - "media_count" - "created" - "updated" - "hashed_id" - "public" - "public_id" - "kind" - "personal_library" - "medias" description: "A folder (previously called a project) is a container in which to organize media into. It can be\nused to set permissions that apply to all the media in the folder as well as\norganizing media into subfolders (previously called media groups).\n" subfolders: type: "array" items: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." unevaluatedProperties: false medias: type: "array" items: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" - type: "object" properties: folder_hashed_id: type: - "string" - "null" examples: - "4d23503f70" description: "The hashed ID of the folder this media belongs to" transcript_matches: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" description: "The matched transcript text with context" example: "today we'll talk about product demo" start_time_seconds: type: "number" description: "Start time of the match in seconds" example: 3 start_time_formatted: type: "string" description: "Human-readable start time (e.g., \"0:03\" or \"1:23:45\")" example: "0:03" thumbnail_url: type: - "string" - "null" description: "Thumbnail URL at the match timestamp" example: "https://example.com/thumb.jpg?video_still_time=3.0" required: - "text" - "start_time_seconds" - "start_time_formatted" - "thumbnail_url" description: "Array of transcript matches with timestamps" custom_metadata_field_values: type: "array" items: type: "object" unevaluatedProperties: false properties: key: type: "string" examples: - "client" description: "The field definition's immutable identifier. Use this (not the label) to address the field this value belongs to." field_type: type: "string" examples: - "single_select" enum: - "text" - "number" - "date" - "boolean" - "single_select" - "short_text" - "url" - "email" - "money" - "time" - "datetime" - "multi_select" - "contact_ref" - "contact_multi_ref" description: "The field definition's data type, which determines the shape of `value`." value: type: - "string" - "number" - "boolean" - "array" - "object" - "null" examples: - "high" unevaluatedProperties: false items: oneOf: - type: "string" - type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "contact" - "contact_group" id: type: "string" unevaluatedProperties: false properties: type: type: "string" enum: - "contact" - "contact_group" id: type: "string" description: "The resolved, typed value for this field on this media. The type follows `field_type`:\na string for text-like types (text, short_text, url, email, money, time, datetime),\na number for `number`, an ISO 8601 date string for `date`, a boolean for `boolean`,\nthe selected option's key (a string) for `single_select`, an array of the\nselected options' keys for `multi_select`, a contact reference object\n`{\"type\": \"contact\" | \"contact_group\", \"id\": \"\"}` for `contact_ref`,\nand an array of contact reference objects for `contact_multi_ref`. References to\ndeleted contacts or contact groups are omitted. Null when unset.\n" updated_at: type: "string" examples: - "2026-07-17T21:47:00Z" format: "date-time" description: "The date that this value was last updated." last_write: type: - "object" - "null" unevaluatedProperties: false properties: at: type: "string" examples: - "2026-08-25T17:55:00Z" format: "date-time" description: "When the write happened." source: type: "string" examples: - "api" enum: - "ui" - "api" - "mcp" description: "The surface the write came through." actor: type: - "object" - "null" unevaluatedProperties: false properties: type: type: "string" enum: - "contact" id: type: "string" examples: - "abc123de" description: "The contact's hashed id." name: type: "string" examples: - "Jane Doe" description: "The contact's display name." required: - "type" - "id" - "name" description: "The contact who made the write, or null when the write had no acting contact." required: - "at" - "source" - "actor" description: "The most recent recorded write to this value on this media, with who made it and through which surface. Null when no write has been recorded; system-initiated writes (e.g. default-value backfills) are not recorded.\n" description: "The media's custom metadata field values, present only when the request passed `include=custom_metadata`. Same shape as the Get Custom Metadata Field Values endpoint." required: - "folder_hashed_id" - "transcript_matches" unevaluatedProperties: false channels: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel within the system." hashed_id: type: "string" description: "A unique alphanumeric identifier for this channel." name: type: "string" description: "The display name for the channel." description: type: "string" description: "The channel's description." media_count: type: "integer" description: "The number of medias in the channel." created: type: "string" format: "date-time" description: "The date when the channel was originally created." updated: type: "string" format: "date-time" description: "The date when the channel was last updated." live_stream_event_count: type: "integer" description: "The number of live stream events in the channel." auto_publish_enabled: type: - "boolean" - "null" description: "Whether episodes are automatically published when added to the channel." podcast_enabled: type: - "boolean" - "null" description: "Whether podcasting is enabled for the channel." custom_url: type: - "string" - "null" description: "The custom URL used when embedding the channel on your own site. Null if no custom URL is set." required: - "id" - "hashed_id" - "name" - "description" - "media_count" - "created" - "updated" channel_episodes: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel episode within the system." hashed_id: type: "string" description: "A unique alphanumeric identifier for this channel episode." title: type: - "string" - "null" description: "The title of the channel episode." description: type: "string" description: "The episode notes for the channel episode." summary: type: "string" description: "The description of the channel episode." channel_hashed_id: type: - "string" - "null" description: "The hashed ID of the channel this episode belongs to." media_hashed_id: type: - "string" - "null" description: "The hashed ID of the media associated with this channel episode." live_stream_event_hashed_id: type: - "string" - "null" description: "The hashed ID of the live stream event associated with this channel episode, if any." published: type: "boolean" description: "Whether the channel episode is published." created: type: "string" format: "date-time" description: "The date when the channel episode was originally created." updated: type: "string" format: "date-time" description: "The date when the channel episode was last updated." publish_at: type: - "string" - "null" format: "date-time" description: "The scheduled publish date (only present if scheduled)." required: - "id" - "hashed_id" - "description" - "summary" - "channel_hashed_id" - "media_hashed_id" - "published" - "created" - "updated" webinars: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar" hashed_id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar. Identical to `id`, named to match every other Wistia resource." title: type: "string" examples: - "Wellness Session: Coping with Outie Memories" description: "The title of the webinar" description: type: - "string" - "null" examples: - "A comprehensive session on managing work-life balance" description: "The description of the webinar" scheduled_for: type: - "string" - "null" examples: - "2024-03-20T15:30:00-05:00" format: "date-time" description: "The scheduled start time in W3C format with timezone" event_duration: type: - "integer" - "null" examples: - 60 description: "Duration of the webinar in minutes" time_zone: type: "string" examples: - "America/New_York" description: "The IANA time zone identifier the webinar is scheduled in" lifecycle_status: type: "string" examples: - "ready" enum: - "pending" - "ready" - "starting" - "started" - "ended" - "vod_ready" - "failed" description: "The current lifecycle status of the webinar. This is a read-only, system-managed field that Wistia updates as the event moves through its lifecycle; it cannot be set or changed via the API." readOnly: true registration_status: type: "string" examples: - "published" description: "Registration status of the event" created_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was created (UTC)" updated_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was last updated (UTC)" audience_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456" description: "Link for the audience to join the event" host_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair" description: "Link for the host to manage the event" panelist_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair/a1b2c3d4-e5f6-7890-abcd-ef1234567890" description: "Link for panelists to join the event" thumbnail_url: type: - "string" - "null" examples: - "https://embed-ssl.wistia.com/deliveries/abc123def456.jpg" description: "URL of the webinar's custom thumbnail image, or null if no custom thumbnail has been set" folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" - type: "null" unevaluatedProperties: false description: "The folder (project) this webinar belongs to" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "hashed_id" - "title" - "time_zone" - "lifecycle_status" - "registration_status" - "created_at" - "updated_at" - "audience_link" - "host_link" - "panelist_link" description: "A webinar is an event which allows you to stream a video\nto multiple participants. See our [Webinars Guide](https://support.wistia.com/en/articles/8288501-getting-started-with-webinars)\nfor more info.\n" required: - "folders" - "subfolders" - "medias" - "channels" - "channel_episodes" - "webinars" required: - "data" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "search" x-speakeasy-name-override: "search" /resource_urls: get: summary: "Resolve Resource URLs" description: "Resolves a resource's hashed ID and type to its canonical app URL(s) — deep\nlinks an authorized user can open in the Wistia UI. The URL is only returned\nwhen the authenticated user is allowed to view the resource.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Resource URLs" security: - BearerAuth: [] parameters: - name: "type" in: "query" description: "The kind of resource the hashed ID refers to." required: true schema: type: "string" enum: - "media" - "folder" - "channel" - "channel_episode" - "webinar" - "remix" - name: "hashed_id" in: "query" description: "The hashed ID of the resource." required: true schema: type: "string" example: "4d23503f70" responses: "200": description: "The resource's canonical URLs" content: application/json: schema: type: "object" unevaluatedProperties: false properties: type: type: "string" description: "The kind of resource that was resolved." hashed_id: type: "string" description: "The hashed ID of the resolved resource." urls: type: "object" unevaluatedProperties: false properties: show: type: "string" description: "The page where the resource is viewed." required: - "show" description: "The resource's canonical app URLs, keyed by kind." required: - "type" - "hashed_id" - "urls" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "resourceUrls" x-speakeasy-name-override: "resolve" /expiring_token: post: summary: "Create Expiring Access Token" description: "```\n\U0001F6AB Alert\nThis API is still under development and can change at any time.\n```\n\nThis endpoint is for creating expiring access tokens which can be used for some iframe embeds\nand, when granted the `all:delegate_to_contact_permissions` scope, for REST API requests\nauthorized by the token's authorizations.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Expiring Access Tokens" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: expiring_access_token: type: "object" unevaluatedProperties: false properties: expires_at: type: "string" format: "iso8601" description: "an ISO8601 string of when the token will expire, defaults to two days from creation" scopes: type: "array" items: type: "string" examples: - "graphql:all" - "all:delegate_to_contact_permissions" description: "The scopes the token will be granted. `graphql:all` allows GraphQL requests (e.g. the embedded transcript editor) and `all:delegate_to_contact_permissions` allows REST API requests authorized by the token's authorizations. Defaults to `[\"graphql:all\"]` when omitted." default: - "graphql:all" authorizations: type: "array" items: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "media" - "folder" - "account" description: "The type of object the permission is being performed on. Supports `media`, `folder` and `account`." id: type: "string" description: "The id of the object the permissions are being performed on: the hashed id of a `media` or `folder`, or the numeric `id` of the `account` (as returned by `GET /modern/account`), which must be the token's own account." permissions: type: "array" items: type: "string" examples: - "show" - "update" - "destroy" - "edit-transcripts" - "create-folders" description: "The permissions granted on the object. `media` supports `show`, `update`, `destroy` and `edit-transcripts`; `folder` supports `show`, `update` and `destroy`; `account` supports `create-folders`. Any permission implicitly allows viewing the object; all other permissions must be declared explicitly. A rule naming a `folder` also covers its subfolders: any permission lists and shows them, and `update` creates, renames and deletes them." required: - "type" - "id" - "permissions" description: "a list of authorizations the token will have" required: false responses: "200": description: "Successful response" content: application/json: schema: type: "object" unevaluatedProperties: false properties: token: type: "string" description: "A token which can be used to authorize requests to Wistia. With the `graphql:all` scope it authorizes GraphQL requests such as transcript embeds; with the `all:delegate_to_contact_permissions` scope it can also be used as a bearer token for REST API requests authorized by the token's authorizations." required: - "token" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "422": description: "Unprocessable entity, the request parameters were invalid." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "A single error message describing what went wrong." errors: type: "array" examples: - - "Title is required" - "Event duration must be at least 15 minutes" items: type: "string" description: "Array of error messages describing what went wrong." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "501": description: "Not implemented - expiring tokens cannot be created from other expiring tokens" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Expiring tokens can only be created from non-expiring access tokens." x-speakeasy-group: "expiringAccessTokens" x-speakeasy-name-override: "create" x-cli-topic-override: "expiring-tokens" /background_job_status/{backgroundJobStatusId}: get: summary: "Show Background Job Status" description: "Retrieves the status of a background job.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Background Job Status" security: - BearerAuth: [] parameters: - name: "backgroundJobStatusId" in: "path" description: "The hashed ID or numeric ID of the background job" required: true schema: type: "string" responses: "200": description: "OK" content: application/json: schema: type: "object" unevaluatedProperties: false properties: background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" - type: "object" properties: object: oneOf: - type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "bulk_operation" description: "Discriminator identifying the wrapped resource type." summary: type: "object" unevaluatedProperties: false properties: total: type: "integer" description: "The total number of actions in the operation." succeeded: type: "integer" description: "The number of actions that have completed successfully." failed: type: "integer" description: "The number of actions that have failed." required: - "total" - "succeeded" - "failed" description: "Aggregate counts for the bulk operation. While the operation is\nrunning, `succeeded` and `failed` reflect progress so far.\n" results: type: "array" items: type: "object" unevaluatedProperties: false properties: position: type: "integer" description: "The zero-based index of the action within the submitted batch." operation: type: "string" enum: - "create" - "update" - "delete" - "move" - "purchase" description: "The operation that was performed. `purchase` appears only for\noperations submitted through the Create Bulk Purchase endpoint.\n" resource_type: type: "string" description: "The type of resource the action operated on." id: type: "string" description: "The hashed ID of the affected record. For successful creates this\nis the newly created record's ID. Absent when a create fails\nbefore a record exists.\n" status: type: "string" enum: - "succeeded" - "failed" description: "The outcome of the action." error: type: "string" description: "The failure reason. Only present for failed actions." required: - "position" - "status" description: "Per-action results, in submission order. Empty until actions begin\ncompleting.\n" required: - "type" - "summary" - "results" description: "Wire view of a bulk operation as it appears inside a background job status\npoll response. Discriminated by `type`.\n" unevaluatedProperties: false description: "The wrapped resource, present only when the job type carries typed\npoll content. Use `type` to discriminate which shape this is.\n" unevaluatedProperties: false required: - "background_job_status" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Resource not found" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "backgroundJobStatus" x-speakeasy-name-override: "get" x-cli-topic-override: "jobs" /allowed_domains: get: summary: "List Allowed Domains" description: "Lists allowed domains belonging to the account.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Allowed Domains" security: - BearerAuth: [] parameters: - name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" 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\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" - name: "sort_by" in: "query" description: "Ordering. When using cursor pagination (see cursor param),\nonly `id` and `domain` are supported.\n" required: false schema: type: "string" enum: - "id" - "domain" - "created" default: "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 default: 1 responses: "200": description: "List of allowed domains" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: domain: type: "string" examples: - "example.com" description: "The allowed domain name." created_at: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the allowed domain was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "domain" - "created_at" description: "An allowed domain represents a domain where a Wistia video can be embedded. Account\nrestrictions need to be enabled for an allowed domain to have an effect. See\nour [Domain Restrictions](https://support.wistia.com/en/articles/9691672-domain-restrictions)\nguide for more details.\n" "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "allowedDomains" x-speakeasy-name-override: "list" post: summary: "Create Allowed Domain" description: "Creates an allowed domain for the account.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Allowed Domains" security: - BearerAuth: [] requestBody: content: application/json: schema: type: "object" unevaluatedProperties: false properties: domain: type: "string" examples: - "example.com" description: "The domain name to add (www will be automatically stripped)" required: - "domain" required: true responses: "200": description: "Allowed domain created successfully (or already exists)" content: application/json: schema: type: "object" unevaluatedProperties: false properties: domain: type: "string" examples: - "example.com" description: "The allowed domain name." created_at: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the allowed domain was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "domain" - "created_at" description: "An allowed domain represents a domain where a Wistia video can be embedded. Account\nrestrictions need to be enabled for an allowed domain to have an effect. See\nour [Domain Restrictions](https://support.wistia.com/en/articles/9691672-domain-restrictions)\nguide for more details.\n" "400": description: "Bad request - missing or invalid domain" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "The domain's format doesn't look correct. It should be formatted like \"mydomain.com\"" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "allowedDomains" x-speakeasy-name-override: "create" /allowed_domains/{domain}: get: summary: "Show Allowed Domain" description: "Returns the details of an allowed domain.\n\n## Requires api token with one of the following permissions\n```\nRead all data\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Allowed Domains" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: domain: type: "string" examples: - "example.com" description: "The allowed domain name." created_at: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the allowed domain was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "domain" - "created_at" description: "An allowed domain represents a domain where a Wistia video can be embedded. Account\nrestrictions need to be enabled for an allowed domain to have an effect. See\nour [Domain Restrictions](https://support.wistia.com/en/articles/9691672-domain-restrictions)\nguide for more details.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." error: type: "string" examples: - "Invalid credentials." "404": description: "Domain not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "domain was not found" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "allowedDomains" x-speakeasy-name-override: "get" delete: summary: "Delete Allowed Domain" description: "Deletes an allowed domain from the account.\n\n## Requires api token with one of the following permissions\n```\nRead, update & delete anything\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n" tags: - "Allowed Domains" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: domain: type: "string" examples: - "example.com" description: "The allowed domain name." created_at: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the allowed domain was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "domain" - "created_at" description: "An allowed domain represents a domain where a Wistia video can be embedded. Account\nrestrictions need to be enabled for an allowed domain to have an effect. See\nour [Domain Restrictions](https://support.wistia.com/en/articles/9691672-domain-restrictions)\nguide for more details.\n" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Domain not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "domain was not found" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "allowedDomains" x-speakeasy-name-override: "delete" /stats/account: get: summary: "Show Current Account Stats" description: "Retrieve account-wide video stats. Get statistics like the number of video loads, plays, and hours watched for the entire account.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Stats:Account" security: - BearerAuth: [] responses: "200": description: "Successful operation. Account stats retrieved." content: application/json: schema: type: "object" unevaluatedProperties: false properties: load_count: type: "integer" description: "The total number of times all of the videos from this account have been loaded." play_count: type: "integer" description: "The total number of times all of the videos from this account have been played." hours_watched: type: "number" format: "float" description: "The total amount of time spent watching all of the videos in this account." required: - "load_count" - "play_count" - "hours_watched" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "statsAccount" x-speakeasy-name-override: "get" /stats/account/by_date: get: summary: "Show Account Stats by Date" description: "Retrieve account-wide stats organized by day, between a start and end date parameter (inclusive). If start and end date are not provided, defaults to yesterday and today.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Stats:Account" security: - BearerAuth: [] parameters: - 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 account stats by date" content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: date: type: "string" format: "date" load_count: type: "integer" play_count: type: "integer" hours_watched: type: "number" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" /stats/projects/{projectId}: get: summary: "Show Project Stats" description: "Retrieve stats for a project. This endpoint provides statistics for a specific project identified by its project-id.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Stats:Projects" security: - BearerAuth: [] parameters: - name: "projectId" in: "path" description: "The Hashed ID or ID of the project for which you want to retrieve stats." required: true schema: type: "string" description: "The hashed ID or numeric ID of the project (e.g., \"4d23503f70\" or \"22570\")" responses: "200": description: "Success response with the stats of the project." content: application/json: schema: type: "object" unevaluatedProperties: false properties: load_count: type: "integer" description: "The total number of times the videos in this project have been loaded." play_count: type: "integer" description: "The total number of times the videos in this project have been played." hours_watched: type: "number" format: "float" description: "The total time spent viewing the videos in this project." number_of_videos: type: "integer" description: "The total number of videos in this project." deprecated: true "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Project not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "statsProjects" x-speakeasy-name-override: "get" /stats/medias/{mediaId}: get: summary: "Show Media Stats" description: "Retrieve stats for a video. This endpoint provides statistics for a specific video identified by its media-id.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Stats:Media" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID or ID of the video for which you want to retrieve stats." required: true schema: type: "string" description: "The hashed ID or numeric ID of the media (e.g., \"4d23503f70\" or \"22570\")" responses: "200": description: "Success response with the stats of the video." content: application/json: schema: type: "object" unevaluatedProperties: false properties: load_count: type: "integer" description: "The total number of times this video has been loaded." play_count: type: "integer" description: "The total number of times this video has been played." play_rate: type: "number" format: "float" description: "The percentage of visitors who clicked play (between 0 and 1)." hours_watched: type: "number" format: "float" description: "The total time spent watching this video." engagement: type: "number" format: "float" description: "The average percentage of the video that gets viewed (between 0 and 1)." visitors: type: "integer" description: "The total number of unique people that have loaded this video." actions: type: "array" items: type: "object" unevaluatedProperties: false properties: type: type: "string" description: "Type of action (e.g., \"Call to Action\")." action_count: type: "integer" description: "Number of actions performed." impression_count: type: "integer" description: "Number of times the action was shown." rate: type: "number" format: "float" description: "The rate of actions performed over impressions." url: type: - "string" - "null" description: "For action types that link out (e.g., post-roll CTA), the URL the viewer was directed to." text: type: - "string" - "null" description: "For action types that include display text (e.g., post-roll CTA), the text shown to the viewer." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Media not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "statsMedia" x-speakeasy-name-override: "get" /stats/medias/{mediaId}/by_date: get: summary: "Show Media Stats 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.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Stats:Media" security: - BearerAuth: [] 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" unevaluatedProperties: false properties: date: type: "string" format: "date" load_count: type: "integer" play_count: type: "integer" hours_watched: type: "number" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Media not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "statsMedia" x-speakeasy-name-override: "getByDate" /stats/medias/{mediaId}/engagement: get: summary: "Show Media Engagement" description: "Retrieve engagement data for a video. This endpoint provides engagement data for a specific video identified by its media-id.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Stats:Media" security: - BearerAuth: [] 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: type: "string" description: "The hashed ID or numeric ID of the media (e.g., \"4d23503f70\" or \"22570\")" responses: "200": description: "Success response with the engagement data of the video." content: application/json: schema: type: "object" unevaluatedProperties: false properties: engagement: type: "number" format: "float" description: "The percentage of the video that was viewed, averaged across all viewing sessions." engagement_data: type: "array" items: type: "integer" description: "An array for creating an engagement graph." rewatch_data: type: "array" items: type: "integer" description: "An array for creating the rewatch block on an engagement graph." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Media not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "statsMedia" x-speakeasy-name-override: "getEngagement" /stats/visitors: get: summary: "List Visitors" description: "This endpoint provides a list of visitors that have watched videos in your account.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Stats:Visitors" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: visitor_key: type: "string" description: "A unique identifier for the visitor." created_at: type: "string" format: "date-time" description: "When the visitor was created." last_active_at: type: "string" format: "date-time" description: "The last time the visitor played a video." last_event_key: type: - "string" - "null" description: "The event key for the last video play action." identifying_event_key: type: - "string" - "null" description: "The event key for the conversion event that identified the visitor. Null when the visitor has not been identified." load_count: type: "integer" description: "The total number of videos loaded by the visitor." play_count: type: "integer" description: "The total number of videos played by the visitor." visitor_identity: type: "object" unevaluatedProperties: false properties: name: type: - "string" - "null" email: type: - "string" - "null" org: type: "object" unevaluatedProperties: false properties: name: type: - "string" - "null" title: type: - "string" - "null" user_agent_details: type: "object" unevaluatedProperties: false properties: browser: type: "string" browser_version: type: "string" platform: type: "string" mobile: type: "boolean" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "statsVisitors" x-speakeasy-name-override: "list" /stats/visitors/{visitorKey}: get: summary: "Show Visitor" description: "This endpoint provides detailed information about a specific visitor.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Stats:Visitors" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: visitor_key: type: "string" description: "A unique identifier for the visitor." created_at: type: "string" format: "date-time" description: "When the visitor was created." last_active_at: type: "string" format: "date-time" description: "The last time the visitor played a video." last_event_key: type: - "string" - "null" description: "The event key for the last video play action." identifying_event_key: type: - "string" - "null" description: "The event key for the conversion event that identified the visitor. Null when the visitor has not been identified." load_count: type: "integer" description: "The total number of videos loaded by the visitor." play_count: type: "integer" description: "The total number of videos played by the visitor." visitor_identity: type: "object" unevaluatedProperties: false properties: name: type: - "string" - "null" email: type: - "string" - "null" org: type: "object" unevaluatedProperties: false properties: name: type: - "string" - "null" title: type: - "string" - "null" user_agent_details: type: "object" unevaluatedProperties: false properties: browser: type: "string" browser_version: type: "string" platform: type: "string" mobile: type: "boolean" "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Visitor not found" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "statsVisitors" x-speakeasy-name-override: "get" /stats/events: get: summary: "List Events" description: "Retrieve a list of events. Please note that due to our data retention policy,\nonly events from the last 2 years are available.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Stats:Events" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: received_at: type: "string" format: "date-time" description: "Date and time when the event occurred." event_key: type: "string" description: "Unique identifier for the event." visitor_key: type: "string" description: "Identifier for the visitor." embed_url: type: "string" description: "URL of the page where the video was viewed." percent_viewed: type: "number" format: "float" description: "Decimal number denoting how much of the video was watched." ip: type: "string" description: "IP address of the viewer." org: type: "string" description: "Organization associated with the IP address." country: type: "string" description: "Country based on IP." region: type: "string" description: "Region based on IP." city: type: "string" description: "City based on IP." lat: type: "number" format: "float" description: "Latitude based on IP." lon: type: "number" format: "float" description: "Longitude based on IP." email: type: - "string" - "null" description: "Email of the viewer (if available)." media_id: type: "string" description: "Identifier for the video that was watched." media_name: type: "string" description: "Name of the video." media_url: type: "string" description: "URL of the video in Wistia." iframe_heatmap_url: type: "string" description: "URL for the heatmap of the event." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" fileSize: type: "integer" contentType: type: "string" type: type: "string" conversion_type: oneOf: - type: "integer" - type: "string" unevaluatedProperties: false description: "Type of conversion." conversion_data: type: "object" unevaluatedProperties: false properties: email: type: "string" first_name: type: "string" is_new_lead: type: "boolean" last_name: type: "string" description: "Additional data related to the conversion." user_agent_details: type: "object" unevaluatedProperties: false properties: browser: type: "string" browser_version: type: "string" platform: type: "string" mobile: type: "boolean" description: "Details about the user agent of the viewer." attributes: type: "object" unevaluatedProperties: true description: "Raw event attributes returned by the underlying analytics store. The keys mirror the top-level event fields." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "422": description: "Unprocessable entity, the request parameters were invalid." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "Error message describing why the request could not be processed." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "statsEvents" x-speakeasy-name-override: "list" /stats/events/{eventKey}: get: summary: "Show Event" description: "Retrieve information for a single event. Please note that due to our data retention policy,\nonly events from the last 2 years are available.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Stats:Events" security: - BearerAuth: [] 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: type: "object" unevaluatedProperties: false properties: received_at: type: "string" format: "date-time" description: "Date and time when the event occurred." event_key: type: "string" description: "Unique identifier for the event." visitor_key: type: "string" description: "Identifier for the visitor." embed_url: type: "string" description: "URL of the page where the video was viewed." percent_viewed: type: "number" format: "float" description: "Decimal number denoting how much of the video was watched." ip: type: "string" description: "IP address of the viewer." org: type: "string" description: "Organization associated with the IP address." country: type: "string" description: "Country based on IP." region: type: "string" description: "Region based on IP." city: type: "string" description: "City based on IP." lat: type: "number" format: "float" description: "Latitude based on IP." lon: type: "number" format: "float" description: "Longitude based on IP." email: type: - "string" - "null" description: "Email of the viewer (if available)." media_id: type: "string" description: "Identifier for the video that was watched." media_name: type: "string" description: "Name of the video." media_url: type: "string" description: "URL of the video in Wistia." iframe_heatmap_url: type: "string" description: "URL for the heatmap of the event." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" fileSize: type: "integer" contentType: type: "string" type: type: "string" conversion_type: oneOf: - type: "integer" - type: "string" unevaluatedProperties: false description: "Type of conversion." conversion_data: type: "object" unevaluatedProperties: false properties: email: type: "string" first_name: type: "string" is_new_lead: type: "boolean" last_name: type: "string" description: "Additional data related to the conversion." user_agent_details: type: "object" unevaluatedProperties: false properties: browser: type: "string" browser_version: type: "string" platform: type: "string" mobile: type: "boolean" description: "Details about the user agent of the viewer." attributes: type: "object" unevaluatedProperties: true description: "Raw event attributes returned by the underlying analytics store. The keys mirror the top-level event fields." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Event not found" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" x-speakeasy-group: "statsEvents" x-speakeasy-name-override: "get" /analytics/account: get: summary: "Show Account Analytics" description: "Retrieve aggregate analytics for the entire account over a date range. This endpoint\nprovides Bottler-powered analytics across all of the account's media including plays,\nloads, engagement rate, play rate, and conversion metrics.\n\nThe date range between `start_date` and `end_date` must not exceed 2 years.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Account" security: - BearerAuth: [] parameters: - name: "start_date" in: "query" description: "Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date." required: true schema: type: "string" format: "date" - name: "end_date" in: "query" description: "End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date." required: true schema: type: "string" format: "date" responses: "200": description: "Success response with aggregate analytics for the account." content: application/json: schema: allOf: - type: "object" properties: unique_loads: type: - "integer" - "null" description: "The number of unique video loads." unique_plays: type: - "integer" - "null" description: "The number of unique video plays." plays: type: - "integer" - "null" description: "The total number of video plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." played_time: type: - "integer" - "null" description: "Total time spent watching the video in seconds." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors who loaded the video." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the video watched (between 0 and 1)." form_conversions: type: - "integer" - "null" description: "The number of form submissions." unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsAccount" x-speakeasy-name-override: "get" /analytics/account/timeseries: get: summary: "Show Account Analytics Timeseries" description: "Retrieve analytics timeseries data for the entire account over a date range with\nconfigurable granularity. Returns an array of timestamped metric buckets aggregated\nacross all of the account's media.\n\nThe date range between `start_date` and `end_date` must not exceed 2 years.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Account" security: - BearerAuth: [] parameters: - name: "start_date" in: "query" description: "Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date." required: true schema: type: "string" format: "date" - name: "end_date" in: "query" description: "End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date." required: true schema: type: "string" format: "date" - name: "granularity" in: "query" description: "The time granularity for the timeseries data." required: true schema: type: "string" enum: - "daily" - "weekly" - "monthly" responses: "200": description: "Success response with timeseries analytics data for the account." content: application/json: schema: type: "array" items: allOf: - type: "object" properties: timestamp: type: "string" format: "date-time" description: "The start of the time bucket in ISO 8601 format." - type: "object" properties: unique_loads: type: - "integer" - "null" description: "The number of unique video loads." unique_plays: type: - "integer" - "null" description: "The number of unique video plays." plays: type: - "integer" - "null" description: "The total number of video plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." played_time: type: - "integer" - "null" description: "Total time spent watching the video in seconds." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors who loaded the video." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the video watched (between 0 and 1)." form_conversions: type: - "integer" - "null" description: "The number of form submissions." unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsAccount" x-speakeasy-name-override: "getTimeseries" /analytics/account/top_content: get: summary: "Show Account Top Content" description: "Rank the account's content by a chosen metric over a date range. Returns the top\nmedia, channels, or folders (controlled by `group_by`) with their analytics,\nanswering questions like \"what were my most-played videos last month?\".\n\nOptionally pass `hashed_ids` to scope the ranking to a specific set of media\ninstead of the whole account — useful for fetching analytics for a known list\nof videos, still sorted by `sort_by`.\n\nThe date range between `start_date` and `end_date` must not exceed 2 years.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Account" security: - BearerAuth: [] parameters: - name: "start_date" in: "query" description: "Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date." required: true schema: type: "string" format: "date" - name: "end_date" in: "query" description: "End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date." required: true schema: type: "string" format: "date" - name: "group_by" in: "query" description: "The type of content to rank." required: false schema: type: "string" enum: - "media" - "channel" - "project" default: "media" - name: "hashed_ids[]" in: "query" description: "Scope the ranking to these specific media's hashed IDs, rather than the whole account. Only valid with group_by=media." required: false style: "form" explode: true schema: type: "array" items: type: "string" maxItems: 1000 - name: "sort_by" in: "query" description: "The metric to rank content by." required: false schema: type: "string" enum: - "plays" - "loads" - "play_rate" - "engagement_rate" - "played_time" - "unique_visitors" default: "plays" - name: "sort_direction" in: "query" description: "The sort direction." required: false schema: type: "string" enum: - "asc" - "desc" default: "desc" - name: "per_page" in: "query" description: "Number of results to return. Defaults to the number of hashed_ids requested, or 10 when hashed_ids is not given." required: false schema: type: "integer" maximum: 1000 minimum: 1 responses: "200": description: "Success response with ranked content analytics. Entry shape depends on `group_by`." content: application/json: schema: type: "array" items: anyOf: - allOf: - type: "object" properties: plays: type: - "integer" - "null" description: "The total number of plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the content watched (between 0 and 1)." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors." played_time: type: - "number" - "null" format: "float" description: "Total time spent watching in seconds." - type: "object" properties: media_name: type: - "string" - "null" description: "The name of the media." media_hashed_id: type: - "string" - "null" description: "The hashed ID of the media." media_type: type: - "string" - "null" description: "The type of the media (e.g., \"Video\", \"Audio\")." media_thumbnail_url: type: - "string" - "null" description: "URL of the media's thumbnail image." media_duration: type: - "number" - "null" format: "float" description: "The duration of the media in seconds." media_uploaded_at: type: - "string" - "null" description: "When the media was uploaded, in ISO 8601 format." media_deleted_at: type: - "string" - "null" description: "When the media was deleted, in ISO 8601 format. Null for media that still exist." unique_loads: type: - "integer" - "null" description: "The number of unique video loads." unique_plays: type: - "integer" - "null" description: "The number of unique video plays." form_conversions: type: - "integer" - "null" description: "The number of form submissions." unevaluatedProperties: false required: - "media_hashed_id" - allOf: - type: "object" properties: plays: type: - "integer" - "null" description: "The total number of plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the content watched (between 0 and 1)." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors." played_time: type: - "number" - "null" format: "float" description: "Total time spent watching in seconds." - type: "object" properties: channel_title: type: - "string" - "null" description: "The title of the channel." channel_hashed_id: type: - "string" - "null" description: "The hashed ID of the channel." channel_episode_count: type: - "integer" - "null" description: "The number of episodes in the channel." channel_created_at: type: - "string" - "null" description: "When the channel was created, in ISO 8601 format." channel_url: type: - "string" - "null" description: "The URL of the channel." unevaluatedProperties: false required: - "channel_hashed_id" - allOf: - type: "object" properties: plays: type: - "integer" - "null" description: "The total number of plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the content watched (between 0 and 1)." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors." played_time: type: - "number" - "null" format: "float" description: "Total time spent watching in seconds." - type: "object" properties: project_name: type: - "string" - "null" description: "The name of the folder." project_hashed_id: type: - "string" - "null" description: "The hashed ID of the folder." project_created_at: type: - "string" - "null" description: "When the folder was created, in ISO 8601 format." project_url: type: - "string" - "null" description: "The URL of the folder." project_video_count: type: - "integer" - "null" description: "The number of videos in the folder." unevaluatedProperties: false required: - "project_hashed_id" unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "One or more of the requested hashed_ids were not found or do not belong to the account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsAccount" x-speakeasy-name-override: "getTopContent" /analytics/account/embed_locations: get: summary: "Show Account Embed Locations" description: "Retrieve embed location analytics for the entire account. Returns a list of domains\nwhere the account's media are embedded, ranked by the chosen metric.\n\nThe date range between `start_date` and `end_date` must not exceed 2 years.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Account" security: - BearerAuth: [] parameters: - name: "start_date" in: "query" description: "Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date." required: true schema: type: "string" format: "date" - name: "end_date" in: "query" description: "End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date." required: true schema: type: "string" format: "date" - name: "sort_by" in: "query" description: "The metric to sort embed locations by." required: false schema: type: "string" enum: - "plays" - "loads" - "engagement_rate" - "play_rate" - "played_time" - "unique_visitors" default: "plays" - name: "sort_direction" in: "query" description: "The sort direction." required: false schema: type: "string" enum: - "asc" - "desc" default: "desc" - name: "per_page" in: "query" description: "Number of results to return (max 100)." required: false schema: type: "integer" maximum: 100 minimum: 1 default: 10 responses: "200": description: "Success response with embed location analytics for the account." content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: embed_domain: type: - "string" - "null" description: "The domain where the account's media are embedded." media_count: type: - "integer" - "null" description: "The number of distinct media embedded on this domain." loads: type: - "integer" - "null" description: "The number of media loads from this domain." plays: type: - "integer" - "null" description: "The number of media plays from this domain." play_rate: type: - "number" - "null" format: "float" description: "The play rate from this domain (between 0 and 1)." played_time: type: - "number" - "null" format: "float" description: "Total time spent watching from this domain in seconds." engagement_rate: type: - "number" - "null" format: "float" description: "The average engagement rate from this domain (between 0 and 1)." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors from this domain." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsAccount" x-speakeasy-name-override: "getEmbedLocations" /analytics/account/media_by_embed_location: get: summary: "Find Media By Embed Location" description: "Find the media embedded at a given URL. Returns the hashed IDs of the\naccount's media that recorded activity at that embed location during the\ndate range, ranked by plays. The resulting hashed IDs can be passed to\nother endpoints, such as Show Account Top Content's `hashed_ids[]` filter,\nto fetch analytics for those media.\n\nThe domain of `embed_url` is always matched exactly. Its path is matched\nexactly by default, or as a prefix with `path_match=prefix` (e.g.\n`/pricing` also matching `/pricing/plans`). A path that is empty or `/`\nis ignored, returning media across all paths on the domain.\n\nEmbed location data is retained for 6 months; a `start_date` older than\nthat returns a 422 error. When `start_date` and `end_date` are omitted,\nthe full 6-month queryable window is used.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Account" security: - BearerAuth: [] parameters: - name: "embed_url" in: "query" description: "The URL of the page to look up, e.g. `https://example.com/pricing`. The protocol is optional (https is assumed), so `example.com/pricing` also works." required: true schema: type: "string" - name: "start_date" in: "query" description: "Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date. Must be within the last 6 months. Defaults to 6 months ago, the start of the queryable window." required: false schema: type: "string" format: "date" - name: "end_date" in: "query" description: "End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date. Defaults to tomorrow, so today's activity is included." required: false schema: type: "string" format: "date" - name: "path_match" in: "query" description: "How to match the path of `embed_url` against embed locations. `exact` requires the path to match exactly; `prefix` matches any embed path starting with it." required: false schema: type: "string" enum: - "exact" - "prefix" default: "exact" - name: "per_page" in: "query" description: "Number of media hashed IDs to return (max 1000)." required: false schema: type: "integer" maximum: 1000 minimum: 1 default: 100 responses: "200": description: "Success response with the hashed IDs of media embedded at the location." content: application/json: schema: type: "object" unevaluatedProperties: false properties: media_hashed_ids: type: "array" items: type: "string" description: "Hashed IDs of media embedded at the location, ranked by plays." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "422": description: "Unprocessable entity" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "Error message detailing why the request could not be processed." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsAccount" x-speakeasy-name-override: "findMediaByEmbedLocation" /analytics/medias/{mediaId}: get: summary: "Show Media Analytics" description: "Retrieve aggregate analytics for a video over a date range. This endpoint provides\nBottler-powered analytics including plays, loads, engagement rate, play rate, and\nconversion metrics.\n\nThe date range between `start_date` and `end_date` must not exceed 2 years.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Media" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video." required: true schema: type: "string" description: "The hashed ID of the media (e.g., \"4d23503f70\")" - name: "start_date" in: "query" description: "Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date." required: true schema: type: "string" format: "date" - name: "end_date" in: "query" description: "End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date." required: true schema: type: "string" format: "date" responses: "200": description: "Success response with aggregate analytics for the video." content: application/json: schema: allOf: - type: "object" properties: unique_loads: type: - "integer" - "null" description: "The number of unique video loads." unique_plays: type: - "integer" - "null" description: "The number of unique video plays." plays: type: - "integer" - "null" description: "The total number of video plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." played_time: type: - "integer" - "null" description: "Total time spent watching the video in seconds." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors who loaded the video." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the video watched (between 0 and 1)." cta_impressions: type: - "integer" - "null" description: "The number of times a call-to-action was shown." cta_conversions: type: - "integer" - "null" description: "The number of times a call-to-action was clicked." cta_conversion_rate: type: - "number" - "null" format: "float" description: "The rate of CTA clicks over impressions (between 0 and 1)." form_conversions: type: - "integer" - "null" description: "The number of form submissions." unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Media not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsMedia" x-speakeasy-name-override: "get" /analytics/medias/{mediaId}/timeseries: get: summary: "Show Media Analytics Timeseries" description: "Retrieve analytics timeseries data for a video over a date range with configurable\ngranularity. Returns an array of timestamped metric buckets.\n\nThe date range between `start_date` and `end_date` must not exceed 2 years.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Media" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video." required: true schema: type: "string" description: "The hashed ID of the media (e.g., \"4d23503f70\")" - name: "start_date" in: "query" description: "Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date." required: true schema: type: "string" format: "date" - name: "end_date" in: "query" description: "End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date." required: true schema: type: "string" format: "date" - name: "granularity" in: "query" description: "The time granularity for the timeseries data." required: true schema: type: "string" enum: - "daily" - "weekly" - "monthly" responses: "200": description: "Success response with timeseries analytics data." content: application/json: schema: type: "array" items: allOf: - type: "object" properties: timestamp: type: "string" format: "date-time" description: "The start of the time bucket in ISO 8601 format." - type: "object" properties: unique_loads: type: - "integer" - "null" description: "The number of unique video loads." unique_plays: type: - "integer" - "null" description: "The number of unique video plays." plays: type: - "integer" - "null" description: "The total number of video plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." played_time: type: - "integer" - "null" description: "Total time spent watching the video in seconds." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors who loaded the video." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the video watched (between 0 and 1)." cta_impressions: type: - "integer" - "null" description: "The number of times a call-to-action was shown." cta_conversions: type: - "integer" - "null" description: "The number of times a call-to-action was clicked." cta_conversion_rate: type: - "number" - "null" format: "float" description: "The rate of CTA clicks over impressions (between 0 and 1)." form_conversions: type: - "integer" - "null" description: "The number of form submissions." unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Media not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsMedia" x-speakeasy-name-override: "getTimeseries" /analytics/medias/{mediaId}/embed_locations: get: summary: "Show Media Embed Locations" description: "Retrieve embed location analytics for a video. Returns a list of pages where the\nvideo is embedded, ranked by the chosen metric.\n\nThe date range between `start_date` and `end_date` must not exceed 2 years.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Media" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video." required: true schema: type: "string" description: "The hashed ID of the media (e.g., \"4d23503f70\")" - name: "start_date" in: "query" description: "Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date." required: true schema: type: "string" format: "date" - name: "end_date" in: "query" description: "End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date." required: true schema: type: "string" format: "date" - name: "sort_by" in: "query" description: "The metric to sort embed locations by." required: false schema: type: "string" enum: - "plays" - "loads" - "engagement_rate" - "play_rate" - "played_time" - "unique_visitors" default: "plays" - name: "sort_direction" in: "query" description: "The sort direction." required: false schema: type: "string" enum: - "asc" - "desc" default: "desc" - name: "embed_url" in: "query" description: "Filter results to a single embed URL. When provided, only analytics for\nthe page matching this URL are returned. The protocol is optional (https is assumed).\n" required: false schema: type: "string" example: "https://example.com/landing-page" - name: "per_page" in: "query" description: "Number of results to return (max 100)." required: false schema: type: "integer" maximum: 100 minimum: 1 default: 10 responses: "200": description: "Success response with embed location analytics." content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: embed_domain: type: - "string" - "null" description: "The domain where the video is embedded." embed_path: type: - "string" - "null" description: "The path on the domain where the video is embedded." embed_url: type: - "string" - "null" description: "The full URL where the video is embedded." page_title: type: - "string" - "null" description: "The title of the page where the video is embedded." loads: type: - "integer" - "null" description: "The number of video loads from this location." unique_loads: type: - "integer" - "null" description: "The number of unique video loads from this location (one per visitor session)." plays: type: - "integer" - "null" description: "The number of video plays from this location." unique_plays: type: - "integer" - "null" description: "The number of unique video plays from this location (one per visitor session)." play_rate: type: - "number" - "null" format: "float" description: "The play rate from this location (between 0 and 1)." played_time: type: - "number" - "null" format: "float" description: "Total time spent watching from this location in seconds." engagement_rate: type: - "number" - "null" format: "float" description: "The average engagement rate from this location (between 0 and 1)." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors from this location." cta_conversion_rate: type: - "number" - "null" format: "float" description: "The CTA conversion rate from this location (between 0 and 1)." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Media not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsMedia" x-speakeasy-name-override: "getEmbedLocations" /analytics/medias/{mediaId}/embed_locations_timeseries: get: summary: "Show Media Embed Locations Timeseries" description: "Retrieve timeseries analytics for a video broken down by embed location. Returns\nan array of timestamped buckets, each containing metrics for the top embed\nlocations (ranked by the chosen metric) plus an \"All other\" entry aggregating\nthe remaining locations.\n\nThe date range between `start_date` and `end_date` must not exceed 2 years.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Media" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video." required: true schema: type: "string" description: "The hashed ID of the media (e.g., \"4d23503f70\")" - name: "start_date" in: "query" description: "Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date." required: true schema: type: "string" format: "date" - name: "end_date" in: "query" description: "End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date." required: true schema: type: "string" format: "date" - name: "granularity" in: "query" description: "The time granularity for the timeseries data." required: true schema: type: "string" enum: - "daily" - "weekly" - "monthly" - name: "sort_by" in: "query" description: "The metric used to rank and select the top embed locations." required: false schema: type: "string" enum: - "plays" - "loads" - "engagement_rate" - "play_rate" - "played_time" - "unique_visitors" default: "plays" - name: "embed_url" in: "query" description: "Filter results to a single embed URL. When provided, only analytics for\nthe page matching this URL are returned. The protocol is optional (https is assumed).\n" required: false schema: type: "string" example: "https://example.com/landing-page" - name: "per_page" in: "query" description: "Number of top embed locations per time bucket (max 100). Remaining locations are aggregated into an \"All other\" entry." required: false schema: type: "integer" maximum: 100 minimum: 1 default: 5 responses: "200": description: "Success response with embed location timeseries data." content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: timestamp: type: "string" format: "date-time" description: "The start of the time bucket in ISO 8601 format." entries: type: "array" items: type: "object" unevaluatedProperties: false properties: embed_domain: type: - "string" - "null" description: "The domain where the video is embedded. Null for the \"All other\" entry." embed_path: type: - "string" - "null" description: "The path on the domain where the video is embedded. Null for the \"All other\" entry." embed_url: type: - "string" - "null" description: "The full URL where the video is embedded. Null for the \"All other\" entry." page_title: type: - "string" - "null" description: "The title of the page where the video is embedded. \"All other\" for the aggregated remainder entry." loads: type: - "integer" - "null" description: "The number of video loads from this location." unique_loads: type: - "integer" - "null" description: "The number of unique video loads from this location (one per visitor session)." plays: type: - "integer" - "null" description: "The number of video plays from this location." unique_plays: type: - "integer" - "null" description: "The number of unique video plays from this location (one per visitor session)." play_rate: type: - "number" - "null" format: "float" description: "The play rate from this location (between 0 and 1)." played_time: type: - "number" - "null" format: "float" description: "Total time spent watching from this location in seconds." engagement_rate: type: - "number" - "null" format: "float" description: "The average engagement rate from this location (between 0 and 1)." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors from this location." cta_conversion_rate: type: - "number" - "null" format: "float" description: "The CTA conversion rate from this location (between 0 and 1)." description: "Embed location metrics for this time bucket. Contains the top locations (ranked by the chosen metric) and optionally an \"All other\" entry." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Media not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsMedia" x-speakeasy-name-override: "getEmbedLocationsTimeseries" /analytics/medias/{mediaId}/traffic: get: summary: "Show Media Traffic Breakdown" description: "Retrieve traffic breakdown analytics for a video, grouped by a specified dimension\nsuch as UTM campaign, UTM source, UTM medium, referrer domain, or viewer screen size.\n\nThe date range between `start_date` and `end_date` must not exceed 2 years.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Media" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video." required: true schema: type: "string" description: "The hashed ID of the media (e.g., \"4d23503f70\")" - name: "start_date" in: "query" description: "Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date." required: true schema: type: "string" format: "date" - name: "end_date" in: "query" description: "End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date." required: true schema: type: "string" format: "date" - name: "group_by" in: "query" description: "The dimension to group traffic data by." required: true schema: type: "string" enum: - "utm_campaign" - "utm_source" - "utm_medium" - "referrer_domain" - "viewer_screen_size" - name: "sort_by" in: "query" description: "The metric to sort results by." required: false schema: type: "string" enum: - "plays" - "loads" - "engagement_rate" default: "plays" - name: "sort_direction" in: "query" description: "The sort direction." required: false schema: type: "string" enum: - "asc" - "desc" default: "desc" - name: "per_page" in: "query" description: "Number of results to return (max 100)." required: false schema: type: "integer" maximum: 100 minimum: 1 default: 100 responses: "200": description: "Success response with traffic breakdown data." content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: utm_campaign: type: - "string" - "null" description: "The UTM campaign value (present when group_by is utm_campaign)." utm_source: type: - "string" - "null" description: "The UTM source value (present when group_by is utm_source)." utm_medium: type: - "string" - "null" description: "The UTM medium value (present when group_by is utm_medium)." referrer_domain: type: - "string" - "null" description: "The referrer domain (present when group_by is referrer_domain)." viewer_screen_size: type: - "string" - "null" description: "The viewer screen size (present when group_by is viewer_screen_size)." loads: type: - "integer" - "null" description: "The number of video loads for this group." plays: type: - "integer" - "null" description: "The number of video plays for this group." engagement_rate: type: - "number" - "null" format: "float" description: "The average engagement rate for this group (between 0 and 1)." description: "Each item contains the group_by field and associated metrics." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Media not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsMedia" x-speakeasy-name-override: "getTraffic" /analytics/medias/{mediaId}/conversions: get: summary: "Show Media Form Conversions" description: "Retrieve form conversion data for a video. Returns a paginated list of form\nsubmissions with visitor details and timestamps.\n\nThe date range between `start_date` and `end_date` must not exceed 2 years.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Media" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video." required: true schema: type: "string" description: "The hashed ID of the media (e.g., \"4d23503f70\")" - name: "start_date" in: "query" description: "Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date." required: true schema: type: "string" format: "date" - name: "end_date" in: "query" description: "End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date." required: true schema: type: "string" format: "date" - name: "per_page" in: "query" description: "Number of results to return (max 100)." required: false schema: type: "integer" maximum: 100 minimum: 1 default: 25 - name: "cursor" in: "query" description: "Cursor for pagination. Use the value from the previous response's page_info.end_cursor." required: false schema: type: "string" responses: "200": description: "Success response with form conversion data." content: application/json: schema: type: "object" unevaluatedProperties: false properties: data: type: "array" items: type: "object" unevaluatedProperties: false properties: first_name: type: - "string" - "null" description: "The first name of the form submitter." last_name: type: - "string" - "null" description: "The last name of the form submitter." email: type: - "string" - "null" description: "The email address of the form submitter." converted_at: type: "string" format: "date-time" description: "The timestamp when the form was submitted in ISO 8601 format." custom_fields: type: "array" items: type: "object" unevaluatedProperties: false properties: label: type: "string" description: "The label of the custom form field." value: type: "string" description: "The value the visitor submitted for this custom form field." description: "The custom form field responses submitted with this conversion (text, dropdown, and single-checkbox fields)." page_info: type: "object" unevaluatedProperties: false properties: has_next_page: type: "boolean" description: "Whether there are more results after this page." has_previous_page: type: "boolean" description: "Whether there are results before this page." end_cursor: type: - "string" - "null" description: "Cursor to use for fetching the next page." start_cursor: type: - "string" - "null" description: "Cursor to use for fetching the previous page." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Media not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsMedia" x-speakeasy-name-override: "getConversions" /analytics/medias/{mediaId}/languages: get: summary: "Show Media Languages" description: "Retrieve language analytics for a video. Returns a breakdown of plays by\nviewer browser language, sorted by number of plays in descending order.\n\nThe date range between `start_date` and `end_date` must not exceed 2 years.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Media" security: - BearerAuth: [] parameters: - name: "mediaId" in: "path" description: "The hashed ID of the video." required: true schema: type: "string" description: "The hashed ID of the media (e.g., \"4d23503f70\")" - name: "start_date" in: "query" description: "Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date." required: true schema: type: "string" format: "date" - name: "end_date" in: "query" description: "End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date." required: true schema: type: "string" format: "date" - name: "per_page" in: "query" description: "Number of results to return (max 100)." required: false schema: type: "integer" maximum: 100 minimum: 1 default: 100 responses: "200": description: "Success response with language analytics." content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: language: type: "string" description: "The ISO 639-1 language code of the viewer's browser." plays: type: "integer" description: "The number of video plays from viewers with this language." percent_of_total_plays: type: "number" format: "float" description: "The percentage of total plays from this language (between 0 and 1)." captions_support: type: "boolean" description: "Whether captions are available for this language." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Media not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsMedia" x-speakeasy-name-override: "getLanguages" /analytics/webinars/{webinarId}: get: summary: "Show Webinar Analytics" description: "Retrieve aggregate analytics for a webinar. This endpoint provides\nBottler-powered analytics including registrations, attendance, engagement,\nchat activity, and poll results.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Webinar" security: - BearerAuth: [] parameters: - name: "webinarId" in: "path" description: "The hashed ID of the webinar." required: true schema: type: "string" description: "The hashed ID of the webinar (e.g., \"abc123xyz\")" - name: "include_post_event" in: "query" description: "Whether to include on-demand viewing data after the live event ended." required: false schema: type: "boolean" default: false - name: "post_event_start_date" in: "query" description: "Start date for the post-event analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date. Only used when include_post_event is true." required: false schema: type: "string" format: "date" - name: "post_event_end_date" in: "query" description: "End date for the post-event analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date. Only used when include_post_event is true." required: false schema: type: "string" format: "date" responses: "200": description: "Success response with aggregate analytics for the webinar." content: application/json: schema: allOf: - type: "object" properties: registrations: type: - "integer" - "null" description: "The total number of registrations for the webinar." imported_registrations: type: - "integer" - "null" description: "The number of registrations imported from external sources." on_demand_registrations: type: - "integer" - "null" description: "The number of registrations for on-demand viewing." imported_on_demand_registrations: type: - "integer" - "null" description: "The number of on-demand registrations imported from external sources." total_watch_time: type: - "integer" - "null" description: "Total watch time across all attendees in seconds." average_watch_time: type: - "integer" - "null" description: "Average watch time per attendee in seconds." attendance: type: - "integer" - "null" description: "The total number of attendees who joined the live event." chatted_attendees: type: - "integer" - "null" description: "The number of attendees who sent at least one chat message." engagement_rate: type: - "number" - "null" format: "float" description: "The average engagement rate for attendees (between 0 and 1)." chats: type: - "integer" - "null" description: "The total number of chat messages sent during the event." currently_watching: type: - "integer" - "null" description: "The number of viewers currently watching (0 for completed events)." engaged_attendees: type: - "integer" - "null" description: "The number of attendees who were actively engaged." impressions: type: - "integer" - "null" description: "The total number of registration page impressions." on_demand_impressions: type: - "integer" - "null" description: "The number of on-demand page impressions." on_demand_plays: type: - "integer" - "null" description: "The number of on-demand video plays." on_demand_engagement_rate: type: - "number" - "null" format: "float" description: "The engagement rate for on-demand viewers (between 0 and 1)." event_time: type: - "integer" - "null" description: "The duration of the live event in seconds." qa_questions: type: - "integer" - "null" description: "The total number of Q&A questions asked during the event." poll_questions: type: - "array" - "null" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "The poll question ID." poll_id: type: "integer" description: "The poll ID this question belongs to." text: type: "string" description: "The question text." response_count: type: "integer" description: "The total number of responses." options: type: - "array" - "null" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "The option ID." text: type: "string" description: "The option text." count: type: "integer" description: "The number of times this option was selected." percent: type: "number" format: "float" description: "The percentage of respondents who selected this option." description: "The available answer options and their response counts." description: "Poll questions and their response data." unevaluatedProperties: false "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Webinar not found or does not belong to account" content: {} "409": description: "The event has not yet reached a terminal state. Analytics are only available after the event has ended." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Aggregate analytics are not available until the event has ended" description: "Error message indicating the event has not ended." "422": description: "Unprocessable entity" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "Error message detailing why the request could not be processed." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsWebinar" x-speakeasy-name-override: "get" /analytics/webinars/{webinarId}/registration: get: summary: "Show Webinar Registration Timeseries" description: "Retrieve registration timeseries data for a webinar with configurable\ngranularity. Returns an array of timestamped registration metric buckets\nincluding impressions, registrations, and completion rates.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Webinar" security: - BearerAuth: [] parameters: - name: "webinarId" in: "path" description: "The hashed ID of the webinar." required: true schema: type: "string" description: "The hashed ID of the webinar (e.g., \"abc123xyz\")" - name: "granularity" in: "query" description: "The time granularity for the timeseries data." required: true schema: type: "string" enum: - "daily" - "weekly" - "monthly" - name: "include_post_event" in: "query" description: "Whether to include on-demand viewing data after the live event ended." required: false schema: type: "boolean" default: false - name: "post_event_start_date" in: "query" description: "Start date for the post-event analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date. Only used when include_post_event is true." required: false schema: type: "string" format: "date" - name: "post_event_end_date" in: "query" description: "End date for the post-event analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date. Only used when include_post_event is true." required: false schema: type: "string" format: "date" responses: "200": description: "Success response with registration timeseries data." content: application/json: schema: type: "array" items: allOf: - type: "object" properties: timestamp: type: "string" format: "date-time" description: "The start of the time bucket in ISO 8601 format." - type: "object" properties: registrations: type: - "integer" - "null" description: "The number of registrations in this time period." impressions: type: - "integer" - "null" description: "The number of registration page impressions in this time period." on_demand_registrations: type: - "integer" - "null" description: "The number of on-demand registrations in this time period." on_demand_impressions: type: - "integer" - "null" description: "The number of on-demand page impressions in this time period." completion_rate: type: - "number" - "null" format: "float" description: "The completion rate for attendees in this time period (between 0 and 1)." on_demand_completion_rate: type: - "number" - "null" format: "float" description: "The completion rate for on-demand viewers in this time period (between 0 and 1)." unevaluatedProperties: false "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Webinar not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsWebinar" x-speakeasy-name-override: "getRegistration" /analytics/webinars/{webinarId}/traffic: get: summary: "Show Webinar Traffic Breakdown" description: "Retrieve traffic breakdown analytics for a webinar, grouped by a specified dimension\nsuch as UTM campaign, UTM source, UTM medium, or referrer domain.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Webinar" security: - BearerAuth: [] parameters: - name: "webinarId" in: "path" description: "The hashed ID of the webinar." required: true schema: type: "string" description: "The hashed ID of the webinar (e.g., \"abc123xyz\")" - name: "group_by" in: "query" description: "The dimension to group traffic data by." required: true schema: type: "string" enum: - "utm_campaign" - "utm_source" - "utm_medium" - "referrer_domain" - name: "sort_by" in: "query" description: "The metric to sort results by." required: false schema: type: "string" enum: - "registrations" - "attendees" - "impressions" default: "registrations" - name: "sort_direction" in: "query" description: "The sort direction." required: false schema: type: "string" enum: - "asc" - "desc" default: "desc" responses: "200": description: "Success response with traffic breakdown data." content: application/json: schema: type: "array" items: type: "object" unevaluatedProperties: false properties: utm_campaign: type: - "string" - "null" description: "The UTM campaign value (present when group_by is utm_campaign)." utm_source: type: - "string" - "null" description: "The UTM source value (present when group_by is utm_source)." utm_medium: type: - "string" - "null" description: "The UTM medium value (present when group_by is utm_medium)." referrer_domain: type: - "string" - "null" description: "The referrer domain (present when group_by is referrer_domain)." registrations: type: - "integer" - "null" description: "The number of registrations from this traffic source." attendees: type: - "integer" - "null" description: "The number of attendees from this traffic source." impressions: type: - "integer" - "null" description: "The number of registration page impressions from this traffic source." description: "Each item contains the group_by field and associated metrics." "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Webinar not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsWebinar" x-speakeasy-name-override: "getTraffic" /analytics/webinars/{webinarId}/audience: get: summary: "Show Webinar Audience" description: "Retrieve audience data for a webinar. Returns a paginated list of\nregistrants with their attendance status, engagement metrics,\nattribution data, and per-attendee histograms.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Webinar" security: - BearerAuth: [] parameters: - name: "webinarId" in: "path" description: "The hashed ID of the webinar." required: true schema: type: "string" description: "The hashed ID of the webinar (e.g., \"abc123xyz\")" - name: "per_page" in: "query" description: "Number of results to return (max 100)." required: false schema: type: "integer" maximum: 100 minimum: 1 default: 25 - name: "cursor" in: "query" description: "Cursor for pagination. Use the value from the previous response's page_info.end_cursor." required: false schema: type: "string" responses: "200": description: "Success response with webinar audience data." content: application/json: schema: type: "object" unevaluatedProperties: false properties: data: type: "array" items: allOf: - type: "object" properties: first_name: type: - "string" - "null" description: "The registrant's first name." last_name: type: - "string" - "null" description: "The registrant's last name." email: type: - "string" - "null" description: "The registrant's email address." phone_number: type: - "string" - "null" description: "The registrant's phone number." company: type: - "string" - "null" description: "The registrant's company name." job_title: type: - "string" - "null" description: "The registrant's job title." country: type: - "string" - "null" description: "The registrant's country." registered_at: type: - "string" - "null" format: "date-time" description: "When the registrant registered in ISO 8601 format." attended_at: type: - "string" - "null" format: "date-time" description: "When the registrant joined the live event in ISO 8601 format." attendance_status: type: - "string" - "null" description: "Whether the registrant attended the event." restriction_status: type: - "string" - "null" description: "The registrant's restriction status (e.g., approved, blocked)." origin_method: type: - "string" - "null" description: "How the registrant was added (e.g., registration_form, import)." utm_campaign: type: - "string" - "null" description: "The UTM campaign that referred this registrant." utm_source: type: - "string" - "null" description: "The UTM source that referred this registrant." utm_medium: type: - "string" - "null" description: "The UTM medium that referred this registrant." referrer_domain: type: - "string" - "null" description: "The referring domain for this registrant." ip_country: type: - "string" - "null" description: "The registrant's country based on IP geolocation." ip_city: type: - "string" - "null" description: "The registrant's city based on IP geolocation." engagement_rate: type: - "number" - "null" format: "float" description: "The registrant's engagement rate during the event (between 0 and 1)." focused_rate: type: - "number" - "null" format: "float" description: "The registrant's focused viewing rate during the event (between 0 and 1)." played_time: type: - "integer" - "null" description: "Total time the registrant watched in seconds." focused_played_time: type: - "integer" - "null" description: "Total time the registrant watched with the tab focused in seconds." chat_count: type: - "integer" - "null" description: "The number of chat messages sent by this registrant." annotation_click_count: type: - "integer" - "null" description: "The number of annotation clicks by this registrant." poll_responses_count: type: - "integer" - "null" description: "The number of poll responses submitted by this registrant." attendee_histogram: type: - "array" - "null" items: type: - "integer" - "null" description: "Per-bucket attendance data for this registrant." focused_attendee_histogram: type: - "array" - "null" items: type: - "integer" - "null" description: "Per-bucket focused attendance data for this registrant." chats: type: - "array" items: type: "object" unevaluatedProperties: false properties: rounded_player_position: type: "integer" description: "The approximate position in the event when the chat was sent (in seconds)." chats: type: "array" items: type: "string" description: "The chat message content." description: "Chat messages sent by this registrant with timestamps." unevaluatedProperties: false page_info: type: "object" unevaluatedProperties: false properties: has_next_page: type: "boolean" description: "Whether there are more results after this page." has_previous_page: type: "boolean" description: "Whether there are results before this page." end_cursor: type: - "string" - "null" description: "Cursor to use for fetching the next page." start_cursor: type: - "string" - "null" description: "Cursor to use for fetching the previous page." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Webinar not found or does not belong to account" content: {} "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsWebinar" x-speakeasy-name-override: "getAudience" /analytics/webinars/{webinarId}/histograms: get: summary: "Show Webinar Histograms" description: "Retrieve engagement histogram data for a webinar. Returns arrays of\nper-time-bucket counts for attendees, chat activity, and visual focus,\nuseful for rendering engagement visualizations.\n\n\n## Requires api token with one of the following permissions\n```\nRead detailed stats\n```\n\nTokens with the \"Act with a team member's permissions\" permission\n(`all:delegate_to_contact_permissions` scope) can also be used. Requests\nmade with such a token are authorized using the permissions of the\ncontact assigned to the token.\n\n" tags: - "Analytics:Webinar" security: - BearerAuth: [] parameters: - name: "webinarId" in: "path" description: "The hashed ID of the webinar." required: true schema: type: "string" description: "The hashed ID of the webinar (e.g., \"abc123xyz\")" responses: "200": description: "Success response with webinar histogram data." content: application/json: schema: type: "object" unevaluatedProperties: false properties: attendees_histogram: type: "array" items: type: "number" description: "Per-time-bucket attendee counts. Each element represents the number of attendees in a 10-second bucket." chat_histogram: type: "array" items: type: "number" description: "Per-time-bucket chat message counts. Each element represents the number of chat messages in a 10-second bucket." visual_focus_played_histogram: type: "array" items: type: "number" description: "Per-time-bucket visual focus counts. Each element represents the number of attendees with the tab focused in a 10-second bucket." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Webinar not found or does not belong to account" content: {} "409": description: "The event has not yet reached a terminal state. Analytics are only available after the event has ended." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Aggregate analytics are not available until the event has ended" description: "Error message indicating the event has not ended." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" x-speakeasy-group: "analyticsWebinar" x-speakeasy-name-override: "getHistograms" components: schemas: CommonUploadProperties: type: "object" properties: project_id: description: "The hashed id of the project to upload media into." type: "string" name: description: "A display name to use for the media in Wistia." type: "string" maxLength: 255 description: description: "A description to use for the media in Wistia." type: "string" contact_id: description: "A Wistia contact id." type: "integer" access_token: description: "A 64 character hex string. This parameter can be found on your API access page OR can be the token you received from authenticating via Oauth2. Note this approach is legacy and discouraged. We recommend using Bearer Token authentication." type: "string" deprecated: true Thumbnail: type: "object" properties: url: type: "string" width: type: "integer" height: type: "integer" unevaluatedProperties: false cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." ReviewBundle: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this review bundle." name: type: "string" examples: - "My Review Bundle Title" description: "The bundle display name." url: type: "string" examples: - "https://[your-domain].wistia.com/reviews/bundles/1234567890" description: "The URL of the bundle." allow_downloads: type: "boolean" description: "Whether the videos in the bundle can be downloaded." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." ReviewBundleCreateParams: type: "object" unevaluatedProperties: false properties: media_hashed_ids: type: "array" examples: - "abc123" - "abc124" items: type: "string" description: "The hashed ids of the media to include in the bundle. Limited to 25 media." name: type: "string" examples: - "My Review Bundle Title" description: "The bundle display name." allow_downloads: type: "boolean" description: "Whether the videos in the bundle can be downloaded." required: - "media_hashed_ids" - "name" DeletedMedia: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." name: type: "string" examples: - "My deleted video" description: "The media display name." type: type: "string" examples: - "Video" description: "The type of media (e.g. Video, Audio)." duration: type: - "number" - "null" description: "The length of the media in seconds." deleted_at: type: "string" examples: - "2026-06-20T18:47:39+00:00" format: "date-time" description: "When the media was deleted, in ISO 8601 format." restore_expires_at: type: "string" examples: - "2026-07-20T18:47:39+00:00" format: "date-time" description: "The deadline after which this media is permanently purged and can no longer be restored (deleted_at plus the account's restore window)." folder: type: - "object" - "null" unevaluatedProperties: false properties: hashed_id: type: "string" name: type: - "string" - "null" description: "The folder the media will return to if restored without an explicit target. Null if the original folder was also deleted." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." RestoreDeletedMediaParams: type: "object" unevaluatedProperties: false properties: media_hashed_ids: type: "array" examples: - "abc123" - "abc124" items: type: "string" description: "The hashed ids of the soft-deleted media to restore. Up to 1000 at a time." folder_id: type: "string" examples: - "folder123" description: "Optional hashed id of the folder to restore the media into. If omitted, each media returns to the folder it was deleted from." required: - "media_hashed_ids" RestoreDeletedMediaResponse: type: "object" unevaluatedProperties: false properties: message: type: "string" examples: - "Restoring 3 media." background_job_status: type: "object" unevaluatedProperties: false properties: id: type: "integer" hashed_id: type: "string" status: type: "string" examples: - "queued" MediaPropertiesMixin: type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" Folder: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." IncludesFolderMixin: type: "object" properties: folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." - type: "null" unevaluatedProperties: false required: - "folder" Asset: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A direct-access URL to the content of the asset." width: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The width of this specific asset, if applicable." height: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The height of this specific asset, if applicable." file_size: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The size of the asset file that’s referenced by url, measured in bytes." content_type: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The asset’s content type." type: type: "string" 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.\n" IncludesAssetsMixin: type: "object" properties: assets: type: "array" items: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A direct-access URL to the content of the asset." width: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The width of this specific asset, if applicable." height: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The height of this specific asset, if applicable." file_size: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The size of the asset file that’s referenced by url, measured in bytes." content_type: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The asset’s content type." type: type: "string" 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.\n" description: "An array of the assets available for this media." SubfolderMixin: type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." IncludesSubfolderMixin: type: "object" properties: subfolder: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." unevaluatedProperties: false description: "The subfolder (media group) in which the media appears. Null if the media is not in a subfolder." IncludesTagsMixin: type: "object" properties: tags: type: "array" items: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The display name of the tag." description: "Tags associated with this media." TranscriptSpeakerAssignment: type: "object" unevaluatedProperties: false properties: media_speaker_id: type: "string" description: "The unique identifier for this transcript speaker assignment on the media." speaker_profile_id: type: "string" description: "The reusable account speaker profile assigned to the transcript speaker." name: type: "string" description: "The assigned speaker profile's display name." required: - "media_speaker_id" - "speaker_profile_id" - "name" IncludesSpeakersMixin: type: "object" properties: speakers: type: "array" items: type: "object" unevaluatedProperties: false properties: media_speaker_id: type: "string" description: "The unique identifier for this transcript speaker assignment on the media." speaker_profile_id: type: "string" description: "The reusable account speaker profile assigned to the transcript speaker." name: type: "string" description: "The assigned speaker profile's display name." required: - "media_speaker_id" - "speaker_profile_id" - "name" description: "Active transcript speaker assignments used for diarization. Webinar hosts and panelists are not included. Present when `include=speakers` is requested." HasCursorMixin: type: "object" properties: cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." MediaIndex: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" - type: "object" properties: folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." - type: "null" unevaluatedProperties: false required: - "folder" - type: "object" properties: assets: type: "array" items: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A direct-access URL to the content of the asset." width: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The width of this specific asset, if applicable." height: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The height of this specific asset, if applicable." file_size: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The size of the asset file that’s referenced by url, measured in bytes." content_type: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The asset’s content type." type: type: "string" 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.\n" description: "An array of the assets available for this media." - type: "object" properties: subfolder: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." unevaluatedProperties: false description: "The subfolder (media group) in which the media appears. Null if the media is not in a subfolder." - type: "object" properties: tags: type: "array" items: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The display name of the tag." description: "Tags associated with this media." - type: "object" properties: speakers: type: "array" items: type: "object" unevaluatedProperties: false properties: media_speaker_id: type: "string" description: "The unique identifier for this transcript speaker assignment on the media." speaker_profile_id: type: "string" description: "The reusable account speaker profile assigned to the transcript speaker." name: type: "string" description: "The assigned speaker profile's display name." required: - "media_speaker_id" - "speaker_profile_id" - "name" description: "Active transcript speaker assignments used for diarization. Webinar hosts and panelists are not included. Present when `include=speakers` is requested." - type: "object" properties: cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." unevaluatedProperties: false MediaShow: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" - type: "object" properties: folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." - type: "null" unevaluatedProperties: false required: - "folder" - type: "object" properties: assets: type: "array" items: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A direct-access URL to the content of the asset." width: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The width of this specific asset, if applicable." height: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The height of this specific asset, if applicable." file_size: oneOf: - type: "integer" - type: "null" unevaluatedProperties: false description: "The size of the asset file that’s referenced by url, measured in bytes." content_type: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The asset’s content type." type: type: "string" 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.\n" description: "An array of the assets available for this media." - type: "object" properties: subfolder: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." unevaluatedProperties: false description: "The subfolder (media group) in which the media appears. Null if the media is not in a subfolder." - type: "object" properties: tags: type: "array" items: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The display name of the tag." description: "Tags associated with this media." - type: "object" properties: speakers: type: "array" items: type: "object" unevaluatedProperties: false properties: media_speaker_id: type: "string" description: "The unique identifier for this transcript speaker assignment on the media." speaker_profile_id: type: "string" description: "The reusable account speaker profile assigned to the transcript speaker." name: type: "string" description: "The assigned speaker profile's display name." required: - "media_speaker_id" - "speaker_profile_id" - "name" description: "Active transcript speaker assignments used for diarization. Webinar hosts and panelists are not included. Present when `include=speakers` is requested." unevaluatedProperties: false MediaUpdate: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" - type: "object" properties: tags: type: "array" items: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The display name of the tag." description: "Tags associated with this media." unevaluatedProperties: false MediaDestroy: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" unevaluatedProperties: false MediaCopy: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" - type: "object" properties: folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." - type: "null" unevaluatedProperties: false required: - "folder" unevaluatedProperties: false BackgroundJobStatusMixin: type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" BackgroundJobStatus: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false AsyncJobResponseMixin: type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" Media: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" unevaluatedProperties: false AsyncJobResponse: allOf: - type: "object" properties: message: type: "string" description: "A confirmation message that the background job has been queued." background_job_status: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" unevaluatedProperties: false required: - "message" - "background_job_status" unevaluatedProperties: false VideoCustomizationResponse: type: "object" unevaluatedProperties: false properties: playerColor: type: "string" description: "The color of the video player." stillUrl: type: "string" autoPlay: type: "string" description: "Whether the video should auto play or not." bpbTime: type: "string" controlsVisibleOnLoad: type: "string" endVideoBehavior: type: "string" description: "Behavior of the video at the end." fullscreenButton: type: "string" branding: type: "string" playbar: type: "string" playButton: type: "string" description: "Indicates if the play button is visible." 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: type: "string" description: "String representation of whether the key moments feature is enabled." plugin: type: "object" unevaluatedProperties: true properties: passwordProtectedVideo: type: "object" unevaluatedProperties: false properties: on: type: "string" src: type: "string" challenge: type: "string" async: type: "string" videoThumbnail: type: "object" unevaluatedProperties: false properties: clickToPlayButton: type: "string" socialbar-v1: type: "object" unevaluatedProperties: false properties: buttons: type: "string" showTweetCount: type: "string" tweetText: type: "string" height: type: "string" chapters: type: "object" unevaluatedProperties: false properties: visibleOnLoad: type: "string" chapterList: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" on: type: "string" postRoll-v1: type: "object" unevaluatedProperties: false properties: rewatch: type: "string" description: "String representation of whether the video can be rewatched." text: type: "string" description: "The URL of the text to be displayed." link: type: "string" description: "The URL of the link to be displayed." time: type: "string" description: "The time when the post-roll should be displayed as a string." autoSize: type: "string" description: "String representation of whether the post-roll will automatically adjust its size." style: type: "object" unevaluatedProperties: false properties: backgroundColor: type: "string" description: "The background color of the post-roll." ctaType: type: "string" description: "The type of call-to-action to be displayed." on: type: "string" description: "String representation of whether the post-roll is enabled." conversionOpportunityKey: type: "string" description: "The key used for tracking conversion opportunities." description: "Adds a Call To Action to your Video (response format)" captions-v1: type: "object" unevaluatedProperties: false properties: on: type: "string" description: "String representation of whether the captions plugin is enabled (\"true\" or \"false\")." onByDefault: type: "string" description: "String representation of whether captions are turned on by default (\"true\" or \"false\")." description: "Captions plugin configuration (response format)" description: "Container for player plugin configurations. Plugin keys are extensible and\nnot strictly validated; the documented sub-objects represent the most\ncommon plugins.\n" private: type: "object" unevaluatedProperties: false properties: password_protect_on: type: "string" show_comments: type: "string" encrypted: type: "object" unevaluatedProperties: false properties: password_protect_password: type: "string" VideoCustomization: type: "object" unevaluatedProperties: false properties: autoPlay: type: "boolean" 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." controlsVisibleOnLoad: type: "boolean" description: "If set to true, controls like the big play button, playbar, volume, etc. will be visible as soon as the video is embedded." copyLinkAndThumbnailEnabled: type: "boolean" description: "If set to false, the option to “Copy Link and Thumbnail” will be removed when right-clicking on the video." doNotTrack: type: "boolean" description: "If set to true, data for each viewing session will not be tracked." email: type: "string" description: "Associate a specific email address with this video’s viewing sessions." endVideoBehavior: type: "string" 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)." fakeFullscreen: type: "boolean" description: "If set to true, the video will try to play in a pseudo-fullscreen mode on certain mobile devices." fitStrategy: type: "string" 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." fullscreenButton: type: "boolean" description: "If set to true, the fullscreen button will be available as a video control." fullscreenOnRotateToLandscape: type: "boolean" description: "If set to false, the video will not automatically go to fullscreen mode on mobile when rotated to landscape." keyMoments: type: "boolean" description: "If set to false, the key moments feature will be disabled." muted: type: "boolean" description: "If set to true, the video will start in a muted state." playbackRateControl: type: "boolean" description: "If set to false, the playback speed controls in the settings menu will be hidden." playbar: type: "boolean" description: "If set to true, the playbar will be available. If set to false, it will be hidden." playButton: type: "boolean" description: "Indicates if the play button is visible." playerColor: type: "string" description: "Changes the base color of the player. Expects a hexadecimal rgb string." playlistLinks: type: "boolean" description: "Enables the use of specially crafted links on the page to associate with a video, turning them into a playlist." playlistLoop: type: "boolean" 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." playsinline: type: "boolean" description: "If set to false, videos will play within the native mobile player." playPauseNotifier: type: "boolean" description: "If set to false, animations for the Pause and Play symbols will be removed." playSuspendedOffScreen: type: "boolean" description: "If set to false for a muted autoplay video, the video won't pause when out of view." plugin: type: "object" unevaluatedProperties: false properties: videoThumbnail: type: "object" unevaluatedProperties: false properties: clickToPlayButton: type: "boolean" description: "If set to false, removes the “Click to Play” button on video thumbnails." socialbar-v1: type: "object" unevaluatedProperties: false properties: buttons: type: "string" showTweetCount: type: "boolean" tweetText: type: "string" height: type: "integer" chapters: type: "object" unevaluatedProperties: false properties: visibleOnLoad: type: "boolean" chapterList: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" on: type: "boolean" postRoll-v1: type: "object" unevaluatedProperties: false properties: rewatch: type: "boolean" description: "If set to true, allows the video to be rewatched." text: type: "string" description: "The URL of the text to be displayed." link: type: "string" description: "The URL of the link to be displayed." time: oneOf: - type: "string" - type: "number" unevaluatedProperties: false description: "The time when the post-roll should be displayed. Can be a string like \"end\" or a number representing seconds." autoSize: type: "boolean" description: "If set to true, the post-roll will automatically adjust its size." style: type: "object" unevaluatedProperties: false properties: backgroundColor: type: "string" examples: - "#303030" description: "The background color of the post-roll." ctaType: type: "string" examples: - "text" description: "The type of call-to-action to be displayed. Typically set to \"text\". Other options are \"image\" which allows for \"altText\", and \"html\"." on: type: "boolean" description: "If set to true, the post-roll is enabled." conversionOpportunityKey: type: "string" description: "The key used for tracking conversion opportunities." description: "Adds a Call To Action to your Video" captions-v1: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the captions plugin is enabled and captions controls will be available to viewers." onByDefault: type: "boolean" description: "If set to true, captions will be turned on automatically when the video loads. Only takes effect when the captions plugin is enabled." description: "Enables closed captions for the video" preload: type: "string" description: "Sets the video’s preload property. Possible values are metadata, auto, none, true, and false." qualityControl: type: "boolean" description: "If set to false, the video quality selector in the settings menu will be hidden." qualityMax: type: "integer" description: "Specifies the maximum quality the video will play at." qualityMin: type: "integer" description: "Specifies the minimum quality the video will play at." resumable: type: "string" description: "Determines if the video should resume from where the viewer left off. Options are true, false, and auto." seo: type: "boolean" description: "If set to true, the video’s metadata will be injected into the page’s markup for SEO." settingsControl: type: "boolean" description: "If set to true, the settings control will be available." silentAutoPlay: type: "string" description: "Determines how videos handle autoplay in contexts where normal autoplay might be blocked. Options are true, allow, and false." smallPlayButton: type: "boolean" stillUrl: type: "string" description: "Overrides the thumbnail image that appears before the video plays." time: type: "string" description: "Sets the starting time of the video." thumbnailAltText: type: "string" description: "Sets the Thumbnail Alt Text for the media." videoFoam: anyOf: - type: "boolean" examples: - true - type: "object" unevaluatedProperties: false properties: minWidth: type: "integer" description: "Minimum width the video can be resized to." maxWidth: type: "integer" description: "Maximum width the video can be resized to." minHeight: type: "integer" description: "Minimum height the video can be resized to." maxHeight: type: "integer" description: "Maximum height the video can be resized to." description: "Examples:\n```json\n{\n \"minWidth\": 400,\n \"maxWidth\": 960\n}\n```\n```json\n{\n \"minHeight\": 300,\n \"maxHeight\": 450\n}\n```\n" unevaluatedProperties: false 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." volume: type: "number" description: "Sets the volume of the video." volumeControl: type: "boolean" description: "When set to true, a volume control is available over the video." wmode: type: "string" description: "If set to transparent, the background behind the player will be transparent instead of black." description: "A collection of settings you can apply to a video to change its appearance and\nbehavior.\n" AppearanceCustomizationResponse: type: "object" unevaluatedProperties: false properties: playerColor: type: "string" playerColorGradient: type: "object" unevaluatedProperties: false properties: on: type: "string" colors: type: "array" items: type: "array" roundedPlayer: type: "string" opaqueControls: type: "string" contrastIcons: type: "string" branding: type: "string" showCustomerLogo: type: "string" customerLogoImageUrl: type: "string" customerLogoTargetUrl: type: "string" customerLogoPlacement: type: "string" customerLogoSizePercent: type: "string" description: "Explicitly-set appearance customizations for the video. Values are returned\nas strings (e.g. \"true\", \"12\"); fields that have never been set are omitted.\n" AppearanceCustomization: type: "object" unevaluatedProperties: false properties: playerColor: type: "string" examples: - "2949E5" description: "Base color of the player as a hexadecimal RGB string (no leading '#')." playerColorGradient: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "Whether the gradient is enabled." colors: type: "array" items: type: "array" description: "Ordered list of [hex color, stop] pairs defining the gradient." description: "Optional gradient applied to the player color." roundedPlayer: type: "integer" description: "Corner radius of the player in pixels. 0 disables rounding." opaqueControls: type: "boolean" description: "If true, player controls render on an opaque background." contrastIcons: type: "boolean" description: "If true, control icons use a higher-contrast treatment." branding: type: "boolean" description: "If false, Wistia branding is hidden on the player." showCustomerLogo: type: "boolean" description: "If true, your customer logo is shown on the player." customerLogoImageUrl: type: "string" description: "URL of the customer logo image to display on the player." customerLogoTargetUrl: type: "string" description: "URL the customer logo links to when clicked." customerLogoPlacement: type: "string" description: "Placement of the customer logo on the player (e.g. top-right)." customerLogoSizePercent: type: "integer" description: "Size of the customer logo as a percentage of the player." description: "Player visual identity & branding for a video. Every field is optional; only\nthe fields you send are changed (partial update). Send a field as null to\nreset it to its default.\n" PlaybackCustomizationResponse: type: "object" unevaluatedProperties: false properties: autoPlay: type: "string" silentAutoPlay: type: "string" muted: type: "string" volume: type: "string" controlsVisibleOnLoad: type: "string" playButton: type: "string" smallPlayButton: type: "string" playbar: type: "string" volumeControl: type: "string" fullscreenButton: type: "string" settingsControl: type: "string" playbackRateControl: type: "string" qualityControl: type: "string" qualityMin: type: "string" qualityMax: type: "string" videoQuality: type: "string" hls: type: "string" endVideoBehavior: type: "string" playsinline: type: "string" playlistLoop: type: "string" playlistLinks: type: "string" playPauseNotifier: type: "string" playSuspendedOffScreen: type: "string" resumable: type: "string" preload: type: "string" time: type: "string" keyMoments: type: "string" fullscreenOnRotateToLandscape: type: "string" fakeFullScreen: type: "string" videoFoam: anyOf: - type: "string" - type: "object" unevaluatedProperties: false properties: minWidth: type: "string" maxWidth: type: "string" minHeight: type: "string" maxHeight: type: "string" unevaluatedProperties: false description: "Either a string (e.g. \"true\") when set as a boolean, or an object with\nstring-valued min/max width/height when set as a responsive-size config.\n" wmode: type: "string" bpbTime: type: "string" spherical: type: "string" clickForSound: oneOf: - type: "string" - type: "object" unevaluatedProperties: true unevaluatedProperties: false seo: type: "string" doNotTrack: type: "string" copyLinkAndThumbnailEnabled: type: "string" email: type: "string" googleAnalytics: type: "string" description: "Explicitly-set playback customizations for the video. Values are returned as\nstrings (e.g. \"true\", \"12\"); fields that have never been set are omitted.\n" PlaybackCustomization: type: "object" unevaluatedProperties: false properties: autoPlay: type: "boolean" 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." silentAutoPlay: type: "string" description: "Determines how videos handle autoplay in contexts where normal autoplay might be blocked. Options are \"true\", \"allow\", and \"false\"." muted: type: "boolean" description: "If set to true, the video will start in a muted state." volume: type: "number" description: "Sets the volume of the video." controlsVisibleOnLoad: type: "boolean" description: "If set to true, controls like the big play button, playbar, volume, etc. will be visible as soon as the video is embedded." playButton: type: "boolean" description: "Indicates if the play button is visible." smallPlayButton: type: "boolean" description: "If set to true, the small play button control is shown." playbar: type: "boolean" description: "If set to true, the playbar will be available. If set to false, it will be hidden." volumeControl: type: "boolean" description: "When set to true, a volume control is available over the video." fullscreenButton: type: "boolean" description: "If set to true, the fullscreen button will be available as a video control." settingsControl: type: "boolean" description: "If set to true, the settings control will be available." playbackRateControl: type: "boolean" description: "If set to false, the playback speed controls in the settings menu will be hidden." qualityControl: type: "boolean" description: "If set to false, the video quality selector in the settings menu will be hidden." qualityMin: type: "integer" description: "Specifies the minimum quality the video will play at." qualityMax: type: "integer" description: "Specifies the maximum quality the video will play at." videoQuality: type: "string" description: "Sets the default video quality the video will play at." hls: type: "boolean" description: "If set to true, HLS adaptive bitrate streaming is enabled." endVideoBehavior: type: "string" 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)." playsinline: type: "boolean" description: "If set to false, videos will play within the native mobile player." playlistLoop: type: "boolean" 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." playlistLinks: type: "boolean" description: "Enables the use of specially crafted links on the page to associate with a video, turning them into a playlist." playPauseNotifier: type: "boolean" description: "If set to false, animations for the Pause and Play symbols will be removed." playSuspendedOffScreen: type: "boolean" description: "If set to false for a muted autoplay video, the video won’t pause when out of view." resumable: type: "string" description: "Determines if the video should resume from where the viewer left off. Options are \"true\", \"false\", and \"auto\"." preload: type: "string" description: "Sets the video’s preload property. Possible values are metadata, auto, none, true, and false." time: type: "string" description: "Sets the starting time of the video." keyMoments: type: "boolean" description: "If set to false, the key moments feature will be disabled." fullscreenOnRotateToLandscape: type: "boolean" description: "If set to false, the video will not automatically go to fullscreen mode on mobile when rotated to landscape." fakeFullScreen: type: "boolean" description: "If set to true, the video will try to play in a pseudo-fullscreen mode on certain mobile devices." videoFoam: anyOf: - type: "boolean" examples: - true - type: "object" unevaluatedProperties: false properties: minWidth: type: "integer" description: "Minimum width the video can be resized to." maxWidth: type: "integer" description: "Maximum width the video can be resized to." minHeight: type: "integer" description: "Minimum height the video can be resized to." maxHeight: type: "integer" description: "Maximum height the video can be resized to." description: "Examples:\n```json\n{\n \"minWidth\": 400,\n \"maxWidth\": 960\n}\n```\n```json\n{\n \"minHeight\": 300,\n \"maxHeight\": 450\n}\n```\n" unevaluatedProperties: false 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." wmode: type: "string" description: "If set to transparent, the background behind the player will be transparent instead of black." bpbTime: type: "string" description: "Controls when the big play button appears, expressed as a string." spherical: type: "boolean" description: "If set to true, the video is rendered as a spherical (360-degree) video." clickForSound: type: "boolean" description: "If set to true, viewers can click to enable sound on a muted video." seo: type: "boolean" description: "If set to true, the video’s metadata will be injected into the page’s markup for SEO." doNotTrack: type: "boolean" description: "If set to true, data for each viewing session will not be tracked." copyLinkAndThumbnailEnabled: type: "boolean" description: "If set to false, the option to “Copy Link and Thumbnail” will be removed when right-clicking on the video." email: type: "string" description: "Associate a specific email address with this video’s viewing sessions." googleAnalytics: type: "string" description: "Google Analytics tracking configuration to associate with this video’s viewing sessions." description: "Playback behavior and player controls for a video. Every field is optional;\nonly the fields you send are changed (partial update). Send a field as null\nto reset it to its default.\n" ThumbnailCustomizationResponse: type: "object" unevaluatedProperties: false properties: stillUrl: type: "string" thumbnailAltText: type: "string" fitStrategy: type: "string" unalteredStillImageAsset: oneOf: - type: "string" - type: "object" unevaluatedProperties: true unevaluatedProperties: false plugin: type: "object" unevaluatedProperties: true properties: videoThumbnail: type: "object" unevaluatedProperties: true properties: clickToPlayButton: type: "string" clickForSound: type: "string" hashedId: type: "string" trimStart: type: "string" trimEnd: type: "string" priorityMode: type: "string" thumbnailTextOverlay-v2: type: "object" unevaluatedProperties: true properties: on: type: "string" text: type: "string" description: "Explicitly-set thumbnail customizations for the video. Values are returned\nas strings (e.g. \"true\"); fields that have never been set are omitted.\n" ThumbnailCustomization: type: "object" unevaluatedProperties: false properties: stillUrl: type: "string" description: "Overrides the thumbnail image that appears before the video plays." thumbnailAltText: type: "string" description: "Alt text for the thumbnail image, used for accessibility." fitStrategy: type: "string" description: "Resizes the thumbnail when there's a discrepancy between its aspect ratio and that of its parent container. Options are contain, cover, fill, and none." unalteredStillImageAsset: type: "string" description: "Reference to the original, unaltered still image asset." plugin: type: "object" unevaluatedProperties: false properties: videoThumbnail: type: "object" unevaluatedProperties: false properties: clickToPlayButton: type: "boolean" description: "If set to false, removes the “Click to Play” button on video thumbnails." clickForSound: type: "boolean" description: "If set to true, shows a click-for-sound affordance on the video thumbnail." hashedId: type: "string" description: "The hashed ID of the media used as the looping video thumbnail." trimStart: type: "string" description: "Start time of the trimmed clip used as the video thumbnail." trimEnd: type: "string" description: "End time of the trimmed clip used as the video thumbnail." priorityMode: type: "string" description: "Priority mode controlling how the video thumbnail is loaded." description: "Looping video thumbnail (a short clip used as the poster)." thumbnailTextOverlay-v2: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the text overlay is enabled." text: type: "string" description: "The text displayed in the overlay." description: "Text overlay rendered on top of the thumbnail." description: "Container for thumbnail-related player plugin configurations." description: "Pre-play poster image and looping video thumbnail / text-overlay plugins for\na video. Every field is optional; only the fields you send are changed\n(partial update). Send a field as null to reset it to its default.\n" AccessibilityCustomizationResponse: type: "object" unevaluatedProperties: false properties: captionsBackgroundColor: type: "string" captionsBorderRadius: type: "string" captionsTextColor: type: "string" captionsTextSize: type: "string" captionsFontFamily: type: "string" transcriptEnabled: type: "string" showTranscriptSpeakers: type: "string" audioDescriptionControl: type: "string" plugin: type: "object" unevaluatedProperties: true properties: captions: type: "object" unevaluatedProperties: true properties: on: type: "string" onByDefault: type: "string" captions-v1: type: "object" unevaluatedProperties: true properties: on: type: "string" onByDefault: type: "string" extendedAudioDescription: type: "object" unevaluatedProperties: true properties: on: type: "string" description: "Explicitly-set accessibility customizations for the video. Values are\nreturned as strings (e.g. \"true\", \"12\"); fields that have never been set are\nomitted.\n" AccessibilityCustomization: type: "object" unevaluatedProperties: false properties: captionsBackgroundColor: type: "string" examples: - "000000" description: "Background color of the captions as a hexadecimal RGB string (no leading '#')." captionsBorderRadius: type: "integer" description: "Corner radius of the captions background in pixels." captionsTextColor: type: "string" examples: - "ffffff" description: "Color of the captions text as a hexadecimal RGB string (no leading '#')." captionsTextSize: type: "integer" description: "Size of the captions text in pixels." captionsFontFamily: type: "string" description: "Font family used for the captions text." transcriptEnabled: type: "boolean" description: "If true, the interactive transcript is shown alongside the video." showTranscriptSpeakers: type: "boolean" description: "If true, speaker labels are displayed in the transcript." audioDescriptionControl: type: "boolean" description: "If true, the audio description control is available to viewers." plugin: type: "object" unevaluatedProperties: false properties: captions: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the captions plugin is enabled and captions controls will be available to viewers." onByDefault: type: "boolean" description: "If set to true, captions will be turned on automatically when the video loads. Only takes effect when the captions plugin is enabled." description: "Modern captions plugin configuration." captions-v1: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the captions plugin is enabled and captions controls will be available to viewers." onByDefault: type: "boolean" description: "If set to true, captions will be turned on automatically when the video loads. Only takes effect when the captions plugin is enabled." description: "Enables closed captions for the video." extendedAudioDescription: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the extended audio description plugin is enabled." description: "Enables an extended audio description track for the video." description: "Accessibility customizations for a video: caption display & styling,\ntranscript display, and audio description. Every field is optional; only the\nfields you send are changed (partial update). Send a field as null to reset\nit to its default.\n" ChaptersCustomizationResponse: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: chapters: type: "object" unevaluatedProperties: true properties: on: type: "string" visibleOnLoad: type: "string" chapterList: type: "array" items: type: "object" unevaluatedProperties: true properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" audioChapters: type: "object" unevaluatedProperties: true properties: on: type: "string" visibleOnLoad: type: "string" chapterList: type: "array" items: type: "object" unevaluatedProperties: true properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" description: "Explicitly-set chapter customizations. Values are returned as strings.\n" ChaptersCustomization: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: false properties: chapters: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "Whether chapters are enabled." visibleOnLoad: type: "boolean" description: "Whether the chapter list is visible when the player loads." chapterList: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" title: type: "string" time: type: "string" description: "Start time of the chapter, in seconds." deleted: type: "string" description: "The ordered list of chapters." audioChapters: type: "object" unevaluatedProperties: false properties: on: type: "boolean" visibleOnLoad: type: "boolean" chapterList: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" title: type: "string" time: type: "string" deleted: type: "string" description: "Table-of-contents chapters for the media. Use the `chapters` plugin for\nvideo and `audioChapters` for audio. Partial update; send a field as null to\nclear it.\n" EngagementCustomizationResponse: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: postRoll-v1: type: "object" unevaluatedProperties: true properties: rewatch: type: "string" text: type: "string" link: type: "string" time: type: "string" autoSize: type: "string" style: type: "object" unevaluatedProperties: true properties: backgroundColor: type: "string" ctaType: type: "string" on: type: "string" conversionOpportunityKey: type: "string" midrollLink-v1: type: "object" unevaluatedProperties: true properties: on: type: "string" links: type: "array" items: type: "object" unevaluatedProperties: true properties: text: type: "string" url: type: "string" time: type: "string" duration: type: "string" conversionOpportunityKey: type: "string" description: "Explicitly-set engagement customizations for the video. Values are returned\nas strings (e.g. \"true\"); fields that have never been set are omitted.\n" EngagementCustomization: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: false properties: postRoll-v1: type: "object" unevaluatedProperties: false properties: rewatch: type: "boolean" description: "If set to true, allows the video to be rewatched." text: type: "string" description: "The text to be displayed." link: type: "string" description: "The URL of the link to be displayed." time: oneOf: - type: "string" - type: "number" unevaluatedProperties: false description: "The time when the post-roll should be displayed. Can be a string like \"end\" or a number representing seconds." autoSize: type: "boolean" description: "If set to true, the post-roll will automatically adjust its size." style: type: "object" unevaluatedProperties: false properties: backgroundColor: type: "string" examples: - "#303030" description: "The background color of the post-roll." ctaType: type: "string" examples: - "text" description: "The type of call-to-action to be displayed. Typically set to \"text\". Other options are \"image\" which allows for \"altText\", and \"html\"." on: type: "boolean" description: "If set to true, the post-roll is enabled." conversionOpportunityKey: type: "string" description: "The key used for tracking conversion opportunities." description: "Adds a Call To Action to your Video." midrollLink-v1: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "If set to true, the timed annotation links are enabled." links: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" description: "The text of the annotation link." url: type: "string" description: "The URL the annotation link points to." time: type: "string" description: "The time (in seconds) at which the link appears." duration: type: "string" description: "How long (in seconds) the link remains visible." description: "The set of annotation links." description: "Timed annotation links that appear over the video at specific times." description: "Container for engagement plugin configurations." description: "On-video engagement settings for a video: the end/pause Call To Action\n(postRoll-v1) and timed annotation links (midrollLink-v1). Every field is\noptional; only the fields you send are changed (partial update). Send a field\nas null to reset it to its default.\n" RelatedMediaCustomizationResponse: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: relatedMedia: type: "object" unevaluatedProperties: true properties: on: type: "string" hashedIdList: type: "array" items: type: "string" shouldShowOnPause: type: "string" shouldShowOnEnd: type: "string" mediaLabelText: type: "string" watchButtonText: type: "string" description: "Explicitly-set related-media customizations for the video. Values are\nreturned as strings (e.g. \"true\"); fields that have never been set are\nomitted.\n" RelatedMediaCustomization: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: false properties: relatedMedia: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "Whether related-media recommendations are enabled." hashedIdList: type: "array" items: type: "string" description: "Ordered list of media hashed IDs to recommend." shouldShowOnPause: type: "boolean" description: "If true, recommendations are shown when the video is paused." shouldShowOnEnd: type: "boolean" description: "If true, recommendations are shown when the video ends." mediaLabelText: type: "string" description: "Label text displayed above the recommended media." watchButtonText: type: "string" description: "Text shown on the watch button for a recommended media." description: "Configuration for the related-media recommendations plugin." description: "Related-media (\"discover more\") recommendations shown on the video. Every\nfield is optional; only the fields you send are changed (partial update).\nSend a field as null to reset it to its default.\n" SharingCustomizationResponse: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: share: type: "object" unevaluatedProperties: true properties: on: type: "string" channels: type: "array" items: type: "string" tweetText: type: "string" downloadType: type: "string" overrideUrl: type: "string" pageUrl: type: "string" pageTitle: type: "string" conversionOpportunityKey: type: "string" description: "Explicitly-set sharing customizations for the video. Values are returned as\nstrings (e.g. \"true\"); fields that have never been set are omitted.\n" SharingCustomization: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: false properties: share: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "Whether the share bar is enabled." channels: type: "array" items: type: "string" enum: - "embed" - "email" - "download" - "facebook" - "twitter" - "linkedIn" description: "Complete ordered list of share channels to enable on the share bar. This replaces the entire list — include every channel you want active. To enable downloads, include \"download\" here AND set downloadType." tweetText: type: "string" description: "Default text used when sharing the video to X/Twitter." downloadType: type: "string" enum: - "sd_mp4" - "hd_mp4" - "original" - "all_qualities" description: "Which download quality is offered to viewers. Only takes effect when \"download\" is included in the channels array." overrideUrl: type: "string" description: "URL used in place of the default share URL." pageUrl: type: "string" description: "URL of the page the share bar should reference." pageTitle: type: "string" description: "Title of the page the share bar should reference." conversionOpportunityKey: type: "string" description: "The key used for tracking conversion opportunities. Managed by Wistia when the share bar is enabled." description: "Configuration for the share bar plugin." description: "Social/embed/download share bar for a video. Every field is optional; only\nthe fields you send are changed (partial update). Send a field as null to\nreset it to its default.\n" LeadCaptureCustomizationResponse: type: "object" unevaluatedProperties: false properties: plugin: type: "object" unevaluatedProperties: true properties: requireEmail-v1: type: "object" unevaluatedProperties: true properties: on: type: "string" form: type: "object" unevaluatedProperties: true properties: on: type: "string" hubspotForm: type: "object" unevaluatedProperties: true properties: on: type: "string" marketoForm: type: "object" unevaluatedProperties: true properties: on: type: "string" pardotForm: type: "object" unevaluatedProperties: true properties: on: type: "string" description: "Explicitly-set lead-capture plugins for the video. Values are returned as\nstrings. Plugin contents are extensible, so additional keys may be present.\n" LeadCaptureCustomization: type: "object" unevaluatedProperties: false properties: provider: type: "string" enum: - "wistia_form" - "hubspot" - "marketo" - "pardot" description: "Which lead-capture mechanism to configure." enabled: type: "boolean" description: "Whether the selected provider is turned on. Defaults to true." settings: type: "object" unevaluatedProperties: false properties: time: type: "string" description: "When the form appears: \"start\"/\"before\", a number of seconds, or \"end\"." allowSkip: type: "boolean" description: "Whether the viewer may skip the form." hashedId: type: "string" description: "(Wistia Form) The hashed ID of the Wistia form to embed." displayMode: type: "string" description: "(Wistia Form) How the form is displayed." showLogo: type: "boolean" description: "(Wistia Form) Whether to show the Wistia logo on the form." backgroundColor: type: "string" description: "Background color of the form as a hex string." formId: type: "string" description: "(HubSpot/Marketo/Pardot) The external form identifier." portalId: type: "string" description: "(HubSpot) The HubSpot portal/account identifier." description: "Provider-specific settings. Only the fields relevant to the chosen provider are used." required: - "provider" description: "Configure viewer email collection for a video using a single provider\ndiscriminator. Choose a provider, whether it is enabled, and provider-specific\nsettings. Which settings apply depends on the provider (e.g. a Wistia Form\nuses hashedId; CRM providers reference an external form).\n" AccessCustomizationResponse: type: "object" unevaluatedProperties: false properties: private: type: "object" unevaluatedProperties: false properties: password_protect_on: type: "string" encrypted: type: "object" unevaluatedProperties: false properties: password_protect_password: type: "string" plugin: type: "object" unevaluatedProperties: true properties: passwordProtectedVideo: type: "object" unevaluatedProperties: true properties: on: type: "string" challenge: type: "string" src: type: "string" async: type: "string" description: "Explicitly-set password-protection settings. Values are returned as strings.\nIncludes the stored password under `encrypted` (redaction tracked in sc-65366).\n" AccessCustomization: type: "object" unevaluatedProperties: false properties: private: type: "object" unevaluatedProperties: false properties: password_protect_on: type: "boolean" description: "Whether password protection is enabled for the video." encrypted: type: "object" unevaluatedProperties: false properties: password_protect_password: type: "string" description: "The password viewers must enter. Stored encrypted; also returned by the show endpoint." plugin: type: "object" unevaluatedProperties: false properties: passwordProtectedVideo: type: "object" unevaluatedProperties: false properties: on: type: "boolean" description: "Whether the password-protection plugin is enabled." challenge: type: "string" description: "Optional challenge/prompt text shown to viewers." src: type: "string" description: "Internal source marker for the protection plugin." async: type: "boolean" description: "Whether the password check is performed asynchronously." description: "Password-protection settings for a video. Partial update; send a field as\nnull to clear it. The password you send is stored encrypted.\n" Visibility: type: "string" enum: - "unlocked" - "account" - "locked" - "domain_verified" description: "Controls who can view the media via this share link.\n\n- `unlocked`: anyone with the link can view the media.\n- `account`: only signed-in members of the media's account can view.\n- `locked`: only contacts with access to the media's folder can view.\n- `domain_verified`: only viewers signed in with an email address at a\n domain verified on the media's account can view. Requires the account\n to be enrolled in the domain validation gate; otherwise setting this\n value returns 400.\n" ShareLink: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "The hashed ID of the share link. This appears in the link's URL." media_id: type: "string" description: "The hashed ID of the media this share link points to." url: type: "string" format: "uri" description: "The full URL viewers can use to view the media via this share link." slug: type: - "string" - "null" description: "The share link's custom slug, if one is set. When present, the slug\nreplaces the hashed ID in the link's URL.\n" visibility: type: "string" enum: - "unlocked" - "account" - "locked" - "domain_verified" description: "Controls who can view the media via this share link.\n\n- `unlocked`: anyone with the link can view the media.\n- `account`: only signed-in members of the media's account can view.\n- `locked`: only contacts with access to the media's folder can view.\n- `domain_verified`: only viewers signed in with an email address at a\n domain verified on the media's account can view. Requires the account\n to be enrolled in the domain validation gate; otherwise setting this\n value returns 400.\n" created_at: type: "string" format: "date-time" description: "When the share link was created." updated_at: type: "string" format: "date-time" description: "When the share link was last updated." required: - "id" - "media_id" - "url" - "slug" - "visibility" - "created_at" - "updated_at" description: "A shareable link for a single media. Each media can have at most one\nshare link, and the link's `visibility` controls who can view the\nmedia when visiting the link.\n" ShareLinkUpdate: type: "object" unevaluatedProperties: false properties: visibility: type: "string" enum: - "unlocked" - "account" - "locked" - "domain_verified" description: "Controls who can view the media via this share link.\n\n- `unlocked`: anyone with the link can view the media.\n- `account`: only signed-in members of the media's account can view.\n- `locked`: only contacts with access to the media's folder can view.\n- `domain_verified`: only viewers signed in with an email address at a\n domain verified on the media's account can view. Requires the account\n to be enrolled in the domain validation gate; otherwise setting this\n value returns 400.\n" required: - "visibility" description: "Fields that can be set when updating a share link." CaptionSegment: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" description: "The segment's start offset from the beginning of the media, in milliseconds." end_ms: type: "integer" description: "The segment's end offset from the beginning of the media, in milliseconds." text: type: "string" description: "The segment's transcript text." required: - "start_ms" - "end_ms" - "text" DiarizedCaptionSpeaker: type: "object" unevaluatedProperties: false properties: media_speaker_id: type: - "string" - "null" description: "The media-specific speaker assignment identifier, or null for an unidentified turn." speaker_profile_id: type: - "string" - "null" description: "The reusable account speaker-profile identifier, or null for an unidentified turn." detected_speaker_id: type: - "string" - "null" description: "The anonymous detected-speaker identifier that can be assigned, or null once resolved or when unknown." display_label: type: "string" description: "The resolved name, a display-only generic label, or `Unknown speaker`. Speakers are numbered by when they first appear in the transcript. Assigning a name does not renumber the other speakers, so generic labels may start at `Speaker 2` or skip numbers. Use `detected_speaker_id` as the identifier." name: type: - "string" - "null" description: "The assigned speaker profile's name, or null for an unidentified turn." required: - "media_speaker_id" - "speaker_profile_id" - "detected_speaker_id" - "display_label" - "name" DiarizedCaptionSegment: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" description: "The speaker-turn segment's start offset from the beginning of the media, in milliseconds." end_ms: type: "integer" description: "The speaker-turn segment's end offset from the beginning of the media, in milliseconds." text: type: "string" description: "Transcript text attributed to this speaker turn." speaker: type: "object" unevaluatedProperties: false properties: media_speaker_id: type: - "string" - "null" description: "The media-specific speaker assignment identifier, or null for an unidentified turn." speaker_profile_id: type: - "string" - "null" description: "The reusable account speaker-profile identifier, or null for an unidentified turn." detected_speaker_id: type: - "string" - "null" description: "The anonymous detected-speaker identifier that can be assigned, or null once resolved or when unknown." display_label: type: "string" description: "The resolved name, a display-only generic label, or `Unknown speaker`. Speakers are numbered by when they first appear in the transcript. Assigning a name does not renumber the other speakers, so generic labels may start at `Speaker 2` or skip numbers. Use `detected_speaker_id` as the identifier." name: type: - "string" - "null" description: "The assigned speaker profile's name, or null for an unidentified turn." required: - "media_speaker_id" - "speaker_profile_id" - "detected_speaker_id" - "display_label" - "name" required: - "start_ms" - "end_ms" - "text" - "speaker" Caption: type: "object" unevaluatedProperties: false properties: english_name: type: "string" description: "English name of the language." native_name: type: "string" description: "Native name of the language." language: type: "string" description: "A 3 character language code as specified by ISO-639–2." text: type: - "string" - "null" description: "The text of the captions for the specified language in SRT format." is_draft: type: "boolean" id: type: "string" description: "The unique hashed identifier of the time-coded transcript." media_id: type: "string" description: "The hashed ID of the media the captions belong to." version: type: - "integer" - "null" description: "The active caption payload version, or null when no payload is active." segments: type: - "array" - "null" items: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" description: "The segment's start offset from the beginning of the media, in milliseconds." end_ms: type: "integer" description: "The segment's end offset from the beginning of the media, in milliseconds." text: type: "string" description: "The segment's transcript text." required: - "start_ms" - "end_ms" - "text" description: "Time-coded caption cues when `include=segments`; null otherwise." diarized_segments: type: "array" items: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" description: "The speaker-turn segment's start offset from the beginning of the media, in milliseconds." end_ms: type: "integer" description: "The speaker-turn segment's end offset from the beginning of the media, in milliseconds." text: type: "string" description: "Transcript text attributed to this speaker turn." speaker: type: "object" unevaluatedProperties: false properties: media_speaker_id: type: - "string" - "null" description: "The media-specific speaker assignment identifier, or null for an unidentified turn." speaker_profile_id: type: - "string" - "null" description: "The reusable account speaker-profile identifier, or null for an unidentified turn." detected_speaker_id: type: - "string" - "null" description: "The anonymous detected-speaker identifier that can be assigned, or null once resolved or when unknown." display_label: type: "string" description: "The resolved name, a display-only generic label, or `Unknown speaker`. Speakers are numbered by when they first appear in the transcript. Assigning a name does not renumber the other speakers, so generic labels may start at `Speaker 2` or skip numbers. Use `detected_speaker_id` as the identifier." name: type: - "string" - "null" description: "The assigned speaker profile's name, or null for an unidentified turn." required: - "media_speaker_id" - "speaker_profile_id" - "detected_speaker_id" - "display_label" - "name" required: - "start_ms" - "end_ms" - "text" - "speaker" description: "Transcript text split at speaker-turn boundaries when `include=diarized_segments`. The media-level speaker timeline is shared across language tracks." diarization_status: type: "string" enum: - "ready" - "processing" - "unavailable" - "disabled" description: "Speaker-data availability when `include=diarized_segments`. Reading a derivable media\nwith no speaker data starts generating it and reports `processing`; read again shortly\nfor `ready`. `disabled` means the account has speaker identification turned off; an\naccount owner or manager can turn it on in Account Settings.\n" diarization_derivable: type: "boolean" description: "Whether speaker data can be generated from the active default transcript when `include=diarized_segments`. When false, the media stays `unavailable`." speaker_data_version: type: - "integer" - "null" description: "The concurrency version for speaker assignments when `include=diarized_segments`, or null when speaker data is unavailable." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "language" - "is_draft" - "id" - "media_id" - "version" - "segments" CaptionMatchesRequest: type: "object" unevaluatedProperties: false properties: media_ids: type: "array" items: type: "string" minLength: 1 maxItems: 50 minItems: 1 uniqueItems: true description: "Explicit hashed IDs of the media whose captions should be searched." target_text: type: "string" maxLength: 500 minLength: 1 description: "Exact caption wording to locate." language_code: type: "string" minLength: 1 description: "Exact IETF language tag. Omit when each media has only one caption track." occurrence: type: "integer" minimum: 1 description: "One-based exact occurrence to return, including occurrences after the first 10." start_ms: type: "integer" minimum: 0 description: "Optional start of a time range used to disambiguate the match." end_ms: type: "integer" minimum: 0 description: "Optional end of a time range used to disambiguate the match." required: - "media_ids" - "target_text" CaptionTrackMetadata: type: "object" unevaluatedProperties: false properties: id: type: "string" language: type: "string" english_name: type: - "string" - "null" native_name: type: - "string" - "null" version: type: - "integer" - "null" is_draft: type: "boolean" required: - "id" - "language" - "version" - "is_draft" CaptionTextMatch: type: "object" unevaluatedProperties: false properties: text: type: "string" context: type: "string" start_ms: type: "integer" end_ms: type: "integer" required: - "text" - "context" - "start_ms" - "end_ms" CaptionMatchResult: type: "object" unevaluatedProperties: false properties: media_hashed_id: type: "string" status: type: "string" enum: - "ok" - "media_not_found" - "invalid_media" - "no_tracks" - "language_required" - "track_not_found" - "no_active_payload" - "response_too_large" tracks: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" language: type: "string" english_name: type: - "string" - "null" native_name: type: - "string" - "null" version: type: - "integer" - "null" is_draft: type: "boolean" required: - "id" - "language" - "version" - "is_draft" track: type: "object" unevaluatedProperties: false properties: id: type: "string" language: type: "string" english_name: type: - "string" - "null" native_name: type: - "string" - "null" version: type: - "integer" - "null" is_draft: type: "boolean" required: - "id" - "language" - "version" - "is_draft" match_status: type: "string" enum: - "resolved" - "ambiguous" - "not_found" - "occurrence_not_found" match_count: type: "integer" description: "Total number of exact matches, including matches not present in this response page." matches: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" context: type: "string" start_ms: type: "integer" end_ms: type: "integer" required: - "text" - "context" - "start_ms" - "end_ms" description: "Exact matches only." matches_truncated: type: "boolean" next_occurrence: type: "integer" minimum: 1 description: "The next one-based occurrence that can be requested when exact matches are truncated." suggestions: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" context: type: "string" start_ms: type: "integer" end_ms: type: "integer" required: - "text" - "context" - "start_ms" - "end_ms" description: "Fuzzy alternatives when no exact match exists. These are not exact matches." suggestions_truncated: type: "boolean" hint: type: - "string" - "null" recovery: type: "string" required: - "media_hashed_id" - "status" CaptionMatchesResponse: type: "object" unevaluatedProperties: false properties: requested_count: type: "integer" succeeded_count: type: "integer" description: "Number of media whose transcript search was processed successfully, whether or not an exact match was found." failed_count: type: "integer" description: "Number of media that returned a non-ok per-media status." complete: type: "boolean" description: "True when every requested media ID was processed, including per-media negative results." results: type: "array" items: type: "object" unevaluatedProperties: false properties: media_hashed_id: type: "string" status: type: "string" enum: - "ok" - "media_not_found" - "invalid_media" - "no_tracks" - "language_required" - "track_not_found" - "no_active_payload" - "response_too_large" tracks: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "string" language: type: "string" english_name: type: - "string" - "null" native_name: type: - "string" - "null" version: type: - "integer" - "null" is_draft: type: "boolean" required: - "id" - "language" - "version" - "is_draft" track: type: "object" unevaluatedProperties: false properties: id: type: "string" language: type: "string" english_name: type: - "string" - "null" native_name: type: - "string" - "null" version: type: - "integer" - "null" is_draft: type: "boolean" required: - "id" - "language" - "version" - "is_draft" match_status: type: "string" enum: - "resolved" - "ambiguous" - "not_found" - "occurrence_not_found" match_count: type: "integer" description: "Total number of exact matches, including matches not present in this response page." matches: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" context: type: "string" start_ms: type: "integer" end_ms: type: "integer" required: - "text" - "context" - "start_ms" - "end_ms" description: "Exact matches only." matches_truncated: type: "boolean" next_occurrence: type: "integer" minimum: 1 description: "The next one-based occurrence that can be requested when exact matches are truncated." suggestions: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" context: type: "string" start_ms: type: "integer" end_ms: type: "integer" required: - "text" - "context" - "start_ms" - "end_ms" description: "Fuzzy alternatives when no exact match exists. These are not exact matches." suggestions_truncated: type: "boolean" hint: type: - "string" - "null" recovery: type: "string" required: - "media_hashed_id" - "status" required: - "requested_count" - "succeeded_count" - "failed_count" - "complete" - "results" Edit: type: "object" unevaluatedProperties: false properties: target_text: type: "string" description: "The exact transcript text to replace. Matched exactly after normalization (case, punctuation, and whitespace are ignored). Fuzzy matches are never applied — they are only returned as suggestions." replacement_text: type: "string" description: "The text to substitute for the target. Use an empty string to delete the target." start_ms: type: "integer" description: "Optional lower bound (inclusive, in the requested media's coordinate space) restricting the match to a time window. Must be sent with end_ms." end_ms: type: "integer" description: "Optional upper bound (inclusive) restricting the match to a time window. Must be sent with start_ms." required: - "target_text" - "replacement_text" EditsRequest: type: "object" unevaluatedProperties: false properties: edits: type: "array" items: type: "object" unevaluatedProperties: false properties: target_text: type: "string" description: "The exact transcript text to replace. Matched exactly after normalization (case, punctuation, and whitespace are ignored). Fuzzy matches are never applied — they are only returned as suggestions." replacement_text: type: "string" description: "The text to substitute for the target. Use an empty string to delete the target." start_ms: type: "integer" description: "Optional lower bound (inclusive, in the requested media's coordinate space) restricting the match to a time window. Must be sent with end_ms." end_ms: type: "integer" description: "Optional upper bound (inclusive) restricting the match to a time window. Must be sent with start_ms." required: - "target_text" - "replacement_text" maxItems: 20 minItems: 1 description: "The corrections to apply, all-or-nothing, in one new version." expected_version: type: "integer" description: "The active caption version returned with the caption content used to prepare these edits. The edit applies only if that is still the active version; otherwise it returns 409 so you re-read and retry." required: - "edits" - "expected_version" TimeRange: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" end_ms: type: "integer" required: - "start_ms" - "end_ms" AppliedEdit: type: "object" unevaluatedProperties: false properties: target_text: type: "string" description: "The target text that was sent." replacement_text: type: "string" description: "The replacement text that was sent (empty string for a deletion)." matched_text: type: "string" description: "The transcript text that actually matched (may differ from target_text only in normalization)." context: type: "string" description: "Surrounding transcript text for the match, for disambiguation." original: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" end_ms: type: "integer" required: - "start_ms" - "end_ms" description: "The matched span's time range, in the requested media's coordinate space." replacement: type: - "object" - "null" unevaluatedProperties: false properties: start_ms: type: "integer" end_ms: type: "integer" required: - "start_ms" - "end_ms" description: "The replacement span's new time range, or null when the target was deleted." required: - "target_text" - "replacement_text" - "matched_text" - "context" - "original" - "replacement" EditsResponse: type: "object" unevaluatedProperties: false properties: applied: type: "boolean" description: "Always true on a 200; the whole batch was applied." media_id: type: "string" description: "The hashed ID of the media whose transcript was edited. Differs from the path media when the transcript is projected from a composite recording." language: type: "string" description: "The ISO-639-2 language tag of the edited caption track." version: type: "object" unevaluatedProperties: false properties: from: type: "integer" to: type: "integer" required: - "from" - "to" description: "The caption version before and after the edit." edits: type: "array" items: type: "object" unevaluatedProperties: false properties: target_text: type: "string" description: "The target text that was sent." replacement_text: type: "string" description: "The replacement text that was sent (empty string for a deletion)." matched_text: type: "string" description: "The transcript text that actually matched (may differ from target_text only in normalization)." context: type: "string" description: "Surrounding transcript text for the match, for disambiguation." original: type: "object" unevaluatedProperties: false properties: start_ms: type: "integer" end_ms: type: "integer" required: - "start_ms" - "end_ms" description: "The matched span's time range, in the requested media's coordinate space." replacement: type: - "object" - "null" unevaluatedProperties: false properties: start_ms: type: "integer" end_ms: type: "integer" required: - "start_ms" - "end_ms" description: "The replacement span's new time range, or null when the target was deleted." required: - "target_text" - "replacement_text" - "matched_text" - "context" - "original" - "replacement" description: "One entry per applied edit, echoing what matched and where it landed." warnings: type: "array" items: type: "string" description: "Non-fatal advisories, usually empty. For a Remix output, these may identify source media whose transcripts can be edited." required: - "applied" - "media_id" - "language" - "version" - "edits" - "warnings" description: "The batch was applied and a new caption version was written." EditCandidate: type: "object" unevaluatedProperties: false properties: text: type: "string" description: "The candidate's transcript text." context: type: "string" description: "Surrounding transcript text, for disambiguation." start_ms: type: "integer" description: "The candidate span's start in the requested media's coordinate space." end_ms: type: "integer" description: "The candidate span's end in the requested media's coordinate space." required: - "text" - "context" - "start_ms" - "end_ms" EditFailure: type: "object" unevaluatedProperties: false properties: target_text: type: "string" description: "The target text of the edit that failed." reason: type: "string" enum: - "ambiguous" - "not_found" - "overlapping" - "spans_paragraph" description: "Why the edit could not be applied. `ambiguous`: matched more than once (disambiguate with a candidate's time range). `not_found`: no exact match (adopt a suggestion's exact text). `overlapping`: two edits target overlapping spans. `spans_paragraph`: the target crosses a paragraph or non-editable boundary." candidates: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" description: "The candidate's transcript text." context: type: "string" description: "Surrounding transcript text, for disambiguation." start_ms: type: "integer" description: "The candidate span's start in the requested media's coordinate space." end_ms: type: "integer" description: "The candidate span's end in the requested media's coordinate space." required: - "text" - "context" - "start_ms" - "end_ms" description: "For `ambiguous`, the exact occurrences to choose from (up to 10). For `not_found`, fuzzy suggestions to adopt verbatim (up to 3). Empty for other reasons. Times are in the requested media's coordinate space." hint: type: "string" description: "A short instruction for how to recover from this failure." required: - "target_text" - "reason" - "candidates" - "hint" EditFailures: type: "object" unevaluatedProperties: false properties: errors: type: "array" items: type: "string" description: "Human-readable summary of what went wrong." edit_failures: type: "array" items: type: "object" unevaluatedProperties: false properties: target_text: type: "string" description: "The target text of the edit that failed." reason: type: "string" enum: - "ambiguous" - "not_found" - "overlapping" - "spans_paragraph" description: "Why the edit could not be applied. `ambiguous`: matched more than once (disambiguate with a candidate's time range). `not_found`: no exact match (adopt a suggestion's exact text). `overlapping`: two edits target overlapping spans. `spans_paragraph`: the target crosses a paragraph or non-editable boundary." candidates: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" description: "The candidate's transcript text." context: type: "string" description: "Surrounding transcript text, for disambiguation." start_ms: type: "integer" description: "The candidate span's start in the requested media's coordinate space." end_ms: type: "integer" description: "The candidate span's end in the requested media's coordinate space." required: - "text" - "context" - "start_ms" - "end_ms" description: "For `ambiguous`, the exact occurrences to choose from (up to 10). For `not_found`, fuzzy suggestions to adopt verbatim (up to 3). Empty for other reasons. Times are in the requested media's coordinate space." hint: type: "string" description: "A short instruction for how to recover from this failure." required: - "target_text" - "reason" - "candidates" - "hint" description: "One entry per edit that could not be resolved." required: - "errors" - "edit_failures" description: "One or more edits could not be resolved, so nothing was written. Fix the listed failures and retry the whole batch." SourceMedia: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." name: type: "string" description: "The name of the media." duration: type: "number" description: "The duration of the media in seconds." created_at: type: "string" format: "date-time" description: "The date when the media was created." updated_at: type: "string" format: "date-time" description: "The date when the media was last updated." required: - "hashed_id" - "name" - "duration" - "created_at" - "updated_at" description: "The media that the localization is associated with." LocalizationTranscript: type: - "object" - "null" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this transcript." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." text: type: "string" description: "The text of the transcript." created_at: type: "string" format: "date-time" description: "The date when the transcript was created." updated_at: type: "string" format: "date-time" description: "The date when the transcript was last updated." required: - "hashed_id" - "language_name" - "native_language_name" - "text" - "created_at" - "updated_at" description: "The transcript for the localization. Selectively serialized in some endpoints. See properties for endpoint." LocalizationMixin: type: "object" properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this localization." language_code: type: "string" description: "A 3-character language code as specified by IETF." iso639_2_language_code: type: "string" description: "A 2-character language code as specified by ISO-639–2." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." created_at: type: "string" format: "date-time" description: "The date when the localization was created." updated_at: type: "string" format: "date-time" description: "The date when the localization was last updated." ordered_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was ordered." enabled_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was enabled." enabled: type: "boolean" description: "Whether or not the localization is enabled." source_media: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." name: type: "string" description: "The name of the media." duration: type: "number" description: "The duration of the media in seconds." created_at: type: "string" format: "date-time" description: "The date when the media was created." updated_at: type: "string" format: "date-time" description: "The date when the media was last updated." required: - "hashed_id" - "name" - "duration" - "created_at" - "updated_at" description: "The media that the localization is associated with." transcript: type: - "object" - "null" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this transcript." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." text: type: "string" description: "The text of the transcript." created_at: type: "string" format: "date-time" description: "The date when the transcript was created." updated_at: type: "string" format: "date-time" description: "The date when the transcript was last updated." required: - "hashed_id" - "language_name" - "native_language_name" - "text" - "created_at" - "updated_at" description: "The transcript for the localization. Selectively serialized in some endpoints. See properties for endpoint." 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" description: "A localization is a translation of a media into another language.\n" Localization: allOf: - type: "object" properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this localization." language_code: type: "string" description: "A 3-character language code as specified by IETF." iso639_2_language_code: type: "string" description: "A 2-character language code as specified by ISO-639–2." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." created_at: type: "string" format: "date-time" description: "The date when the localization was created." updated_at: type: "string" format: "date-time" description: "The date when the localization was last updated." ordered_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was ordered." enabled_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was enabled." enabled: type: "boolean" description: "Whether or not the localization is enabled." source_media: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." name: type: "string" description: "The name of the media." duration: type: "number" description: "The duration of the media in seconds." created_at: type: "string" format: "date-time" description: "The date when the media was created." updated_at: type: "string" format: "date-time" description: "The date when the media was last updated." required: - "hashed_id" - "name" - "duration" - "created_at" - "updated_at" description: "The media that the localization is associated with." transcript: type: - "object" - "null" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this transcript." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." text: type: "string" description: "The text of the transcript." created_at: type: "string" format: "date-time" description: "The date when the transcript was created." updated_at: type: "string" format: "date-time" description: "The date when the transcript was last updated." required: - "hashed_id" - "language_name" - "native_language_name" - "text" - "created_at" - "updated_at" description: "The transcript for the localization. Selectively serialized in some endpoints. See properties for endpoint." 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" description: "A localization is a translation of a media into another language.\n" unevaluatedProperties: false LocalizationWithPurchaseDataMixin: type: "object" properties: auto_enable_dubbing: type: "boolean" description: "Whether or not the dubbing will be automatically enabled when completed." expected_billed_minutes: type: - "number" - "null" description: "The expected number of minutes that will be billed for the dubbing." expected_billed_price_per_minute: type: - "number" - "string" - "null" description: "The expected price per minute that will be billed for the dubbing. Decimal prices are returned as strings." expected_billed_price: type: - "number" - "string" - "null" description: "The expected total price that will be billed for the dubbing. Decimal prices are returned as strings." expected_billed_credits: type: - "string" - "null" description: "The credits held for the dubbing, deducted when it completes. Null when the dubbing is not paid for with credits. Decimal amounts are returned as strings." billed_at: type: - "string" - "null" format: "date-time" description: "The date when the dubbing was billed." required: - "auto_enable_dubbing" - "expected_billed_minutes" - "expected_billed_price_per_minute" - "expected_billed_price" - "expected_billed_credits" - "billed_at" LocalizationWithPurchaseData: allOf: - type: "object" properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this localization." language_code: type: "string" description: "A 3-character language code as specified by IETF." iso639_2_language_code: type: "string" description: "A 2-character language code as specified by ISO-639–2." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." created_at: type: "string" format: "date-time" description: "The date when the localization was created." updated_at: type: "string" format: "date-time" description: "The date when the localization was last updated." ordered_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was ordered." enabled_at: type: - "string" - "null" format: "date-time" description: "The date when the localization was enabled." enabled: type: "boolean" description: "Whether or not the localization is enabled." source_media: type: "object" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." name: type: "string" description: "The name of the media." duration: type: "number" description: "The duration of the media in seconds." created_at: type: "string" format: "date-time" description: "The date when the media was created." updated_at: type: "string" format: "date-time" description: "The date when the media was last updated." required: - "hashed_id" - "name" - "duration" - "created_at" - "updated_at" description: "The media that the localization is associated with." transcript: type: - "object" - "null" unevaluatedProperties: false properties: hashed_id: type: "string" description: "A unique alphanumeric identifier for this transcript." language_name: type: "string" description: "The name of the language in English." native_language_name: type: "string" description: "The name of the language in the language of the localization." text: type: "string" description: "The text of the transcript." created_at: type: "string" format: "date-time" description: "The date when the transcript was created." updated_at: type: "string" format: "date-time" description: "The date when the transcript was last updated." required: - "hashed_id" - "language_name" - "native_language_name" - "text" - "created_at" - "updated_at" description: "The transcript for the localization. Selectively serialized in some endpoints. See properties for endpoint." 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" description: "A localization is a translation of a media into another language.\n" - type: "object" properties: auto_enable_dubbing: type: "boolean" description: "Whether or not the dubbing will be automatically enabled when completed." expected_billed_minutes: type: - "number" - "null" description: "The expected number of minutes that will be billed for the dubbing." expected_billed_price_per_minute: type: - "number" - "string" - "null" description: "The expected price per minute that will be billed for the dubbing. Decimal prices are returned as strings." expected_billed_price: type: - "number" - "string" - "null" description: "The expected total price that will be billed for the dubbing. Decimal prices are returned as strings." expected_billed_credits: type: - "string" - "null" description: "The credits held for the dubbing, deducted when it completes. Null when the dubbing is not paid for with credits. Decimal amounts are returned as strings." billed_at: type: - "string" - "null" format: "date-time" description: "The date when the dubbing was billed." required: - "auto_enable_dubbing" - "expected_billed_minutes" - "expected_billed_price_per_minute" - "expected_billed_price" - "expected_billed_credits" - "billed_at" unevaluatedProperties: false One: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" MediaExtendedAudioDescriptionMixin: type: "object" properties: id: type: "string" ietf_language_tag: type: "string" created_at: type: "string" format: "date-time" updated_at: type: "string" format: "date-time" media: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" provided_media_file: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" contact: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." MediaExtendedAudioDescription: allOf: - type: "object" properties: id: type: "string" ietf_language_tag: type: "string" created_at: type: "string" format: "date-time" updated_at: type: "string" format: "date-time" media: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" provided_media_file: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" contact: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." unevaluatedProperties: false MediaExtendedAudioDescriptionShowMixin: type: "object" properties: assets: type: "object" unevaluatedProperties: false properties: mp3_url: type: - "string" - "null" description: "URL to download the MP3 audio file." webvtt: type: - "string" - "null" description: "The WebVTT file contents with cue timings relative to the original video. Start and\nend times show when the text is relative to the scene\n" webvtt_extended: type: - "string" - "null" description: "The extended WebVTT file contents with timings that include pause durations. Start and\nend times correspond to when an audio description starts and ends. During this time\nthe video will be paused.\n" required: - "mp3_url" - "webvtt" - "webvtt_extended" description: "Download links for the audio description files." MediaExtendedAudioDescriptionShow: allOf: - type: "object" properties: id: type: "string" ietf_language_tag: type: "string" created_at: type: "string" format: "date-time" updated_at: type: "string" format: "date-time" media: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" provided_media_file: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" contact: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." - type: "object" properties: assets: type: "object" unevaluatedProperties: false properties: mp3_url: type: - "string" - "null" description: "URL to download the MP3 audio file." webvtt: type: - "string" - "null" description: "The WebVTT file contents with cue timings relative to the original video. Start and\nend times show when the text is relative to the scene\n" webvtt_extended: type: - "string" - "null" description: "The extended WebVTT file contents with timings that include pause durations. Start and\nend times correspond to when an audio description starts and ends. During this time\nthe video will be paused.\n" required: - "mp3_url" - "webvtt" - "webvtt_extended" description: "Download links for the audio description files." unevaluatedProperties: false MediaExtendedAudioDescriptionOrder: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "The hashed ID of the order. Use this to poll order status via the order_status endpoint." order_status: type: "string" enum: - "in_progress" - "completed" - "cancelled" - "failed" description: "The current status of the order." created_at: type: "string" format: "date-time" updated_at: type: "string" format: "date-time" ietf_language_tag: type: "string" description: "IETF language tag the audio description was ordered in (e.g. `eng`, `es-419`)." media: type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" media_extended_audio_description: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" - type: "null" unevaluatedProperties: false description: "Link to the resulting media extended audio description. Null while the order is in progress." required: - "id" - "order_status" - "ietf_language_tag" - "media" - "created_at" - "updated_at" BrandColor: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false BrandLogo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." Brand: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abcde12345" description: "A unique alphanumeric identifier for this brand." name: type: "string" examples: - "My Brand" description: "The brand's display name." is_default: type: "boolean" examples: - true description: "Whether this brand is the account-level default, applied to content that has no more specific brand." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date the brand was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date the brand was last updated." primary_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." page_background_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset." body_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for body text. Null when unset." headline_font_family: type: - "string" - "null" examples: - "GT Walsheim" description: "The brand font family for headlines. Null when unset." button_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for buttons. Null when unset." border_radius: type: - "integer" - "null" examples: - 10 description: "The border radius in pixels for rounded corners. Null when unset." contrast_icons: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls whether the player icon color is always white or uses an accessible contrast color when necessary." opaque_controls: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls the opacity of the video player control bar and big play button." page_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for pages. Null when unset." player_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for the player. Null when unset." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: "A brand is a saved set of branding options — colors, fonts, logos, and\nlayout — that can be applied to media, folders, and channels.\n" BrandCreateOrUpdateParams: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "My Brand" description: "The brand's display name. Renaming the account-level default brand is ignored; its name is managed by Wistia." primary_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples." page_background_color: oneOf: - type: "string" examples: - "#2949E5" - type: "array" items: type: "array" items: {} - type: "null" unevaluatedProperties: false description: "The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples." body_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for body text." headline_font_family: type: - "string" - "null" examples: - "GT Walsheim" description: "The brand font family for headlines." button_font_family: type: - "string" - "null" examples: - "Inter" description: "The brand font family for buttons." border_radius: type: - "integer" - "null" examples: - 10 description: "The border radius in pixels for rounded corners." contrast_icons: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls whether the player icon color is always white or uses an accessible contrast color when necessary." opaque_controls: type: - "string" - "null" enum: - "enabled" - "disabled" - "unset" - null description: "Controls the opacity of the video player control bar and big play button." page_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for pages. `url` must be a Wistia delivery URL — see the note on uploading below. On accounts without custom branding the player logo is ignored, but the page logo is always applied." player_logo: type: - "object" - "null" unevaluatedProperties: false properties: url: type: "string" description: "The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one." dimensions: type: - "object" - "null" unevaluatedProperties: false properties: width: type: "integer" height: type: "integer" size: type: - "number" - "null" description: "The size multiplier of the logo." description: "The brand logo used for the player. `url` must be a Wistia delivery URL — see the note on uploading below. Ignored on accounts whose plan doesn't include custom branding." description: "Brand attributes to write. Every field is optional on update and only the\nfields you send are changed — send an explicit `null` to unset one. `name`\nis required when creating a brand.\n\nThe writable field names match the ones a brand is read back with, so an\nedit can reuse the values from a `GET`. The read-only fields (`id`,\n`is_default`, `created`, `updated`) are not accepted here and must be\ndropped from a body built that way.\n\nColors accept three-character hex shorthand and store the expanded\nsix-character form, so `#abc` is read back as `#aabbcc`.\n\n**Logos cannot be uploaded through the API.** `page_logo.url` and\n`player_logo.url` must be Wistia delivery URLs\n(`https://embed-ssl.wistia.com/deliveries/.png`) for images already in\nthe account — for example a URL returned by a previous request to this\nendpoint. Any other URL is rejected, because the brand is applied by\nresolving that image out of Wistia's own storage. To add a new logo image,\nupload it in the Wistia app first.\n" BrandApplyParams: type: "object" unevaluatedProperties: false properties: resource_type: type: "string" enum: - "media" - "folder" - "channel" description: "The kind of resource being branded. Webinars can't be branded through this endpoint yet." resource_id: type: "string" examples: - "abcde12345" description: "The id of the resource being branded." clear_overrides: type: "boolean" description: "When true (the default), appearance settings the resource had set directly are cleared for the fields the brand controls, so the brand is what shows. Set to false to leave them in place, in which case they continue to win over the brand." default: true required: - "resource_type" - "resource_id" description: "The resource to apply the brand to.\n" Speaker: type: "object" unevaluatedProperties: false properties: speaker_profile_id: type: "string" examples: - "abc123def4" description: "The unique identifier for this reusable speaker profile." name: type: "string" examples: - "Alice Example" description: "The speaker's display name." title: type: - "string" - "null" examples: - "Product Manager" description: "The speaker's title." image_url: type: - "string" - "null" format: "uri" description: "The URL of the speaker's profile image." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "speaker_profile_id" - "name" - "title" - "image_url" description: "A reusable speaker profile in the account." Tag: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "My tag Title" description: "The tag's display name." taggings_count: type: "integer" examples: - 2 description: "The number of different medias that have been associated with this tag." created_at: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the tag was originally created." updated_at: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date that the tag was last updated." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: "A tag is used to tag related media. You can then filter media\nby a specific tag.\n" BulkAction: type: "object" unevaluatedProperties: false properties: operation: type: "string" enum: - "create" - "update" - "delete" - "move" description: "The operation to perform. Media creation is not supported here --\nuploads and URL imports have their own endpoints.\n\n`delete` also soft-deletes media inside a `folder` or `subfolder`. An\naccount owner or manager can restore it from the trash until it purges.\n\n`move` applies to `media` only, one action per media. Each action\ncarries its own destination, so a single request can move media into\nmany different folders.\n" resource_type: type: "string" enum: - "media" - "folder" - "subfolder" - "channel" - "channel_episode" - "captions" - "customization_access" - "customization_accessibility" - "customization_appearance" - "customization_chapters" - "customization_engagement" - "customization_lead_capture" - "customization_playback" - "customization_related_media" - "customization_sharing" - "customization_thumbnail" description: "The type of resource to operate on. `folder` means a top-level folder\n(previously called a project); use `subfolder` for a folder nested\ninside one. `captions` operates on a single caption track -- one media\nin one language.\n\nThe `customization_*` types each write one concern of a media's player\ncustomizations and accept `update` only. Their `id` is the media's\nhashed ID, and their payload matches the corresponding Update\nCustomizations endpoint (for example, `customization_appearance` takes\nthe same fields as Update Appearance Customizations). Sending a field\nanother concern owns fails that action rather than writing it, so a\nbatch can never quietly overwrite unrelated player settings.\n" id: type: "string" examples: - "abc123" description: "The hashed ID of the resource. Required for update, delete, and move\noperations.\n\nFor `captions` this is the caption track's own ID (the `id` field\nreturned by List Captions), not the media's -- a media can have a track\nper language.\n" payload: type: "object" unevaluatedProperties: true description: "The data for the operation. Required for create, update, and move\noperations.\nThe accepted fields depend on the resource type and match the corresponding\ncreate or update endpoint's request body (for example, a channel_episode\ncreate takes the same fields as the Create Channel Episode endpoint,\nincluding channel_id).\n\nCreating a subfolder requires `folder_id` (the parent folder's hashed ID)\nand `name`.\n\nCreating captions requires `media_id` and `caption_file` (the SRT\ncontents as a string; the multipart file upload the Create Captions\nendpoint accepts is not available here) and takes an optional\n`language`, detected from the file when omitted. Updating captions\ntakes `caption_file`; the track's language is fixed by the record.\nCreating captions for a language that already has a track replaces it,\nmatching the Create Captions endpoint.\n\nMoving a media requires `folder_id` (the destination folder's hashed ID)\nand accepts an optional `subfolder_id`, which must belong to that\nfolder. Omit `subfolder_id` to move the media to the folder's root\nlevel.\n\nA `customization_*` payload is a partial update of that concern only:\njust the fields you send are changed, and a field naming another\nconcern's setting fails the action.\n\nA `media` update payload can also carry a `custom_metadata` object\nmapping field keys to the values to set, in the same shapes the Set\nCustom Metadata Field Value endpoint accepts for each field's type. A\n`null` value clears that field; fields the object omits are left\nuntouched. Requires the custom metadata feature on the account, and\neach write is recorded with its actor and source.\n" required: - "operation" - "resource_type" description: "A single action within a bulk request." BulkScope: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "account" - "folder" - "subfolder" - "channel" - "media" description: "The kind of parent `id` names. Required, because a hashed ID does not say\nwhat it belongs to -- the same value could name a folder or a channel.\nUse `account` to mean every record the job could reach, with no `id`.\n" id: type: "string" examples: - "abc123" description: "The parent's hashed ID. Required for every scope type except `account`.\n" required: - "type" description: "The parent whose records the job applies to.\n\nWhich parent types are valid depends on the job's `resource_type` and\n`operation`:\n\n- `media` and the `customization_*` types: `account`, `folder`, `subfolder`,\n `channel`.\n- `captions` with `update` or `delete`, which address a caption track:\n `account`, `media`, `folder`, `channel`.\n- `channel_episode`: `account`, `channel`, `media`.\n- `subfolder`: `account`, `folder`.\n- `folder` and `channel`: `account`.\n\nAn invalid combination is rejected with the valid parents listed.\n" BulkJob: type: "object" unevaluatedProperties: false properties: operation: type: "string" enum: - "update" - "delete" - "move" description: "The operation to apply to every matching record. `create` is not\naccepted here.\n" resource_type: type: "string" enum: - "media" - "folder" - "subfolder" - "channel" - "channel_episode" - "captions" - "customization_access" - "customization_accessibility" - "customization_appearance" - "customization_chapters" - "customization_engagement" - "customization_lead_capture" - "customization_playback" - "customization_related_media" - "customization_sharing" - "customization_thumbnail" description: "The type of record to operate on, using the same vocabulary as a single\naction. Which parents are valid depends on it -- see `scope`.\n" scope: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "account" - "folder" - "subfolder" - "channel" - "media" description: "The kind of parent `id` names. Required, because a hashed ID does not say\nwhat it belongs to -- the same value could name a folder or a channel.\nUse `account` to mean every record the job could reach, with no `id`.\n" id: type: "string" examples: - "abc123" description: "The parent's hashed ID. Required for every scope type except `account`.\n" required: - "type" description: "The parent whose records the job applies to.\n\nWhich parent types are valid depends on the job's `resource_type` and\n`operation`:\n\n- `media` and the `customization_*` types: `account`, `folder`, `subfolder`,\n `channel`.\n- `captions` with `update` or `delete`, which address a caption track:\n `account`, `media`, `folder`, `channel`.\n- `channel_episode`: `account`, `channel`, `media`.\n- `subfolder`: `account`, `folder`.\n- `folder` and `channel`: `account`.\n\nAn invalid combination is rejected with the valid parents listed.\n" ids: type: "array" examples: - - "abc1234567" - "def8901234" items: type: "string" maxItems: 1000 minItems: 1 description: "The records to apply the change to, named explicitly. Use this instead of\n`scope` when the records do not share a parent -- it is still far cheaper\nthan one action each, since only the ids repeat and the payload is stated\nonce.\n\nGive either `scope` or `ids`, never both.\n" payload: type: "object" unevaluatedProperties: true description: "The data applied to every matching record, in the same shape a single\naction's payload takes for this resource type. Required for `update` and\n`move`.\n" required: - "operation" - "resource_type" description: "One change applied to many records, named by a parent (`scope`) or listed\nexplicitly (`ids`). The server resolves the target and runs one action per\nrecord, so a folder of 400 media takes one job rather than 400 actions.\n\nA `scope` resolves to exactly what the matching list endpoint returns for\nthat parent, including its defaults -- so a `folder` scope on `media` reaches\nmedia in that folder's subfolders, and includes **archived** media.\n\nA job resolves to at most 5000 records. Beyond that it is rejected rather\nthan truncated, so a job never silently acts on part of the set you named --\nnarrow the scope, or send the records as an actions array.\n\nCannot be used with `create`, which has no record to address, and is not\navailable to external contacts.\n" BulkRequest: type: "object" unevaluatedProperties: false properties: actions: type: "array" items: type: "object" unevaluatedProperties: false properties: operation: type: "string" enum: - "create" - "update" - "delete" - "move" description: "The operation to perform. Media creation is not supported here --\nuploads and URL imports have their own endpoints.\n\n`delete` also soft-deletes media inside a `folder` or `subfolder`. An\naccount owner or manager can restore it from the trash until it purges.\n\n`move` applies to `media` only, one action per media. Each action\ncarries its own destination, so a single request can move media into\nmany different folders.\n" resource_type: type: "string" enum: - "media" - "folder" - "subfolder" - "channel" - "channel_episode" - "captions" - "customization_access" - "customization_accessibility" - "customization_appearance" - "customization_chapters" - "customization_engagement" - "customization_lead_capture" - "customization_playback" - "customization_related_media" - "customization_sharing" - "customization_thumbnail" description: "The type of resource to operate on. `folder` means a top-level folder\n(previously called a project); use `subfolder` for a folder nested\ninside one. `captions` operates on a single caption track -- one media\nin one language.\n\nThe `customization_*` types each write one concern of a media's player\ncustomizations and accept `update` only. Their `id` is the media's\nhashed ID, and their payload matches the corresponding Update\nCustomizations endpoint (for example, `customization_appearance` takes\nthe same fields as Update Appearance Customizations). Sending a field\nanother concern owns fails that action rather than writing it, so a\nbatch can never quietly overwrite unrelated player settings.\n" id: type: "string" examples: - "abc123" description: "The hashed ID of the resource. Required for update, delete, and move\noperations.\n\nFor `captions` this is the caption track's own ID (the `id` field\nreturned by List Captions), not the media's -- a media can have a track\nper language.\n" payload: type: "object" unevaluatedProperties: true description: "The data for the operation. Required for create, update, and move\noperations.\nThe accepted fields depend on the resource type and match the corresponding\ncreate or update endpoint's request body (for example, a channel_episode\ncreate takes the same fields as the Create Channel Episode endpoint,\nincluding channel_id).\n\nCreating a subfolder requires `folder_id` (the parent folder's hashed ID)\nand `name`.\n\nCreating captions requires `media_id` and `caption_file` (the SRT\ncontents as a string; the multipart file upload the Create Captions\nendpoint accepts is not available here) and takes an optional\n`language`, detected from the file when omitted. Updating captions\ntakes `caption_file`; the track's language is fixed by the record.\nCreating captions for a language that already has a track replaces it,\nmatching the Create Captions endpoint.\n\nMoving a media requires `folder_id` (the destination folder's hashed ID)\nand accepts an optional `subfolder_id`, which must belong to that\nfolder. Omit `subfolder_id` to move the media to the folder's root\nlevel.\n\nA `customization_*` payload is a partial update of that concern only:\njust the fields you send are changed, and a field naming another\nconcern's setting fails the action.\n\nA `media` update payload can also carry a `custom_metadata` object\nmapping field keys to the values to set, in the same shapes the Set\nCustom Metadata Field Value endpoint accepts for each field's type. A\n`null` value clears that field; fields the object omits are left\nuntouched. Requires the custom metadata feature on the account, and\neach write is recorded with its actor and source.\n" required: - "operation" - "resource_type" description: "A single action within a bulk request." maxItems: 1000 minItems: 1 description: "An array of actions to process, one per record. Maximum 1000 actions per\nrequest, and the request body must stay under 2 MB -- whichever limit is\nreached first. An oversized body is rejected with a `413` and no action\nin it runs. Each action specifies an operation (create, update, delete,\nor move), a resource type, and the relevant payload or record ID.\n\nUse `job` instead when every record takes the same payload.\n" job: type: "object" unevaluatedProperties: false properties: operation: type: "string" enum: - "update" - "delete" - "move" description: "The operation to apply to every matching record. `create` is not\naccepted here.\n" resource_type: type: "string" enum: - "media" - "folder" - "subfolder" - "channel" - "channel_episode" - "captions" - "customization_access" - "customization_accessibility" - "customization_appearance" - "customization_chapters" - "customization_engagement" - "customization_lead_capture" - "customization_playback" - "customization_related_media" - "customization_sharing" - "customization_thumbnail" description: "The type of record to operate on, using the same vocabulary as a single\naction. Which parents are valid depends on it -- see `scope`.\n" scope: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "account" - "folder" - "subfolder" - "channel" - "media" description: "The kind of parent `id` names. Required, because a hashed ID does not say\nwhat it belongs to -- the same value could name a folder or a channel.\nUse `account` to mean every record the job could reach, with no `id`.\n" id: type: "string" examples: - "abc123" description: "The parent's hashed ID. Required for every scope type except `account`.\n" required: - "type" description: "The parent whose records the job applies to.\n\nWhich parent types are valid depends on the job's `resource_type` and\n`operation`:\n\n- `media` and the `customization_*` types: `account`, `folder`, `subfolder`,\n `channel`.\n- `captions` with `update` or `delete`, which address a caption track:\n `account`, `media`, `folder`, `channel`.\n- `channel_episode`: `account`, `channel`, `media`.\n- `subfolder`: `account`, `folder`.\n- `folder` and `channel`: `account`.\n\nAn invalid combination is rejected with the valid parents listed.\n" ids: type: "array" examples: - - "abc1234567" - "def8901234" items: type: "string" maxItems: 1000 minItems: 1 description: "The records to apply the change to, named explicitly. Use this instead of\n`scope` when the records do not share a parent -- it is still far cheaper\nthan one action each, since only the ids repeat and the payload is stated\nonce.\n\nGive either `scope` or `ids`, never both.\n" payload: type: "object" unevaluatedProperties: true description: "The data applied to every matching record, in the same shape a single\naction's payload takes for this resource type. Required for `update` and\n`move`.\n" required: - "operation" - "resource_type" description: "One change applied to many records, named by a parent (`scope`) or listed\nexplicitly (`ids`). The server resolves the target and runs one action per\nrecord, so a folder of 400 media takes one job rather than 400 actions.\n\nA `scope` resolves to exactly what the matching list endpoint returns for\nthat parent, including its defaults -- so a `folder` scope on `media` reaches\nmedia in that folder's subfolders, and includes **archived** media.\n\nA job resolves to at most 5000 records. Beyond that it is rejected rather\nthan truncated, so a job never silently acts on part of the set you named --\nnarrow the scope, or send the records as an actions array.\n\nCannot be used with `create`, which has no record to address, and is not\navailable to external contacts.\n" description: "A bulk request, in one of two shapes.\n\nSend `actions` when each record needs its own payload, and `job` when the\nsame change applies to every record under a parent. Provide exactly one of\nthem -- a request carrying both is rejected, and so is a request carrying\nneither. To make a mixed change, send two requests.\n" BulkPurchaseResourceType: type: "string" enum: - "captions" - "localization" - "extended_audio_description" - "text_translation" description: "What to order for the media.\n\n`captions` orders Wistia-generated English captions -- computer-generated\nor human-reviewed. `localization` orders a dubbed, language-specific\nversion of the media. `extended_audio_description` orders an extended\naudio description track. `text_translation` translates the media's\nexisting transcript into another language, leaving the audio alone.\n" BulkPurchaseAction: type: "object" unevaluatedProperties: false properties: operation: type: "string" enum: - "purchase" description: "Always `purchase`. This endpoint places orders only; to create, update,\nor delete records in bulk use the Create Bulk Actions endpoint, which\ndoes not accept `purchase`.\n" resource_type: type: "string" enum: - "captions" - "localization" - "extended_audio_description" - "text_translation" description: "What to order for the media.\n\n`captions` orders Wistia-generated English captions -- computer-generated\nor human-reviewed. `localization` orders a dubbed, language-specific\nversion of the media. `extended_audio_description` orders an extended\naudio description track. `text_translation` translates the media's\nexisting transcript into another language, leaving the audio alone.\n" id: type: "string" examples: - "abc123" description: "The hashed ID of the media to order for. Always the media's own ID: what\nthe order produces does not exist yet.\n" payload: type: "object" unevaluatedProperties: true description: "Order options. The accepted fields depend on the resource type and match\nthe corresponding single-media endpoint's request body. Omit it to take\nevery default.\n\n`captions` accepts `automated` (order computer-generated captions\ninstead of human-reviewed ones), `rush` (one business day turnaround\ninstead of four, human-reviewed only, at a higher per-minute rate), and\n`automatically_enable` (show the captions on the video as soon as they\nare ready). Each is treated as `false` when omitted or unrecognized.\nWhat each option costs depends on the account's plan and billing\nsettings.\n\n`localization` requires `output_language`, a 3-character IETF language\ncode, and accepts `auto_enable` (default `true`).\n\n`extended_audio_description` accepts `enabled` (default `true`),\n`ai_enabled` (default `true`), `ietf_language_tag` (default `eng`), and\n`order_instructions`.\n\n`text_translation` requires `target_language` and accepts\n`source_language` (which transcript to translate from, defaulting to the\nmedia's own language). Use the bibliographic ISO 639-2 form or a\nsupported regional or script IETF tag for either value.\n" required: - "operation" - "resource_type" - "id" description: "A single paid order within a bulk purchase request." BulkPurchaseScope: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "account" - "folder" - "subfolder" - "channel" description: "The kind of parent `id` names. Required, because a hashed ID does not say\nwhat it belongs to -- the same value could name a folder or a channel.\nUse `account` to order for every media in the account.\n" id: type: "string" examples: - "abc123" description: "The parent's hashed ID. Required for every scope type except `account`.\n" required: - "type" description: "The parent whose media the order applies to. An order always addresses the\nmedia, so the valid parent types are the same for every resource type here.\n" BulkPurchaseJob: type: "object" unevaluatedProperties: false properties: operation: type: "string" enum: - "purchase" description: "Always `purchase`." resource_type: type: "string" enum: - "captions" - "localization" - "extended_audio_description" - "text_translation" description: "What to order for the media.\n\n`captions` orders Wistia-generated English captions -- computer-generated\nor human-reviewed. `localization` orders a dubbed, language-specific\nversion of the media. `extended_audio_description` orders an extended\naudio description track. `text_translation` translates the media's\nexisting transcript into another language, leaving the audio alone.\n" scope: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "account" - "folder" - "subfolder" - "channel" description: "The kind of parent `id` names. Required, because a hashed ID does not say\nwhat it belongs to -- the same value could name a folder or a channel.\nUse `account` to order for every media in the account.\n" id: type: "string" examples: - "abc123" description: "The parent's hashed ID. Required for every scope type except `account`.\n" required: - "type" description: "The parent whose media the order applies to. An order always addresses the\nmedia, so the valid parent types are the same for every resource type here.\n" ids: type: "array" examples: - - "abc1234567" - "def8901234" items: type: "string" maxItems: 1000 minItems: 1 description: "The media to order for, named explicitly. Use this instead of `scope`\nwhen the media do not share a parent. Give either `scope` or `ids`, never\nboth.\n" payload: type: "object" unevaluatedProperties: true description: "Order options applied to every matching media, in the same shape a single\norder's payload takes for this resource type.\n" required: - "operation" - "resource_type" description: "One order placed for many media, named by a parent (`scope`) or listed\nexplicitly (`ids`), so ordering captions for a folder of 47 videos takes one\njob rather than 47 orders.\n\nA `scope` resolves to exactly what List Media returns for that parent,\nincluding media in the folder's subfolders and **archived** media, and to at\nmost 5000 media -- beyond that the job is rejected rather than truncated.\n\nThe job attempts one order for every media it resolves to. Ineligible media\nfail individually without placing an order; successful orders are metered\nand may incur charges according to the account's plan. Confirm the scope and\npotential cost with the customer before submitting. Not available to external\ncontacts.\n" BulkPurchaseRequest: type: "object" unevaluatedProperties: false properties: actions: type: "array" items: type: "object" unevaluatedProperties: false properties: operation: type: "string" enum: - "purchase" description: "Always `purchase`. This endpoint places orders only; to create, update,\nor delete records in bulk use the Create Bulk Actions endpoint, which\ndoes not accept `purchase`.\n" resource_type: type: "string" enum: - "captions" - "localization" - "extended_audio_description" - "text_translation" description: "What to order for the media.\n\n`captions` orders Wistia-generated English captions -- computer-generated\nor human-reviewed. `localization` orders a dubbed, language-specific\nversion of the media. `extended_audio_description` orders an extended\naudio description track. `text_translation` translates the media's\nexisting transcript into another language, leaving the audio alone.\n" id: type: "string" examples: - "abc123" description: "The hashed ID of the media to order for. Always the media's own ID: what\nthe order produces does not exist yet.\n" payload: type: "object" unevaluatedProperties: true description: "Order options. The accepted fields depend on the resource type and match\nthe corresponding single-media endpoint's request body. Omit it to take\nevery default.\n\n`captions` accepts `automated` (order computer-generated captions\ninstead of human-reviewed ones), `rush` (one business day turnaround\ninstead of four, human-reviewed only, at a higher per-minute rate), and\n`automatically_enable` (show the captions on the video as soon as they\nare ready). Each is treated as `false` when omitted or unrecognized.\nWhat each option costs depends on the account's plan and billing\nsettings.\n\n`localization` requires `output_language`, a 3-character IETF language\ncode, and accepts `auto_enable` (default `true`).\n\n`extended_audio_description` accepts `enabled` (default `true`),\n`ai_enabled` (default `true`), `ietf_language_tag` (default `eng`), and\n`order_instructions`.\n\n`text_translation` requires `target_language` and accepts\n`source_language` (which transcript to translate from, defaulting to the\nmedia's own language). Use the bibliographic ISO 639-2 form or a\nsupported regional or script IETF tag for either value.\n" required: - "operation" - "resource_type" - "id" description: "A single paid order within a bulk purchase request." maxItems: 1000 minItems: 1 description: "The orders to place, one per media. Maximum 1000 per request, and the\nrequest body must stay under 2 MB -- whichever limit is reached first. An\noversized body is rejected with a `413` and no order in it is placed.\n\nEvery order is priced and placed independently: one failing (an\nineligible media, an account without a saved card, a language that\nalready has a localization) does not stop the rest of the batch.\n\nUse `job` instead to order for a whole folder, channel, or account.\n" job: type: "object" unevaluatedProperties: false properties: operation: type: "string" enum: - "purchase" description: "Always `purchase`." resource_type: type: "string" enum: - "captions" - "localization" - "extended_audio_description" - "text_translation" description: "What to order for the media.\n\n`captions` orders Wistia-generated English captions -- computer-generated\nor human-reviewed. `localization` orders a dubbed, language-specific\nversion of the media. `extended_audio_description` orders an extended\naudio description track. `text_translation` translates the media's\nexisting transcript into another language, leaving the audio alone.\n" scope: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "account" - "folder" - "subfolder" - "channel" description: "The kind of parent `id` names. Required, because a hashed ID does not say\nwhat it belongs to -- the same value could name a folder or a channel.\nUse `account` to order for every media in the account.\n" id: type: "string" examples: - "abc123" description: "The parent's hashed ID. Required for every scope type except `account`.\n" required: - "type" description: "The parent whose media the order applies to. An order always addresses the\nmedia, so the valid parent types are the same for every resource type here.\n" ids: type: "array" examples: - - "abc1234567" - "def8901234" items: type: "string" maxItems: 1000 minItems: 1 description: "The media to order for, named explicitly. Use this instead of `scope`\nwhen the media do not share a parent. Give either `scope` or `ids`, never\nboth.\n" payload: type: "object" unevaluatedProperties: true description: "Order options applied to every matching media, in the same shape a single\norder's payload takes for this resource type.\n" required: - "operation" - "resource_type" description: "One order placed for many media, named by a parent (`scope`) or listed\nexplicitly (`ids`), so ordering captions for a folder of 47 videos takes one\njob rather than 47 orders.\n\nA `scope` resolves to exactly what List Media returns for that parent,\nincluding media in the folder's subfolders and **archived** media, and to at\nmost 5000 media -- beyond that the job is rejected rather than truncated.\n\nThe job attempts one order for every media it resolves to. Ineligible media\nfail individually without placing an order; successful orders are metered\nand may incur charges according to the account's plan. Confirm the scope and\npotential cost with the customer before submitting. Not available to external\ncontacts.\n" description: "A bulk purchase request, in one of two shapes.\n\nSend `actions` to name each media individually, and `job` to order for every\nmedia under a parent. Provide exactly one of them -- a request carrying both\nis rejected, and so is a request carrying neither.\n" Many: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A URL for fetching all child records of the parent record." Folder-2: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 22570 description: "A unique numeric identifier for the folder within the system." name: type: "string" examples: - "My Folder Title" description: "The folder’s display name." description: type: - "string" - "null" examples: - "About My Folder" description: "The folder’s description." media_count: type: "integer" examples: - 2 description: "The number of different medias that have been uploaded to the folder." medias: type: "object" unevaluatedProperties: false properties: url: type: "string" description: "A URL for fetching all child records of the parent record." description: "A link to where you can fetch the medias for this folder." created: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the folder was originally created." updated: type: "string" examples: - "2010-08-19T21:47:00+00:00" format: "date-time" description: "The date that the folder was last updated." hashed_id: type: "string" examples: - "4d23503f70" description: "A private hashed id, uniquely identifying the folder within the system." public: type: "boolean" examples: - false description: "A boolean indicating whether the folder is available for public (anonymous) viewing." public_id: type: - "string" - "null" examples: - "4bD" description: "If the folder is public, this field contains a string representing the ID used for referencing the folder in public URLs." anonymous_can_upload: type: "boolean" examples: - false anonymous_can_download: type: "boolean" examples: - false kind: type: "string" examples: - "shared" enum: - "library" - "shared" - "account" description: "Indicates the folder's access scope, relative to the requesting user. One of:\n- `library`: a library the requester owns. Libraries can still be shared with specific contacts or contact groups; the only restriction is that they cannot be shared with the whole account.\n- `shared`: a folder the requester has access to via a Contact or ContactGroup sharing — this includes both shared folders and another contact's library that the requester has been granted access to.\n- `account`: a folder shared with the whole account (everyone in the company can see it).\n" personal_library: type: "boolean" examples: - false description: "Whether this folder is someone's personal library (\"My Library\"). Unlike `kind`, this is a property of the folder itself and does not depend on who is requesting — it is `true` for a personal library even when that library has been shared with you (where `kind` would read `shared`). Use this, not `kind`, to tell whether a folder is a personal library.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "name" - "media_count" - "created" - "updated" - "hashed_id" - "public" - "public_id" - "kind" - "personal_library" - "medias" description: "A folder (previously called a project) is a container in which to organize media into. It can be\nused to set permissions that apply to all the media in the folder as well as\norganizing media into subfolders (previously called media groups).\n" CreateFolder: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "My New Folder" description: "The name of the folder you want to create." adminEmail: type: "string" examples: - "admin@example.com" description: "The email address of the person you want to set as the owner of this folder. Defaults to the Wistia Account Owner." description: type: "string" examples: - "My New Folder Description" description: "The folder’s description." anonymousCanUpload: type: "boolean" description: "Whether anonymous users can upload media to the folder." anonymousCanDownload: type: "boolean" description: "Whether anonymous users can download media from the folder." public: type: "boolean" examples: - false description: "A flag indicating whether or not the folder is enabled for public access." personalLibrary: type: "boolean" examples: - false description: "When true, creates the folder inside the requesting user's personal \"My Library\" (owned by them) instead of a shared account folder." UpdateFolder: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "My New Folder Name" description: "The folder’s new name." description: type: "string" examples: - "My New Folder Description" description: "The folder’s new description." anonymousCanUpload: type: "boolean" description: "Whether anonymous users can upload media to the folder." anonymousCanDownload: type: "boolean" description: "Whether anonymous users can download media from the folder." public: type: "boolean" examples: - false description: "A flag indicating whether or not the folder is enabled for public access." FolderSharingSchema: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 is_admin: type: "boolean" examples: - true can_share: type: "boolean" examples: - true can_download: type: "boolean" examples: - true can_upload: type: "boolean" examples: - true share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" email: type: "string" examples: - "jim@wistia.com" format: "email" required: - "id" - "name" - "type" folder: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 13 name: type: "string" examples: - "My Folder" required: - "id" - "name" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "is_admin" - "can_share" - "can_download" - "can_upload" - "share" - "folder" description: "A sharing is an object that links either a contact or a contact group to a folder, including information about the contacts' permissions to that folder.\n" CreateFolderSharing: type: "object" unevaluatedProperties: false properties: sharing: type: "object" unevaluatedProperties: false properties: with: type: "string" format: "email" description: "The email address of the person with whom you want to share the folder." requirePassword: type: "boolean" examples: - false description: "A flag indicating whether or not a password is required. Defaults to true." canShare: type: "boolean" examples: - false description: "Whether the user is allowed to share the folder with others. Defaults to false." canDownload: type: "boolean" examples: - false description: "Whether the user is allowed to download files from the folder. Defaults to false." canUpload: type: "boolean" examples: - false description: "Whether the user is allowed to upload files to the folder. Defaults to false." sendEmailNotification: type: "string" enum: - "0" - "1" description: "Deprecated! Email notifications are always sent now." deprecated: true required: - "with" required: - "sharing" CreateFolderSharingResponse: type: "object" unevaluatedProperties: false properties: project: type: "string" examples: - "http://myaccount.wistia.com/folders/13" format: "uri" description: "The URL of the folder that was shared." sharing: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 is_admin: type: "boolean" examples: - true can_share: type: "boolean" examples: - true can_download: type: "boolean" examples: - true can_upload: type: "boolean" examples: - true share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" email: type: "string" examples: - "jim@wistia.com" format: "email" required: - "id" - "name" - "type" folder: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 13 name: type: "string" examples: - "My Folder" required: - "id" - "name" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "is_admin" - "can_share" - "can_download" - "can_upload" - "share" - "folder" description: "A sharing is an object that links either a contact or a contact group to a folder, including information about the contacts' permissions to that folder.\n" description: "The response includes a link for the user to access the folder." UpdateSharingRequest: type: "object" unevaluatedProperties: false properties: sharing: type: "object" unevaluatedProperties: false properties: canShare: type: "boolean" description: "Allow the user or group to share the folder with others." canDownload: type: "boolean" description: "Allow the user or group to download media from the folder." canUpload: type: "boolean" description: "Allow the user or group to upload media to the folder." isAdmin: type: "boolean" description: "Give this user admin rights to the folder." Subfolder: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." unevaluatedProperties: false SubfolderInput: type: "object" unevaluatedProperties: false properties: name: type: "string" examples: - "Marketing Videos" maxLength: 255 description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" maxLength: 1000 description: "A description for the subfolder." required: - "name" description: "Input data for creating or updating a subfolder." SubfolderIncludesMediaMixin: type: "object" properties: medias: type: "array" items: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" unevaluatedProperties: false description: "Array of media files contained in this subfolder." SubfolderWithMedia: allOf: - type: "object" properties: hashed_id: type: - "string" - "null" examples: - "abc123def4" description: "A unique alphanumeric identifier for this subfolder." name: type: - "string" - "null" examples: - "Marketing Videos" description: "The display name of the subfolder." description: type: - "string" - "null" examples: - "Collection of all marketing and promotional videos" description: "A description for the subfolder." position: type: - "integer" - "null" examples: - 1 description: "The position of this subfolder within its folder, used for ordering." created: type: - "string" - "null" examples: - "2024-01-15T10:30:00+00:00" format: "date-time" description: "The date when the subfolder was created." updated: type: - "string" - "null" examples: - "2024-01-20T14:45:00+00:00" format: "date-time" description: "The date when the subfolder was last modified." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "hashed_id" - "position" - "created" - "updated" description: "A subfolder within a folder that contains media." - type: "object" properties: medias: type: "array" items: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" unevaluatedProperties: false description: "Array of media files contained in this subfolder." unevaluatedProperties: false description: "A subfolder with its contained media files." PodcastSettings: type: "object" unevaluatedProperties: false properties: copyright: type: - "string" - "null" description: "The channel's copyright information, published in the RSS feed as ``." episode_format: oneOf: - type: "string" enum: - "episodic" - "episodic_with_seasons" - "serial" - type: "null" unevaluatedProperties: false description: "The format for episodes for the podcast channel, published in the RSS feed as ``. `episodic_with_seasons` is published as `episodic`." author_name: type: - "string" - "null" description: "The name of the author(s) for the channel, published in the RSS feed as ``." explicit: type: - "boolean" - "null" description: "Whether the channel contains explicit content, published in the RSS feed as ``." owner_name: type: - "string" - "null" description: "The podcast owner's name, published in the channel's public RSS feed as ``. Podcast directories use this as the show's administrative contact." owner_email: type: - "string" - "null" description: "The podcast owner's email address, published in the channel's public RSS feed as ``. Podcast directories such as Apple Podcasts require it for ownership verification." category1: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The primary category for the channel, published in the RSS feed as ``." category2: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The secondary category for the channel, published in the RSS feed as ``." category3: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The third category for the channel, published in the RSS feed as ``." language: type: - "string" - "null" enum: - "af" - "be" - "bg" - "ca" - "cs" - "da" - "de-at" - "de-ch" - "de-de" - "de-li" - "de-lu" - "de" - "el" - "en-au" - "en-bz" - "en-ca" - "en-gb" - "en-ie" - "en-jm" - "en-nz" - "en-ph" - "en-tt" - "en-us" - "en-za" - "en-zw" - "en" - "es-ar" - "es-bo" - "es-cl" - "es-co" - "es-cr" - "es-do" - "es-ec" - "es-es" - "es-gt" - "es-hn" - "es-mx" - "es-ni" - "es-pa" - "es-pe" - "es-pr" - "es-py" - "es-sv" - "es-uy" - "es-ve" - "es" - "et" - "eu" - "fi" - "fo" - "fr-be" - "fr-ca" - "fr-ch" - "fr-fr" - "fr-lu" - "fr-mc" - "fr" - "ga" - "gd" - "gl" - "haw" - "hr" - "hu" - "in" - "is" - "it-ch" - "it-it" - "it" - "ja" - "ko" - "mk" - "nl-be" - "nl-nl" - "nl" - "no" - "pl" - "pt-br" - "pt-pt" - "pt" - "ro-mo" - "ro-ro" - "ro" - "ru-mo" - "ru-ru" - "ru" - "sk" - "sl" - "sq" - "sr" - "sv-fi" - "sv-se" - "sv" - "tr" - "uk" - "zh-cn" - "zh-tw" description: "The ISO 639-1 language code for the channel, published in the RSS feed as ``." description: "Podcast specific settings for a channel. These settings only take effect if\npodcasting is enabled for the channel. These values appear in the channel's\npublicly accessible podcast RSS feed.\n" Channel: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "The numeric id of the channel." created: type: "string" format: "date-time" description: "The date when the channel was originally created." description: type: "string" description: "The channel's description." hashed_id: type: "string" description: "A unique alphanumeric identifier for this channel." media_count: type: "integer" description: "The number of medias in the channel." live_stream_event_count: type: "integer" description: "The number of live stream events in the channel." name: type: "string" description: "The display name for the channel" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." auto_publish_enabled: type: - "boolean" - "null" description: "Whether episodes are automatically published when added to the channel." podcast_enabled: type: - "boolean" - "null" description: "Whether podcasting is enabled for the channel." custom_url: type: - "string" - "null" description: "The custom URL used when embedding the channel on your own site. Null if no custom URL is set." podcast_settings: type: "object" unevaluatedProperties: false properties: copyright: type: - "string" - "null" description: "The channel's copyright information, published in the RSS feed as ``." episode_format: oneOf: - type: "string" enum: - "episodic" - "episodic_with_seasons" - "serial" - type: "null" unevaluatedProperties: false description: "The format for episodes for the podcast channel, published in the RSS feed as ``. `episodic_with_seasons` is published as `episodic`." author_name: type: - "string" - "null" description: "The name of the author(s) for the channel, published in the RSS feed as ``." explicit: type: - "boolean" - "null" description: "Whether the channel contains explicit content, published in the RSS feed as ``." owner_name: type: - "string" - "null" description: "The podcast owner's name, published in the channel's public RSS feed as ``. Podcast directories use this as the show's administrative contact." owner_email: type: - "string" - "null" description: "The podcast owner's email address, published in the channel's public RSS feed as ``. Podcast directories such as Apple Podcasts require it for ownership verification." category1: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The primary category for the channel, published in the RSS feed as ``." category2: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The secondary category for the channel, published in the RSS feed as ``." category3: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The third category for the channel, published in the RSS feed as ``." language: type: - "string" - "null" enum: - "af" - "be" - "bg" - "ca" - "cs" - "da" - "de-at" - "de-ch" - "de-de" - "de-li" - "de-lu" - "de" - "el" - "en-au" - "en-bz" - "en-ca" - "en-gb" - "en-ie" - "en-jm" - "en-nz" - "en-ph" - "en-tt" - "en-us" - "en-za" - "en-zw" - "en" - "es-ar" - "es-bo" - "es-cl" - "es-co" - "es-cr" - "es-do" - "es-ec" - "es-es" - "es-gt" - "es-hn" - "es-mx" - "es-ni" - "es-pa" - "es-pe" - "es-pr" - "es-py" - "es-sv" - "es-uy" - "es-ve" - "es" - "et" - "eu" - "fi" - "fo" - "fr-be" - "fr-ca" - "fr-ch" - "fr-fr" - "fr-lu" - "fr-mc" - "fr" - "ga" - "gd" - "gl" - "haw" - "hr" - "hu" - "in" - "is" - "it-ch" - "it-it" - "it" - "ja" - "ko" - "mk" - "nl-be" - "nl-nl" - "nl" - "no" - "pl" - "pt-br" - "pt-pt" - "pt" - "ro-mo" - "ro-ro" - "ro" - "ru-mo" - "ru-ru" - "ru" - "sk" - "sl" - "sq" - "sr" - "sv-fi" - "sv-se" - "sv" - "tr" - "uk" - "zh-cn" - "zh-tw" description: "The ISO 639-1 language code for the channel, published in the RSS feed as ``." description: "Podcast specific settings for the channel. Only present when podcasting\nis enabled for the channel.\n" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "created" - "description" - "hashed_id" - "media_count" - "name" - "updated" description: "A Channel lets you take a collection of video (or audio) and embed them\non your site, as well as distribute through podcasting.\n" ChannelCreateOrUpdateParams: type: "object" unevaluatedProperties: false properties: name: type: - "string" - "null" description: "The display name for the channel" description: type: - "string" - "null" description: "The channel's description." auto_publish_enabled: type: "boolean" description: "Whether the episodes are automatically published when added to the channel. Cannot be enabled if podcasting is on." podcast_enabled: type: "boolean" description: "Whether podcasting is enabled for this channel." custom_url: type: - "string" - "null" description: "Use if embedding the channel on your own site. The custom URL ensures links always direct to your page and not Wistia's." podcast_settings: type: "object" unevaluatedProperties: false properties: copyright: type: - "string" - "null" description: "The channel's copyright information, published in the RSS feed as ``." episode_format: oneOf: - type: "string" enum: - "episodic" - "episodic_with_seasons" - "serial" - type: "null" unevaluatedProperties: false description: "The format for episodes for the podcast channel, published in the RSS feed as ``. `episodic_with_seasons` is published as `episodic`." author_name: type: - "string" - "null" description: "The name of the author(s) for the channel, published in the RSS feed as ``." explicit: type: - "boolean" - "null" description: "Whether the channel contains explicit content, published in the RSS feed as ``." owner_name: type: - "string" - "null" description: "The podcast owner's name, published in the channel's public RSS feed as ``. Podcast directories use this as the show's administrative contact." owner_email: type: - "string" - "null" description: "The podcast owner's email address, published in the channel's public RSS feed as ``. Podcast directories such as Apple Podcasts require it for ownership verification." category1: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The primary category for the channel, published in the RSS feed as ``." category2: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The secondary category for the channel, published in the RSS feed as ``." category3: oneOf: - type: "string" enum: - "arts" - "arts > books" - "arts > design" - "arts > fashion_and_beauty" - "arts > food" - "arts > performing_arts" - "arts > visual_arts" - "business" - "business > careers" - "business > entrepreneurship" - "business > investing" - "business > management" - "business > marketing" - "business > non_profit" - "comedy" - "comedy > comedy_interviews" - "comedy > improv" - "comedy > stand_up" - "education" - "education > courses" - "education > how_to" - "education > language_learning" - "education > self_improvement" - "fiction" - "fiction > comedy_fiction" - "fiction > drama" - "fiction > science_fiction" - "government" - "health_and_fitness" - "health_and_fitness > alternative_health" - "health_and_fitness > fitness" - "health_and_fitness > medicine" - "health_and_fitness > mental_health" - "health_and_fitness > nutrition" - "health_and_fitness > sexuality" - "history" - "kids_and_family" - "kids_and_family > education_for_kids" - "kids_and_family > parenting" - "kids_and_family > pets_and_animals" - "kids_and_family > stories_for_kids" - "leisure" - "leisure > animation_and_manga" - "leisure > automotive" - "leisure > aviation" - "leisure > crafts" - "leisure > games" - "leisure > hobbies" - "leisure > home_and_garden" - "leisure > video_games" - "music" - "music > music_commentary" - "music > music_history" - "music > music_interviews" - "news" - "news > business_news" - "news > daily_news" - "news > entertainment_news" - "news > news_commentary" - "news > politics" - "news > sports_news" - "news > tech_news" - "religion_and_spirituality" - "religion_and_spirituality > buddhism" - "religion_and_spirituality > christianity" - "religion_and_spirituality > hinduism" - "religion_and_spirituality > islam" - "religion_and_spirituality > judaism" - "religion_and_spirituality > religion" - "religion_and_spirituality > spirituality" - "science" - "science > astronomy" - "science > chemistry" - "science > earth_sciences" - "science > life_sciences" - "science > mathematics" - "science > natural_sciences" - "science > nature" - "science > physics" - "science > social_sciences" - "society_and_culture" - "society_and_culture > documentary" - "society_and_culture > personal_journals" - "society_and_culture > philosophy" - "society_and_culture > places_and_travel" - "society_and_culture > relationships" - "sports" - "sports > baseball" - "sports > basketball" - "sports > cricket" - "sports > fantasy_sports" - "sports > football" - "sports > golf" - "sports > hockey" - "sports > rugby" - "sports > running" - "sports > soccer" - "sports > swimming" - "sports > tennis" - "sports > volleyball" - "sports > wilderness" - "sports > wrestling" - "technology" - "true_crime" - "tv_and_film" - "tv_and_film > after_shows" - "tv_and_film > film_history" - "tv_and_film > film_interviews" - "tv_and_film > film_reviews" - "tv_and_film > tv_reviews" - type: "null" unevaluatedProperties: false description: "The third category for the channel, published in the RSS feed as ``." language: type: - "string" - "null" enum: - "af" - "be" - "bg" - "ca" - "cs" - "da" - "de-at" - "de-ch" - "de-de" - "de-li" - "de-lu" - "de" - "el" - "en-au" - "en-bz" - "en-ca" - "en-gb" - "en-ie" - "en-jm" - "en-nz" - "en-ph" - "en-tt" - "en-us" - "en-za" - "en-zw" - "en" - "es-ar" - "es-bo" - "es-cl" - "es-co" - "es-cr" - "es-do" - "es-ec" - "es-es" - "es-gt" - "es-hn" - "es-mx" - "es-ni" - "es-pa" - "es-pe" - "es-pr" - "es-py" - "es-sv" - "es-uy" - "es-ve" - "es" - "et" - "eu" - "fi" - "fo" - "fr-be" - "fr-ca" - "fr-ch" - "fr-fr" - "fr-lu" - "fr-mc" - "fr" - "ga" - "gd" - "gl" - "haw" - "hr" - "hu" - "in" - "is" - "it-ch" - "it-it" - "it" - "ja" - "ko" - "mk" - "nl-be" - "nl-nl" - "nl" - "no" - "pl" - "pt-br" - "pt-pt" - "pt" - "ro-mo" - "ro-ro" - "ro" - "ru-mo" - "ru-ru" - "ru" - "sk" - "sl" - "sq" - "sr" - "sv-fi" - "sv-se" - "sv" - "tr" - "uk" - "zh-cn" - "zh-tw" description: "The ISO 639-1 language code for the channel, published in the RSS feed as ``." description: "Podcast specific settings for a channel. These settings only take effect if\npodcasting is enabled for the channel. These values appear in the channel's\npublicly accessible podcast RSS feed.\n" PodcastSettings-2: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for a channel episode. These settings only take effect\nif podcasting is enabled for the channel.\n" ChannelEpisode: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel episode." channel_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's channel." created: type: "string" format: "date-time" description: "The date when the channel episode was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." description: type: "string" description: "The channel episode's description or episode notes." summary: type: "string" examples: - "A short description." description: "A short summary of the episode that is displayed when space is limited." hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode." media_hashed_id: type: "string" description: "A unique alphanumeric identifier for the channel episode's media." live_stream_event_hashed_id: type: - "string" - "null" description: "A unique alphanumeric identifier for the channel episode's live stream event, if any. Null when the episode is not linked to a live stream event." published: type: "boolean" description: "Whether the channel episode has been published or is still in draft form." publish_at: type: "string" examples: - "2024-12-31T23:59:59Z" format: "date-time" description: "The date and time when the episode is scheduled to be published in UTC timezone (only present when publish_status is 'scheduled')." title: type: - "string" - "null" description: "The title of the channel episode" updated: type: "string" format: "date-time" description: "The date when the channel was last updated." podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for the episode. Only present when podcasting\nis enabled for the channel.\n" required: - "channel_hashed_id" - "created" - "description" - "summary" - "hashed_id" - "media_hashed_id" - "published" - "title" - "updated" description: "A channel episode represents a media that has been added to a channel. Only published\nepisodes are displayed in a channel.\n" CreateChannelEpisode: type: "object" unevaluatedProperties: false properties: media_id: type: "string" description: "The alphanumeric hashed ID of the media to be added as a channel episode." title: type: "string" examples: - "My New Episode" description: "The episode's title. If not provided, the channel episode uses the title of the media used to create it." description: type: "string" examples: - "My Episode Description." description: "The episode's description or episode notes." summary: type: "string" examples: - "A short description." description: "A short summary of the episode that is displayed when space is limited." publish_status: type: "string" enum: - "draft" - "published" - "scheduled" description: "The status of whether or not the episode has been published to your channel." publish_at: type: "string" examples: - "2024-12-31T23:59:59Z" format: "date-time" 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.'" podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for a channel episode. These settings only take effect\nif podcasting is enabled for the channel.\n" ChannelEpisodeCreateOrUpdateParams: type: "object" unevaluatedProperties: false properties: description: type: - "string" - "null" description: "The episode's description or episode notes." title: type: - "string" - "null" description: "The episode's title. If not provided, the channel episode uses the title of the media used to create it." media_hashed_id: type: "string" description: "The unique alphanumeric identifier for the media associated with this channel episode." live_stream_event_hashed_id: type: "string" description: "The unique alphanumeric identifier for the live stream event associated with this channel episode." summary: type: - "string" - "null" description: "A short summary of the episode that is displayed when space is limited." publish_status: type: "string" enum: - "draft" - "published" - "scheduled" description: "The status of whether or not the episode has been published to your channel." publish_at: type: "string" format: "date-time" description: "The date and time when the episode is scheduled to be published in UTC timezone." episode_notes: type: "string" description: "Additional notes for the episode." podcast_settings: type: "object" unevaluatedProperties: false properties: episode_type: oneOf: - type: "string" enum: - "full" - "trailer" - "bonus" - type: "null" unevaluatedProperties: false description: "The type of episode." episode_number: type: - "integer" - "null" description: "The number of the episode." season_number: type: - "integer" - "null" description: "The season number of the episode." explicit_content: type: "boolean" description: "Whether the episode contains explicit content." hide_from_feed: type: "boolean" description: "Whether to hide the episode from the podcast feed." description: "Podcast specific settings for a channel episode. These settings only take effect\nif podcasting is enabled for the channel.\n" ChannelCollaboratorSchema: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 description: "The unique identifier of the channel role." role: type: "string" examples: - "admin" enum: - "admin" - "viewer" description: "The role of the collaborator on the channel." created_at: type: "string" examples: - "2024-01-15T10:30:00Z" format: "date-time" description: "The timestamp when this collaborator was added." share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" description: "Either \"Contact\" or \"ContactGroup\"" email: type: "string" examples: - "jim@wistia.com" format: "email" description: "Email address (only present for Contact type)." required: - "id" - "name" - "type" description: "The contact or contact group being granted access." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "role" - "created_at" - "share" description: "A channel collaborator is a contact or contact group that has been granted access to a channel.\n" CreateChannelCollaboratorSchema: type: "object" unevaluatedProperties: false properties: email: type: "string" examples: - "jim@wistia.com" format: "email" description: "Email address of the contact to invite. Creates a new contact if one doesn't exist." role: type: "string" examples: - "admin" enum: - "admin" - "viewer" description: "The role to grant the collaborator." required: - "email" - "role" description: "Request body for creating a channel collaborator." Webinar: type: "object" unevaluatedProperties: false properties: id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar" hashed_id: type: "string" examples: - "abc123def456" description: "The hashed ID of the webinar. Identical to `id`, named to match every other Wistia resource." title: type: "string" examples: - "Wellness Session: Coping with Outie Memories" description: "The title of the webinar" description: type: - "string" - "null" examples: - "A comprehensive session on managing work-life balance" description: "The description of the webinar" scheduled_for: type: - "string" - "null" examples: - "2024-03-20T15:30:00-05:00" format: "date-time" description: "The scheduled start time in W3C format with timezone" event_duration: type: - "integer" - "null" examples: - 60 description: "Duration of the webinar in minutes" time_zone: type: "string" examples: - "America/New_York" description: "The IANA time zone identifier the webinar is scheduled in" lifecycle_status: type: "string" examples: - "ready" enum: - "pending" - "ready" - "starting" - "started" - "ended" - "vod_ready" - "failed" description: "The current lifecycle status of the webinar. This is a read-only, system-managed field that Wistia updates as the event moves through its lifecycle; it cannot be set or changed via the API." readOnly: true registration_status: type: "string" examples: - "published" description: "Registration status of the event" created_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was created (UTC)" updated_at: type: "string" examples: - "2024-03-15T10:30:00Z" format: "date-time" description: "When the event was last updated (UTC)" audience_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456" description: "Link for the audience to join the event" host_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair" description: "Link for the host to manage the event" panelist_link: type: "string" examples: - "https://lumon-industries.wistia.com/live/events/abc123def456/onair/a1b2c3d4-e5f6-7890-abcd-ef1234567890" description: "Link for panelists to join the event" thumbnail_url: type: - "string" - "null" examples: - "https://embed-ssl.wistia.com/deliveries/abc123def456.jpg" description: "URL of the webinar's custom thumbnail image, or null if no custom thumbnail has been set" folder: oneOf: - type: "object" unevaluatedProperties: false properties: id: type: "string" description: "A unique alphanumeric identifier for the record." index_url: type: "string" description: "A URL for fetching all the records of the given record type. You can pass hashed_ids as a param with multiple values\nto do a batch fetch for this records type.\n" url: type: "string" description: "A URL that can be used to fetch this record." required: - "id" - "index_url" - "url" - type: "null" unevaluatedProperties: false description: "The folder (project) this webinar belongs to" cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "hashed_id" - "title" - "time_zone" - "lifecycle_status" - "registration_status" - "created_at" - "updated_at" - "audience_link" - "host_link" - "panelist_link" description: "A webinar is an event which allows you to stream a video\nto multiple participants. See our [Webinars Guide](https://support.wistia.com/en/articles/8288501-getting-started-with-webinars)\nfor more info.\n" CreateWebinar: type: "object" unevaluatedProperties: false properties: title: type: "string" examples: - "Wellness Session: Coping with Outie Memories" description: "The title of the webinar" description: type: "string" examples: - "A comprehensive session on managing work-life balance" description: "The description of the webinar" scheduled_for: type: "string" examples: - "2024-03-20T15:30:00Z" format: "date-time" description: "The scheduled start time as a UTC formatted ISO 8601 string (offset `Z` or `+00:00`)." event_duration: type: "integer" examples: - 60 minimum: 15 description: "Duration of the event in minutes (minimum 15)" time_zone: type: "string" examples: - "America/New_York" description: "The IANA time zone identifier the webinar is scheduled in." folder_id: type: "string" examples: - "abc123def456" description: "Hashed ID of the folder to place this webinar in. Defaults to the account's default webinar folder if not provided." required: - "title" - "scheduled_for" - "event_duration" - "time_zone" UpdateWebinar: type: "object" unevaluatedProperties: false properties: webinar: type: "object" unevaluatedProperties: false properties: title: type: "string" examples: - "Updated Webinar Title" description: "The title of the webinar" description: type: "string" examples: - "Updated webinar description" description: "The description of the webinar" scheduled_for: type: "string" examples: - "2024-03-20T15:30:00Z" format: "date-time" description: "The scheduled start time as a UTC formatted ISO 8601 string (offset `Z` or `+00:00`)." event_duration: type: "integer" examples: - 90 minimum: 15 description: "Duration of the webinar in minutes (minimum 15)" time_zone: type: "string" examples: - "America/New_York" description: "The IANA time zone identifier the webinar is scheduled in." folder_id: type: "string" examples: - "abc123def456" description: "Hashed ID of the folder to move this webinar to. Can only be changed before the webinar has started." Registration: type: "object" unevaluatedProperties: false properties: visitor_key: type: - "string" - "null" description: "Unique visitor key for the registrant." example: "iv_abc123" email: type: - "string" - "null" description: "Registrant's email address." example: "john@example.com" first_name: type: - "string" - "null" description: "Registrant's first name." example: "John" last_name: type: - "string" - "null" description: "Registrant's last name." example: "Doe" phone_number: type: - "string" - "null" description: "Registrant's phone number." company: type: - "string" - "null" description: "Registrant's company name." job_title: type: - "string" - "null" description: "Registrant's job title." country: type: - "string" - "null" description: "Registrant's country." registered_at: type: - "string" - "null" format: "date-time" description: "When the person registered." example: "2026-01-15T10:00:00Z" attended_at: type: - "string" - "null" format: "date-time" description: "When the person first attended the webinar." example: "2026-01-15T11:00:00Z" restriction_status: type: - "string" - "null" enum: - "restricted" - "allowed" - null description: "Whether the registrant is restricted or allowed." origin_method: type: - "string" - "null" description: "How the registrant was added (e.g., \"form\", \"email\")." example: "form" form_field_data: type: "array" items: type: "object" unevaluatedProperties: false properties: value: type: "string" description: "The registrant's response." label: type: "string" description: "The form field label." description: "Custom form field responses submitted by the registrant." utm_campaign: type: - "string" - "null" description: "UTM campaign parameter captured at registration." utm_source: type: - "string" - "null" description: "UTM source parameter captured at registration." utm_medium: type: - "string" - "null" description: "UTM medium parameter captured at registration." utm_content: type: - "string" - "null" description: "UTM content parameter captured at registration." utm_term: type: - "string" - "null" description: "UTM term parameter captured at registration." referrer_domain: type: - "string" - "null" description: "HTTP referrer domain at time of registration." ip_region: type: - "string" - "null" description: "Region derived from IP address." ip_country: type: - "string" - "null" description: "Country derived from IP address." ip_city: type: - "string" - "null" description: "City derived from IP address." engagement_rate: type: - "number" - "null" format: "float" description: "Engagement rate between 0.0 and 1.0." example: 0.85 focused_rate: type: - "number" - "null" format: "float" description: "Focused engagement rate between 0.0 and 1.0." played_time: type: - "integer" - "null" description: "Total seconds of video watched." focused_played_time: type: - "integer" - "null" description: "Total seconds watched in focused state." chat_count: type: - "integer" - "null" description: "Number of chat messages sent." chats: type: "array" items: type: "object" unevaluatedProperties: false properties: rounded_player_position: type: "integer" description: "Video position in seconds (rounded)." chats: type: "array" items: type: "string" description: "Chat messages sent by the registrant." qa_questions: type: "array" items: type: "object" unevaluatedProperties: false properties: rounded_player_position: type: "integer" description: "Video position in seconds (rounded)." qa_questions: type: "array" items: type: "object" unevaluatedProperties: false properties: question_text: type: "string" description: "Q&A questions asked by the registrant." qa_answers: type: - "integer" - "null" description: "Number of Q&A answers." poll_responses: type: "array" items: type: "object" unevaluatedProperties: false properties: poll_question_text: type: - "string" - "null" poll_option_text: type: - "string" - "null" description: "Poll responses submitted by the registrant." poll_responses_count: type: - "integer" - "null" description: "Number of poll responses submitted." annotation_click_count: type: - "integer" - "null" description: "Total number of annotation clicks." attendee_histogram: type: - "array" - "null" items: type: - "integer" - "null" description: "Per-bucket attendance data for this registrant." focused_attendee_histogram: type: - "array" - "null" items: type: - "integer" - "null" description: "Per-bucket focused attendance data for this registrant." CreateRegistration: type: "object" unevaluatedProperties: false 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" required: - "email" - "first_name" - "last_name" RegistrationResponse: type: "object" unevaluatedProperties: false 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 webinar" example: "https://wistia.com/webinars/registration?vk=iv_1234567890&uid=john.doe@example.com" required: - "visitor_key" - "personalized_event_url" WebinarCollaboratorSchema: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 14 description: "The unique identifier of the webinar role." role: type: "string" examples: - "admin" enum: - "admin" description: "The role of the collaborator on the webinar. Only \"admin\" is supported." created_at: type: "string" examples: - "2024-01-15T10:30:00Z" format: "date-time" description: "The timestamp when this collaborator was added." share: type: "object" unevaluatedProperties: false properties: id: type: "integer" examples: - 3 name: type: "string" examples: - "Jim" type: type: "string" examples: - "Contact" description: "Either \"Contact\" or \"ContactGroup\"" email: type: "string" examples: - "jim@wistia.com" format: "email" description: "Email address (only present for Contact type)." required: - "id" - "name" - "type" description: "The contact or contact group being granted access." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "id" - "role" - "created_at" - "share" description: "A webinar collaborator is a contact or contact group that has been granted producer access to a webinar.\n" CreateWebinarCollaboratorSchema: type: "object" unevaluatedProperties: false properties: email: type: "string" examples: - "jim@wistia.com" format: "email" description: "Email address of the contact to invite. Creates a new contact if one doesn't exist. Note that viewers cannot be webinar collaborators." required: - "email" description: "Request body for creating a webinar collaborator." Account: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "Numeric id of the account" name: type: "string" description: "Account name" url: type: "string" description: "Account’s main Wistia URL (e.g. http://brendan.wistia.com)" media_count: type: "integer" description: "The total number of medias in this account" video_limit: type: - "integer" - "null" description: "The account's video limit" folder_count: type: "integer" description: "The total number of folders in this account" channel_count: type: "integer" description: "The total number of channels in this account" required: - "id" - "name" - "url" - "media_count" - "video_limit" - "folder_count" - "channel_count" description: "An account represents a customer at Wistia. Each account can own media, folders\nchannels, etc.\n" AccountUsage: type: "object" unevaluatedProperties: false properties: plan: type: "object" unevaluatedProperties: false properties: tier: type: "string" description: "The plan tier identifier. Common values include `free`, `starter`, `plus`,\n`pro`, `advanced`, `business`, `enterprise`. Legacy plans may use other\ntier names. Empty string if the account has no plan.\n" name: type: "string" description: "Human-readable plan name" is_standard: type: "boolean" description: "Whether this is a 2026 storage-based plan (true) or a legacy media-count plan (false)" is_trial: type: "boolean" description: "Whether the account is currently on a trial" trial_expires_at: type: - "string" - "null" description: "ISO 8601 timestamp when the trial expires, or null if not trialing" required: - "tier" - "name" - "is_standard" - "is_trial" - "trial_expires_at" description: "The account's current plan information" can_upload: type: "boolean" description: "Whether the next upload will succeed. False when an inflexible media or storage limit has been reached." upload_blocked_reason: type: - "string" - "null" description: "The reason uploads are blocked, or null if uploads are allowed.\nKnown values: `reached_media_limit`, `reached_storage_limit`.\n" limits: type: - "object" - "null" unevaluatedProperties: false properties: primary_resource: type: "string" enum: - "storage" - "media" description: "The primary resource type for this plan's limits — \"storage\" for standard plans, \"media\" for legacy plans" media: type: "object" unevaluatedProperties: false properties: count: type: "integer" description: "Current number of media in the account" flexible_limit: type: - "integer" - "null" description: "Soft media limit (overage billed). Null if no soft limit." inflexible_limit: type: - "integer" - "null" description: "Hard media limit (uploads blocked). Null if no hard limit." required: - "count" - "flexible_limit" - "inflexible_limit" description: "Media count and limits" storage: type: "object" unevaluatedProperties: false properties: used_bytes: type: "integer" description: "Current storage usage in bytes" flexible_limit_bytes: type: - "integer" - "null" description: "Included storage limit in bytes. Null if unlimited." inflexible_limit_bytes: type: - "integer" - "null" description: "Hard storage cap in bytes. Null if no hard cap." required: - "used_bytes" - "flexible_limit_bytes" - "inflexible_limit_bytes" description: "Storage usage and limits in bytes (1 GB = 1,000,000,000 bytes)" users: type: "object" unevaluatedProperties: false properties: billable_count: type: "integer" description: "Current number of billable users (seats). For agency accounts this aggregates\ndistinct users across the parent and team accounts — the count billing compares\nagainst `flexible_limit`. Excludes viewers.\n" account_billable_count: type: "integer" description: "Billable users in this account only, the count compared against `inflexible_limit`\nwhen enforcing the hard seat limit. Matches `billable_count` for non-agency accounts.\nExcludes viewers.\n" viewers_count: type: "integer" description: "Current number of viewer contacts, which are non-billable and don't count toward seat limits." flexible_limit: type: - "integer" - "null" description: "Included seats on flexible plans (additional seats billed as overage). Null if no soft limit." inflexible_limit: type: - "integer" - "null" description: "Hard seat limit (adding users blocked at the limit). Null if no hard limit." required: - "billable_count" - "account_billable_count" - "viewers_count" - "flexible_limit" - "inflexible_limit" description: "Seat (user) usage and limits. Viewers are non-billable and excluded from the billable counts." bandwidth: type: "object" unevaluatedProperties: false properties: used_bytes: type: "integer" description: "Bandwidth used in the current billing period, in bytes" limit_bytes: type: - "integer" - "null" description: "Bandwidth limit for the billing period in bytes. Null if unlimited." period: type: "string" enum: - "monthly" - "annual" description: "Whether the bandwidth allowance is tracked monthly or annually" resets_at: type: - "string" - "null" description: "ISO 8601 timestamp when the bandwidth period resets, or null if unknown" required: - "used_bytes" - "limit_bytes" - "period" - "resets_at" description: "Bandwidth usage and limits for the current billing period, in bytes (1 GB = 1,000,000,000 bytes)" required: - "primary_resource" - "media" - "storage" - "users" - "bandwidth" description: "Usage and limit data. Null when the authenticated contact does not have\nbilling visibility (i.e. is not an account owner or manager).\n" links: type: "object" unevaluatedProperties: false properties: plans_url: type: "string" description: "URL to the account's plans page. Always present." usage_url: type: - "string" - "null" description: "URL to the account's usage page. Null for non-owner/manager contacts." billing_url: type: - "string" - "null" description: "URL to the account's billing page. Null for non-owner/manager contacts." required: - "plans_url" - "usage_url" - "billing_url" description: "URLs for plan, usage, and billing pages" role: type: - "string" - "null" description: "The authenticated contact's role on the account. One of `owner`, `manager`,\n`standard_user`, `limited_user`, `viewer`. Null when the token isn't\nassociated with a specific contact.\n" verified_domain: type: "boolean" description: "Whether the account has at least one verified business domain (i.e. an\nowner whose email domain is verified and business-classified). Independent\nof plan tier.\n" can_invite_teammates: type: "boolean" description: "Whether the authenticated contact can invite additional teammates via the\nmodern contacts endpoint. True when the contact is an owner or manager and\nthe account has a verified business domain.\n" required: - "plan" - "can_upload" - "upload_blocked_reason" - "limits" - "links" - "role" - "verified_domain" - "can_invite_teammates" description: "Account usage and plan information, including storage, media, seat, and bandwidth limits.\nFields under `limits` are only visible to account owners and managers.\n" CreditBalance: type: "object" unevaluatedProperties: false properties: balance: type: "string" examples: - "1250.0" pattern: "^\\d+(?:\\.\\d+)?$" description: "Available Credits as an exact, nonnegative decimal string." next_grant_at: type: - "string" - "null" format: "date-time" description: "Expected next recurring Credits grant boundary from the account's billing schedule, as an ISO 8601 timestamp. Null when no scheduled grant can be determined. Processing may occur later, and other grants may arrive sooner." required: - "balance" - "next_grant_at" description: "The current account's available Credits balance and expected next recurring grant date." BrandPreload: type: "object" unevaluatedProperties: false properties: has_brand_kits: type: "boolean" description: "True iff the account has one or more configured brand kits. Glass uses\nthis to skip the onboarding preload step for accounts that already have\na brand kit set up.\n" brandfetch_brand: type: "object" unevaluatedProperties: false properties: domain: type: - "string" - "null" primary_color: type: - "string" - "null" description: "Hex color string (e.g. \"#3366FF\") or null if Brandfetch returned no accent/primary color." logo: type: - "string" - "null" description: "Absolute URL to the dark-theme logo, or null if none is available." font: type: - "string" - "null" colors: type: "array" items: type: "string" logos: type: "array" items: type: "object" unevaluatedProperties: false properties: theme: type: - "string" - "null" description: "\"dark\" or \"light\"." type: type: - "string" - "null" description: "e.g. \"logo\", \"icon\", \"symbol\"." tags: type: "array" items: type: "string" formats: type: "array" items: type: "object" unevaluatedProperties: false properties: src: type: "string" format: type: "string" description: "File extension (e.g. \"png\", \"svg\")." background: type: - "string" - "null" height: type: - "integer" - "null" width: type: - "integer" - "null" size: type: - "integer" - "null" description: "Full Brandfetch logos list — Glass consumes only `logo` (the primary), but callers that want theme variants can walk this." status: type: - "integer" - "null" description: "HTTP status Brandfetch responded with (204 when empty)." required: - "domain" - "primary_color" - "logo" description: "Brandfetch response for the contact's email domain. Fields are nil for\nfree-mail domains, Wistia's own domain, and accounts where Brandfetch\nhas no data — the caller silently skips the preload in every such case.\n" required: - "has_brand_kits" - "brandfetch_brand" description: "Brandfetch-derived brand info for the current account's contact domain,\nplus whether the account has any brand kits configured.\n" BrandPreloadUpdate: type: "object" unevaluatedProperties: false properties: selected_player_color: type: "string" pattern: "^(#?[0-9a-fA-F]{6})?$" description: "Hex color string (e.g. \"#3366FF\") for the account's default player\ncolor — 6 hex digits, with or without the leading `#`. Omit or send\nan empty string to leave the current color untouched (there is no\nclear operation — color always has a value). Malformed values are\nrejected at the API boundary; without this check, the model's\nsanitize step would return nil and silently reset the account color\nto the global default.\n" selected_logo_hashed_id: type: "string" description: "Bakery hashed_id of an uploaded logo image, which will become the\naccount's default page logo. Omit to leave the current logo\nuntouched. Pass an empty string to clear the logo.\n" description: "Payload for `PUT /brand_preload`. Both fields are optional independently;\nomit either to leave that account setting untouched. Sending `null` for\neither field is not accepted — use omission for \"leave unchanged\" and an\nempty string for the documented clear operation on logo.\n" BrandKitColors: type: "object" unevaluatedProperties: false properties: colors: type: "array" items: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The brand kit token's name, or the brand and field (e.g. \"Acme primary color\")." value: type: "string" description: "Six-digit hex color with a leading \"#\" (e.g. \"#2949E5\")." required: - "name" - "value" description: "Solid brand colors: every brand kit's color tokens (newest kit\nfirst, tokens in the order they were added), then each brand's\nprimary and page background color when it is a solid color\n(default brand first). A color already listed isn't repeated.\nEmpty when the account has none.\n" brand_gradients: type: "array" items: type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The brand and field the gradient comes from (e.g. \"Acme primary color\")." stops: type: "array" items: type: "object" unevaluatedProperties: false properties: color: type: "string" description: "Six-digit hex color with a leading \"#\"." position: type: "number" description: "Where the stop sits along the gradient, as stored on the brand." required: - "color" - "position" description: "The gradient's color stops, sorted by position." required: - "name" - "stops" description: "Each brand's primary and page background color that is set to a\ngradient, default brand first. Stops whose color isn't a hex color\nare left out, and a gradient with fewer than two hex stops left\nisn't listed. Empty when none are gradients.\n" required: - "colors" - "brand_gradients" description: "The current account's brand colors, from its brand kits and its brands." ContactBulkCreateInput: type: "object" unevaluatedProperties: false properties: contacts: type: "string" examples: - "alice@example.com, bob@example.com" description: "A comma-, whitespace-, or newline-separated list of email addresses to\ninvite to the account. Each entry becomes a new contact if one does not\nalready exist for that email.\n" required: - "contacts" ContactBulkCreateResponse: type: "object" unevaluatedProperties: false properties: contacts: type: "array" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" email: type: "string" role: type: "string" required: - "id" - "email" - "role" description: "The contacts that were created (or already existed) for the requested emails." required: - "contacts" AccountTrialCreateResponse: type: "object" unevaluatedProperties: false properties: trial_expires_at: type: - "string" - "null" format: "date-time" description: "ISO 8601 timestamp when the trial expires. Null if the trial has no end date." plan_tier: type: - "string" - "null" description: "The plan tier now active on the account." is_trial: type: "boolean" description: "Always true on success." required: - "trial_expires_at" - "plan_tier" - "is_trial" Token: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "permanent" - "expiring" - "oauth" description: "The type of token used." application: oneOf: - type: "object" unevaluatedProperties: false properties: name: type: "string" description: "The name of the application." scopes: type: "array" items: type: "string" description: "The scopes of the application. These may be different than the token scope." required: - "name" - "scopes" - type: "null" unevaluatedProperties: false description: "The application used by the token. Will be null if the token isn't an oauth token." scopes: type: "array" items: type: "string" description: "The scopes of the token." name: type: - "string" - "null" description: "The name of the token. This only applies to permanent tokens." expires_at: type: - "string" - "null" format: "iso8601" description: "When the token expires. A null token means it never expires." required: - "type" - "application" - "scopes" - "name" description: "The token used to make the API request. This is primarily for debugging\npurposes. Sensitive data such as the token value is excluded.\n" TranscriptMatch: type: "object" unevaluatedProperties: false properties: text: type: "string" description: "The matched transcript text with context" example: "today we'll talk about product demo" start_time_seconds: type: "number" description: "Start time of the match in seconds" example: 3 start_time_formatted: type: "string" description: "Human-readable start time (e.g., \"0:03\" or \"1:23:45\")" example: "0:03" thumbnail_url: type: - "string" - "null" description: "Thumbnail URL at the match timestamp" example: "https://example.com/thumb.jpg?video_still_time=3.0" required: - "text" - "start_time_seconds" - "start_time_formatted" - "thumbnail_url" CustomMetadataFieldValue: type: "object" unevaluatedProperties: false properties: key: type: "string" examples: - "client" description: "The field definition's immutable identifier. Use this (not the label) to address the field this value belongs to." field_type: type: "string" examples: - "single_select" enum: - "text" - "number" - "date" - "boolean" - "single_select" - "short_text" - "url" - "email" - "money" - "time" - "datetime" - "multi_select" - "contact_ref" - "contact_multi_ref" description: "The field definition's data type, which determines the shape of `value`." value: type: - "string" - "number" - "boolean" - "array" - "object" - "null" examples: - "high" unevaluatedProperties: false items: oneOf: - type: "string" - type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "contact" - "contact_group" id: type: "string" unevaluatedProperties: false properties: type: type: "string" enum: - "contact" - "contact_group" id: type: "string" description: "The resolved, typed value for this field on this media. The type follows `field_type`:\na string for text-like types (text, short_text, url, email, money, time, datetime),\na number for `number`, an ISO 8601 date string for `date`, a boolean for `boolean`,\nthe selected option's key (a string) for `single_select`, an array of the\nselected options' keys for `multi_select`, a contact reference object\n`{\"type\": \"contact\" | \"contact_group\", \"id\": \"\"}` for `contact_ref`,\nand an array of contact reference objects for `contact_multi_ref`. References to\ndeleted contacts or contact groups are omitted. Null when unset.\n" updated_at: type: "string" examples: - "2026-07-17T21:47:00Z" format: "date-time" description: "The date that this value was last updated." last_write: type: - "object" - "null" unevaluatedProperties: false properties: at: type: "string" examples: - "2026-08-25T17:55:00Z" format: "date-time" description: "When the write happened." source: type: "string" examples: - "api" enum: - "ui" - "api" - "mcp" description: "The surface the write came through." actor: type: - "object" - "null" unevaluatedProperties: false properties: type: type: "string" enum: - "contact" id: type: "string" examples: - "abc123de" description: "The contact's hashed id." name: type: "string" examples: - "Jane Doe" description: "The contact's display name." required: - "type" - "id" - "name" description: "The contact who made the write, or null when the write had no acting contact." required: - "at" - "source" - "actor" description: "The most recent recorded write to this value on this media, with who made it and through which surface. Null when no write has been recorded; system-initiated writes (e.g. default-value backfills) are not recorded.\n" SearchMediaPropertiesMixin: type: "object" properties: folder_hashed_id: type: - "string" - "null" examples: - "4d23503f70" description: "The hashed ID of the folder this media belongs to" transcript_matches: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" description: "The matched transcript text with context" example: "today we'll talk about product demo" start_time_seconds: type: "number" description: "Start time of the match in seconds" example: 3 start_time_formatted: type: "string" description: "Human-readable start time (e.g., \"0:03\" or \"1:23:45\")" example: "0:03" thumbnail_url: type: - "string" - "null" description: "Thumbnail URL at the match timestamp" example: "https://example.com/thumb.jpg?video_still_time=3.0" required: - "text" - "start_time_seconds" - "start_time_formatted" - "thumbnail_url" description: "Array of transcript matches with timestamps" custom_metadata_field_values: type: "array" items: type: "object" unevaluatedProperties: false properties: key: type: "string" examples: - "client" description: "The field definition's immutable identifier. Use this (not the label) to address the field this value belongs to." field_type: type: "string" examples: - "single_select" enum: - "text" - "number" - "date" - "boolean" - "single_select" - "short_text" - "url" - "email" - "money" - "time" - "datetime" - "multi_select" - "contact_ref" - "contact_multi_ref" description: "The field definition's data type, which determines the shape of `value`." value: type: - "string" - "number" - "boolean" - "array" - "object" - "null" examples: - "high" unevaluatedProperties: false items: oneOf: - type: "string" - type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "contact" - "contact_group" id: type: "string" unevaluatedProperties: false properties: type: type: "string" enum: - "contact" - "contact_group" id: type: "string" description: "The resolved, typed value for this field on this media. The type follows `field_type`:\na string for text-like types (text, short_text, url, email, money, time, datetime),\na number for `number`, an ISO 8601 date string for `date`, a boolean for `boolean`,\nthe selected option's key (a string) for `single_select`, an array of the\nselected options' keys for `multi_select`, a contact reference object\n`{\"type\": \"contact\" | \"contact_group\", \"id\": \"\"}` for `contact_ref`,\nand an array of contact reference objects for `contact_multi_ref`. References to\ndeleted contacts or contact groups are omitted. Null when unset.\n" updated_at: type: "string" examples: - "2026-07-17T21:47:00Z" format: "date-time" description: "The date that this value was last updated." last_write: type: - "object" - "null" unevaluatedProperties: false properties: at: type: "string" examples: - "2026-08-25T17:55:00Z" format: "date-time" description: "When the write happened." source: type: "string" examples: - "api" enum: - "ui" - "api" - "mcp" description: "The surface the write came through." actor: type: - "object" - "null" unevaluatedProperties: false properties: type: type: "string" enum: - "contact" id: type: "string" examples: - "abc123de" description: "The contact's hashed id." name: type: "string" examples: - "Jane Doe" description: "The contact's display name." required: - "type" - "id" - "name" description: "The contact who made the write, or null when the write had no acting contact." required: - "at" - "source" - "actor" description: "The most recent recorded write to this value on this media, with who made it and through which surface. Null when no write has been recorded; system-initiated writes (e.g. default-value backfills) are not recorded.\n" description: "The media's custom metadata field values, present only when the request passed `include=custom_metadata`. Same shape as the Get Custom Metadata Field Values endpoint." required: - "folder_hashed_id" - "transcript_matches" SearchMedia: allOf: - type: "object" properties: id: type: "integer" description: "A unique numeric identifier for the media within the system." name: type: "string" description: "The display name of the media." type: type: "string" enum: - "Video" - "Audio" - "Image" - "PdfDocument" - "MicrosoftOfficeDocument" - "Swf" - "UnknownType" description: "A string representing what type of media this is." archived: type: "boolean" description: "Whether or not the media is archived, either true or false." created: type: "string" format: "date-time" description: "The date when the media was originally uploaded." updated: type: "string" format: "date-time" description: "The date when the media was last changed." duration: oneOf: - type: "number" - type: "null" unevaluatedProperties: false description: "Specifies the length (in seconds) for audio and video files. Specifies number of pages in the document. Omitted for other types of media." embedCode: type: "string" description: "DEPRECATED: If you want to programmatically embed videos, follow the construct an embed code guide.\n" deprecated: true hashed_id: type: "string" description: "A unique alphanumeric identifier for this media." description: type: "string" description: "A description for the media which usually appears near the top of the sidebar on the media's page." progress: type: "number" maximum: 1 minimum: 0 description: "A floating point value between 0 and 1 that indicates the progress of the processing for this file." status: type: "string" enum: - "queued" - "processing" - "ready" - "failed" 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).\n" section: oneOf: - type: "string" - type: "null" unevaluatedProperties: false description: "The title of the section in which the media appears. This attribute is omitted if the media is not in a section (default)." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" protected: type: - "boolean" - "null" description: "Whether the media is protected (e.g. requires a password or other authentication to view). Null if the media is not protected." description: "A media generally represents a video or an audio which can be embedded into your website.\n\nCDN-backed medias are accessible using this url structure: https://fast.wistia.com/embed/medias/{hashed_id}.m3u8.\nFor more information, see https://docs.wistia.com/docs/asset-urls#getting-hls-assets.\n" - type: "object" properties: folder_hashed_id: type: - "string" - "null" examples: - "4d23503f70" description: "The hashed ID of the folder this media belongs to" transcript_matches: type: "array" items: type: "object" unevaluatedProperties: false properties: text: type: "string" description: "The matched transcript text with context" example: "today we'll talk about product demo" start_time_seconds: type: "number" description: "Start time of the match in seconds" example: 3 start_time_formatted: type: "string" description: "Human-readable start time (e.g., \"0:03\" or \"1:23:45\")" example: "0:03" thumbnail_url: type: - "string" - "null" description: "Thumbnail URL at the match timestamp" example: "https://example.com/thumb.jpg?video_still_time=3.0" required: - "text" - "start_time_seconds" - "start_time_formatted" - "thumbnail_url" description: "Array of transcript matches with timestamps" custom_metadata_field_values: type: "array" items: type: "object" unevaluatedProperties: false properties: key: type: "string" examples: - "client" description: "The field definition's immutable identifier. Use this (not the label) to address the field this value belongs to." field_type: type: "string" examples: - "single_select" enum: - "text" - "number" - "date" - "boolean" - "single_select" - "short_text" - "url" - "email" - "money" - "time" - "datetime" - "multi_select" - "contact_ref" - "contact_multi_ref" description: "The field definition's data type, which determines the shape of `value`." value: type: - "string" - "number" - "boolean" - "array" - "object" - "null" examples: - "high" unevaluatedProperties: false items: oneOf: - type: "string" - type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "contact" - "contact_group" id: type: "string" unevaluatedProperties: false properties: type: type: "string" enum: - "contact" - "contact_group" id: type: "string" description: "The resolved, typed value for this field on this media. The type follows `field_type`:\na string for text-like types (text, short_text, url, email, money, time, datetime),\na number for `number`, an ISO 8601 date string for `date`, a boolean for `boolean`,\nthe selected option's key (a string) for `single_select`, an array of the\nselected options' keys for `multi_select`, a contact reference object\n`{\"type\": \"contact\" | \"contact_group\", \"id\": \"\"}` for `contact_ref`,\nand an array of contact reference objects for `contact_multi_ref`. References to\ndeleted contacts or contact groups are omitted. Null when unset.\n" updated_at: type: "string" examples: - "2026-07-17T21:47:00Z" format: "date-time" description: "The date that this value was last updated." last_write: type: - "object" - "null" unevaluatedProperties: false properties: at: type: "string" examples: - "2026-08-25T17:55:00Z" format: "date-time" description: "When the write happened." source: type: "string" examples: - "api" enum: - "ui" - "api" - "mcp" description: "The surface the write came through." actor: type: - "object" - "null" unevaluatedProperties: false properties: type: type: "string" enum: - "contact" id: type: "string" examples: - "abc123de" description: "The contact's hashed id." name: type: "string" examples: - "Jane Doe" description: "The contact's display name." required: - "type" - "id" - "name" description: "The contact who made the write, or null when the write had no acting contact." required: - "at" - "source" - "actor" description: "The most recent recorded write to this value on this media, with who made it and through which surface. Null when no write has been recorded; system-initiated writes (e.g. default-value backfills) are not recorded.\n" description: "The media's custom metadata field values, present only when the request passed `include=custom_metadata`. Same shape as the Get Custom Metadata Field Values endpoint." required: - "folder_hashed_id" - "transcript_matches" unevaluatedProperties: false SearchChannel: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel within the system." hashed_id: type: "string" description: "A unique alphanumeric identifier for this channel." name: type: "string" description: "The display name for the channel." description: type: "string" description: "The channel's description." media_count: type: "integer" description: "The number of medias in the channel." created: type: "string" format: "date-time" description: "The date when the channel was originally created." updated: type: "string" format: "date-time" description: "The date when the channel was last updated." live_stream_event_count: type: "integer" description: "The number of live stream events in the channel." auto_publish_enabled: type: - "boolean" - "null" description: "Whether episodes are automatically published when added to the channel." podcast_enabled: type: - "boolean" - "null" description: "Whether podcasting is enabled for the channel." custom_url: type: - "string" - "null" description: "The custom URL used when embedding the channel on your own site. Null if no custom URL is set." required: - "id" - "hashed_id" - "name" - "description" - "media_count" - "created" - "updated" SearchChannelEpisode: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "A unique numeric identifier for the channel episode within the system." hashed_id: type: "string" description: "A unique alphanumeric identifier for this channel episode." title: type: - "string" - "null" description: "The title of the channel episode." description: type: "string" description: "The episode notes for the channel episode." summary: type: "string" description: "The description of the channel episode." channel_hashed_id: type: - "string" - "null" description: "The hashed ID of the channel this episode belongs to." media_hashed_id: type: - "string" - "null" description: "The hashed ID of the media associated with this channel episode." live_stream_event_hashed_id: type: - "string" - "null" description: "The hashed ID of the live stream event associated with this channel episode, if any." published: type: "boolean" description: "Whether the channel episode is published." created: type: "string" format: "date-time" description: "The date when the channel episode was originally created." updated: type: "string" format: "date-time" description: "The date when the channel episode was last updated." publish_at: type: - "string" - "null" format: "date-time" description: "The scheduled publish date (only present if scheduled)." required: - "id" - "hashed_id" - "description" - "summary" - "channel_hashed_id" - "media_hashed_id" - "published" - "created" - "updated" ExpiringAccessTokenInput: type: "object" unevaluatedProperties: false properties: expires_at: type: "string" format: "iso8601" description: "an ISO8601 string of when the token will expire, defaults to two days from creation" scopes: type: "array" items: type: "string" examples: - "graphql:all" - "all:delegate_to_contact_permissions" description: "The scopes the token will be granted. `graphql:all` allows GraphQL requests (e.g. the embedded transcript editor) and `all:delegate_to_contact_permissions` allows REST API requests authorized by the token's authorizations. Defaults to `[\"graphql:all\"]` when omitted." default: - "graphql:all" authorizations: type: "array" items: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "media" - "folder" - "account" description: "The type of object the permission is being performed on. Supports `media`, `folder` and `account`." id: type: "string" description: "The id of the object the permissions are being performed on: the hashed id of a `media` or `folder`, or the numeric `id` of the `account` (as returned by `GET /modern/account`), which must be the token's own account." permissions: type: "array" items: type: "string" examples: - "show" - "update" - "destroy" - "edit-transcripts" - "create-folders" description: "The permissions granted on the object. `media` supports `show`, `update`, `destroy` and `edit-transcripts`; `folder` supports `show`, `update` and `destroy`; `account` supports `create-folders`. Any permission implicitly allows viewing the object; all other permissions must be declared explicitly. A rule naming a `folder` also covers its subfolders: any permission lists and shows them, and `update` creates, renames and deletes them." required: - "type" - "id" - "permissions" description: "a list of authorizations the token will have" ExpiringAccessTokenResponse: type: "object" unevaluatedProperties: false properties: token: type: "string" description: "A token which can be used to authorize requests to Wistia. With the `graphql:all` scope it authorizes GraphQL requests such as transcript embeds; with the `all:delegate_to_contact_permissions` scope it can also be used as a bearer token for REST API requests authorized by the token's authorizations." required: - "token" BulkOperationPollView: type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "bulk_operation" description: "Discriminator identifying the wrapped resource type." summary: type: "object" unevaluatedProperties: false properties: total: type: "integer" description: "The total number of actions in the operation." succeeded: type: "integer" description: "The number of actions that have completed successfully." failed: type: "integer" description: "The number of actions that have failed." required: - "total" - "succeeded" - "failed" description: "Aggregate counts for the bulk operation. While the operation is\nrunning, `succeeded` and `failed` reflect progress so far.\n" results: type: "array" items: type: "object" unevaluatedProperties: false properties: position: type: "integer" description: "The zero-based index of the action within the submitted batch." operation: type: "string" enum: - "create" - "update" - "delete" - "move" - "purchase" description: "The operation that was performed. `purchase` appears only for\noperations submitted through the Create Bulk Purchase endpoint.\n" resource_type: type: "string" description: "The type of resource the action operated on." id: type: "string" description: "The hashed ID of the affected record. For successful creates this\nis the newly created record's ID. Absent when a create fails\nbefore a record exists.\n" status: type: "string" enum: - "succeeded" - "failed" description: "The outcome of the action." error: type: "string" description: "The failure reason. Only present for failed actions." required: - "position" - "status" description: "Per-action results, in submission order. Empty until actions begin\ncompleting.\n" required: - "type" - "summary" - "results" description: "Wire view of a bulk operation as it appears inside a background job status\npoll response. Discriminated by `type`.\n" WrappedObjectMixin: type: "object" properties: object: oneOf: - type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "bulk_operation" description: "Discriminator identifying the wrapped resource type." summary: type: "object" unevaluatedProperties: false properties: total: type: "integer" description: "The total number of actions in the operation." succeeded: type: "integer" description: "The number of actions that have completed successfully." failed: type: "integer" description: "The number of actions that have failed." required: - "total" - "succeeded" - "failed" description: "Aggregate counts for the bulk operation. While the operation is\nrunning, `succeeded` and `failed` reflect progress so far.\n" results: type: "array" items: type: "object" unevaluatedProperties: false properties: position: type: "integer" description: "The zero-based index of the action within the submitted batch." operation: type: "string" enum: - "create" - "update" - "delete" - "move" - "purchase" description: "The operation that was performed. `purchase` appears only for\noperations submitted through the Create Bulk Purchase endpoint.\n" resource_type: type: "string" description: "The type of resource the action operated on." id: type: "string" description: "The hashed ID of the affected record. For successful creates this\nis the newly created record's ID. Absent when a create fails\nbefore a record exists.\n" status: type: "string" enum: - "succeeded" - "failed" description: "The outcome of the action." error: type: "string" description: "The failure reason. Only present for failed actions." required: - "position" - "status" description: "Per-action results, in submission order. Empty until actions begin\ncompleting.\n" required: - "type" - "summary" - "results" description: "Wire view of a bulk operation as it appears inside a background job status\npoll response. Discriminated by `type`.\n" unevaluatedProperties: false description: "The wrapped resource, present only when the job type carries typed\npoll content. Use `type` to discriminate which shape this is.\n" BackgroundJobStatusDetail: allOf: - type: "object" properties: id: type: "integer" description: "The ID of the background job that's been queued for the request." hashed_id: type: "string" description: "The unguessable hashed ID of the background job. Prefer this over the numeric ID when polling for status." status: type: "string" enum: - "queued" - "started" - "finished" - "failed" description: "The status of the background job that's been queued for the request." required: - "id" - "hashed_id" - "status" description: "A background job keeps track of the progress of an asynchronous task, e.g\nbulk archiving media, translating media, etc.\n" - type: "object" properties: object: oneOf: - type: "object" unevaluatedProperties: false properties: type: type: "string" enum: - "bulk_operation" description: "Discriminator identifying the wrapped resource type." summary: type: "object" unevaluatedProperties: false properties: total: type: "integer" description: "The total number of actions in the operation." succeeded: type: "integer" description: "The number of actions that have completed successfully." failed: type: "integer" description: "The number of actions that have failed." required: - "total" - "succeeded" - "failed" description: "Aggregate counts for the bulk operation. While the operation is\nrunning, `succeeded` and `failed` reflect progress so far.\n" results: type: "array" items: type: "object" unevaluatedProperties: false properties: position: type: "integer" description: "The zero-based index of the action within the submitted batch." operation: type: "string" enum: - "create" - "update" - "delete" - "move" - "purchase" description: "The operation that was performed. `purchase` appears only for\noperations submitted through the Create Bulk Purchase endpoint.\n" resource_type: type: "string" description: "The type of resource the action operated on." id: type: "string" description: "The hashed ID of the affected record. For successful creates this\nis the newly created record's ID. Absent when a create fails\nbefore a record exists.\n" status: type: "string" enum: - "succeeded" - "failed" description: "The outcome of the action." error: type: "string" description: "The failure reason. Only present for failed actions." required: - "position" - "status" description: "Per-action results, in submission order. Empty until actions begin\ncompleting.\n" required: - "type" - "summary" - "results" description: "Wire view of a bulk operation as it appears inside a background job status\npoll response. Discriminated by `type`.\n" unevaluatedProperties: false description: "The wrapped resource, present only when the job type carries typed\npoll content. Use `type` to discriminate which shape this is.\n" unevaluatedProperties: false AllowedDomain: type: "object" unevaluatedProperties: false properties: domain: type: "string" examples: - "example.com" description: "The allowed domain name." created_at: type: "string" examples: - "2010-08-13T18:47:39+00:00" format: "date-time" description: "The date that the allowed domain was originally created." cursor: type: - "string" - "null" 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 records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`." required: - "domain" - "created_at" description: "An allowed domain represents a domain where a Wistia video can be embedded. Account\nrestrictions need to be enabled for an allowed domain to have an effect. See\nour [Domain Restrictions](https://support.wistia.com/en/articles/9691672-domain-restrictions)\nguide for more details.\n" Visitor: type: "object" unevaluatedProperties: false properties: visitor_key: type: "string" description: "A unique identifier for the visitor." created_at: type: "string" format: "date-time" description: "When the visitor was created." last_active_at: type: "string" format: "date-time" description: "The last time the visitor played a video." last_event_key: type: - "string" - "null" description: "The event key for the last video play action." identifying_event_key: type: - "string" - "null" description: "The event key for the conversion event that identified the visitor. Null when the visitor has not been identified." load_count: type: "integer" description: "The total number of videos loaded by the visitor." play_count: type: "integer" description: "The total number of videos played by the visitor." visitor_identity: type: "object" unevaluatedProperties: false properties: name: type: - "string" - "null" email: type: - "string" - "null" org: type: "object" unevaluatedProperties: false properties: name: type: - "string" - "null" title: type: - "string" - "null" user_agent_details: type: "object" unevaluatedProperties: false properties: browser: type: "string" browser_version: type: "string" platform: type: "string" mobile: type: "boolean" Event: type: "object" unevaluatedProperties: false properties: received_at: type: "string" format: "date-time" description: "Date and time when the event occurred." event_key: type: "string" description: "Unique identifier for the event." visitor_key: type: "string" description: "Identifier for the visitor." embed_url: type: "string" description: "URL of the page where the video was viewed." percent_viewed: type: "number" format: "float" description: "Decimal number denoting how much of the video was watched." ip: type: "string" description: "IP address of the viewer." org: type: "string" description: "Organization associated with the IP address." country: type: "string" description: "Country based on IP." region: type: "string" description: "Region based on IP." city: type: "string" description: "City based on IP." lat: type: "number" format: "float" description: "Latitude based on IP." lon: type: "number" format: "float" description: "Longitude based on IP." email: type: - "string" - "null" description: "Email of the viewer (if available)." media_id: type: "string" description: "Identifier for the video that was watched." media_name: type: "string" description: "Name of the video." media_url: type: "string" description: "URL of the video in Wistia." iframe_heatmap_url: type: "string" description: "URL for the heatmap of the event." thumbnail: type: "object" unevaluatedProperties: false properties: url: type: "string" width: type: "integer" height: type: "integer" fileSize: type: "integer" contentType: type: "string" type: type: "string" conversion_type: oneOf: - type: "integer" - type: "string" unevaluatedProperties: false description: "Type of conversion." conversion_data: type: "object" unevaluatedProperties: false properties: email: type: "string" first_name: type: "string" is_new_lead: type: "boolean" last_name: type: "string" description: "Additional data related to the conversion." user_agent_details: type: "object" unevaluatedProperties: false properties: browser: type: "string" browser_version: type: "string" platform: type: "string" mobile: type: "boolean" description: "Details about the user agent of the viewer." attributes: type: "object" unevaluatedProperties: true description: "Raw event attributes returned by the underlying analytics store. The keys mirror the top-level event fields." AccountMetricsMixin: type: "object" properties: unique_loads: type: - "integer" - "null" description: "The number of unique video loads." unique_plays: type: - "integer" - "null" description: "The number of unique video plays." plays: type: - "integer" - "null" description: "The total number of video plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." played_time: type: - "integer" - "null" description: "Total time spent watching the video in seconds." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors who loaded the video." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the video watched (between 0 and 1)." form_conversions: type: - "integer" - "null" description: "The number of form submissions." AccountMetrics: allOf: - type: "object" properties: unique_loads: type: - "integer" - "null" description: "The number of unique video loads." unique_plays: type: - "integer" - "null" description: "The number of unique video plays." plays: type: - "integer" - "null" description: "The total number of video plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." played_time: type: - "integer" - "null" description: "Total time spent watching the video in seconds." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors who loaded the video." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the video watched (between 0 and 1)." form_conversions: type: - "integer" - "null" description: "The number of form submissions." unevaluatedProperties: false TimestampBucketMixin: type: "object" properties: timestamp: type: "string" format: "date-time" description: "The start of the time bucket in ISO 8601 format." TopContentMetricsMixin: type: "object" properties: plays: type: - "integer" - "null" description: "The total number of plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the content watched (between 0 and 1)." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors." played_time: type: - "number" - "null" format: "float" description: "Total time spent watching in seconds." MediaTopContentMixin: type: "object" properties: media_name: type: - "string" - "null" description: "The name of the media." media_hashed_id: type: - "string" - "null" description: "The hashed ID of the media." media_type: type: - "string" - "null" description: "The type of the media (e.g., \"Video\", \"Audio\")." media_thumbnail_url: type: - "string" - "null" description: "URL of the media's thumbnail image." media_duration: type: - "number" - "null" format: "float" description: "The duration of the media in seconds." media_uploaded_at: type: - "string" - "null" description: "When the media was uploaded, in ISO 8601 format." media_deleted_at: type: - "string" - "null" description: "When the media was deleted, in ISO 8601 format. Null for media that still exist." unique_loads: type: - "integer" - "null" description: "The number of unique video loads." unique_plays: type: - "integer" - "null" description: "The number of unique video plays." form_conversions: type: - "integer" - "null" description: "The number of form submissions." MediaTopContentEntry: allOf: - type: "object" properties: plays: type: - "integer" - "null" description: "The total number of plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the content watched (between 0 and 1)." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors." played_time: type: - "number" - "null" format: "float" description: "Total time spent watching in seconds." - type: "object" properties: media_name: type: - "string" - "null" description: "The name of the media." media_hashed_id: type: - "string" - "null" description: "The hashed ID of the media." media_type: type: - "string" - "null" description: "The type of the media (e.g., \"Video\", \"Audio\")." media_thumbnail_url: type: - "string" - "null" description: "URL of the media's thumbnail image." media_duration: type: - "number" - "null" format: "float" description: "The duration of the media in seconds." media_uploaded_at: type: - "string" - "null" description: "When the media was uploaded, in ISO 8601 format." media_deleted_at: type: - "string" - "null" description: "When the media was deleted, in ISO 8601 format. Null for media that still exist." unique_loads: type: - "integer" - "null" description: "The number of unique video loads." unique_plays: type: - "integer" - "null" description: "The number of unique video plays." form_conversions: type: - "integer" - "null" description: "The number of form submissions." unevaluatedProperties: false required: - "media_hashed_id" ChannelTopContentMixin: type: "object" properties: channel_title: type: - "string" - "null" description: "The title of the channel." channel_hashed_id: type: - "string" - "null" description: "The hashed ID of the channel." channel_episode_count: type: - "integer" - "null" description: "The number of episodes in the channel." channel_created_at: type: - "string" - "null" description: "When the channel was created, in ISO 8601 format." channel_url: type: - "string" - "null" description: "The URL of the channel." ChannelTopContentEntry: allOf: - type: "object" properties: plays: type: - "integer" - "null" description: "The total number of plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the content watched (between 0 and 1)." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors." played_time: type: - "number" - "null" format: "float" description: "Total time spent watching in seconds." - type: "object" properties: channel_title: type: - "string" - "null" description: "The title of the channel." channel_hashed_id: type: - "string" - "null" description: "The hashed ID of the channel." channel_episode_count: type: - "integer" - "null" description: "The number of episodes in the channel." channel_created_at: type: - "string" - "null" description: "When the channel was created, in ISO 8601 format." channel_url: type: - "string" - "null" description: "The URL of the channel." unevaluatedProperties: false required: - "channel_hashed_id" ProjectTopContentMixin: type: "object" properties: project_name: type: - "string" - "null" description: "The name of the folder." project_hashed_id: type: - "string" - "null" description: "The hashed ID of the folder." project_created_at: type: - "string" - "null" description: "When the folder was created, in ISO 8601 format." project_url: type: - "string" - "null" description: "The URL of the folder." project_video_count: type: - "integer" - "null" description: "The number of videos in the folder." ProjectTopContentEntry: allOf: - type: "object" properties: plays: type: - "integer" - "null" description: "The total number of plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the content watched (between 0 and 1)." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors." played_time: type: - "number" - "null" format: "float" description: "Total time spent watching in seconds." - type: "object" properties: project_name: type: - "string" - "null" description: "The name of the folder." project_hashed_id: type: - "string" - "null" description: "The hashed ID of the folder." project_created_at: type: - "string" - "null" description: "When the folder was created, in ISO 8601 format." project_url: type: - "string" - "null" description: "The URL of the folder." project_video_count: type: - "integer" - "null" description: "The number of videos in the folder." unevaluatedProperties: false required: - "project_hashed_id" MediaMetricsMixin: type: "object" properties: unique_loads: type: - "integer" - "null" description: "The number of unique video loads." unique_plays: type: - "integer" - "null" description: "The number of unique video plays." plays: type: - "integer" - "null" description: "The total number of video plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." played_time: type: - "integer" - "null" description: "Total time spent watching the video in seconds." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors who loaded the video." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the video watched (between 0 and 1)." cta_impressions: type: - "integer" - "null" description: "The number of times a call-to-action was shown." cta_conversions: type: - "integer" - "null" description: "The number of times a call-to-action was clicked." cta_conversion_rate: type: - "number" - "null" format: "float" description: "The rate of CTA clicks over impressions (between 0 and 1)." form_conversions: type: - "integer" - "null" description: "The number of form submissions." MediaMetrics: allOf: - type: "object" properties: unique_loads: type: - "integer" - "null" description: "The number of unique video loads." unique_plays: type: - "integer" - "null" description: "The number of unique video plays." plays: type: - "integer" - "null" description: "The total number of video plays." play_rate: type: - "number" - "null" format: "float" description: "The percentage of loads that resulted in a play (between 0 and 1)." played_time: type: - "integer" - "null" description: "Total time spent watching the video in seconds." unique_visitors: type: - "integer" - "null" description: "The number of unique visitors who loaded the video." engagement_rate: type: - "number" - "null" format: "float" description: "The average percentage of the video watched (between 0 and 1)." cta_impressions: type: - "integer" - "null" description: "The number of times a call-to-action was shown." cta_conversions: type: - "integer" - "null" description: "The number of times a call-to-action was clicked." cta_conversion_rate: type: - "number" - "null" format: "float" description: "The rate of CTA clicks over impressions (between 0 and 1)." form_conversions: type: - "integer" - "null" description: "The number of form submissions." unevaluatedProperties: false WebinarAggregateMetricsMixin: type: "object" properties: registrations: type: - "integer" - "null" description: "The total number of registrations for the webinar." imported_registrations: type: - "integer" - "null" description: "The number of registrations imported from external sources." on_demand_registrations: type: - "integer" - "null" description: "The number of registrations for on-demand viewing." imported_on_demand_registrations: type: - "integer" - "null" description: "The number of on-demand registrations imported from external sources." total_watch_time: type: - "integer" - "null" description: "Total watch time across all attendees in seconds." average_watch_time: type: - "integer" - "null" description: "Average watch time per attendee in seconds." attendance: type: - "integer" - "null" description: "The total number of attendees who joined the live event." chatted_attendees: type: - "integer" - "null" description: "The number of attendees who sent at least one chat message." engagement_rate: type: - "number" - "null" format: "float" description: "The average engagement rate for attendees (between 0 and 1)." chats: type: - "integer" - "null" description: "The total number of chat messages sent during the event." currently_watching: type: - "integer" - "null" description: "The number of viewers currently watching (0 for completed events)." engaged_attendees: type: - "integer" - "null" description: "The number of attendees who were actively engaged." impressions: type: - "integer" - "null" description: "The total number of registration page impressions." on_demand_impressions: type: - "integer" - "null" description: "The number of on-demand page impressions." on_demand_plays: type: - "integer" - "null" description: "The number of on-demand video plays." on_demand_engagement_rate: type: - "number" - "null" format: "float" description: "The engagement rate for on-demand viewers (between 0 and 1)." event_time: type: - "integer" - "null" description: "The duration of the live event in seconds." qa_questions: type: - "integer" - "null" description: "The total number of Q&A questions asked during the event." poll_questions: type: - "array" - "null" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "The poll question ID." poll_id: type: "integer" description: "The poll ID this question belongs to." text: type: "string" description: "The question text." response_count: type: "integer" description: "The total number of responses." options: type: - "array" - "null" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "The option ID." text: type: "string" description: "The option text." count: type: "integer" description: "The number of times this option was selected." percent: type: "number" format: "float" description: "The percentage of respondents who selected this option." description: "The available answer options and their response counts." description: "Poll questions and their response data." WebinarAggregateMetrics: allOf: - type: "object" properties: registrations: type: - "integer" - "null" description: "The total number of registrations for the webinar." imported_registrations: type: - "integer" - "null" description: "The number of registrations imported from external sources." on_demand_registrations: type: - "integer" - "null" description: "The number of registrations for on-demand viewing." imported_on_demand_registrations: type: - "integer" - "null" description: "The number of on-demand registrations imported from external sources." total_watch_time: type: - "integer" - "null" description: "Total watch time across all attendees in seconds." average_watch_time: type: - "integer" - "null" description: "Average watch time per attendee in seconds." attendance: type: - "integer" - "null" description: "The total number of attendees who joined the live event." chatted_attendees: type: - "integer" - "null" description: "The number of attendees who sent at least one chat message." engagement_rate: type: - "number" - "null" format: "float" description: "The average engagement rate for attendees (between 0 and 1)." chats: type: - "integer" - "null" description: "The total number of chat messages sent during the event." currently_watching: type: - "integer" - "null" description: "The number of viewers currently watching (0 for completed events)." engaged_attendees: type: - "integer" - "null" description: "The number of attendees who were actively engaged." impressions: type: - "integer" - "null" description: "The total number of registration page impressions." on_demand_impressions: type: - "integer" - "null" description: "The number of on-demand page impressions." on_demand_plays: type: - "integer" - "null" description: "The number of on-demand video plays." on_demand_engagement_rate: type: - "number" - "null" format: "float" description: "The engagement rate for on-demand viewers (between 0 and 1)." event_time: type: - "integer" - "null" description: "The duration of the live event in seconds." qa_questions: type: - "integer" - "null" description: "The total number of Q&A questions asked during the event." poll_questions: type: - "array" - "null" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "The poll question ID." poll_id: type: "integer" description: "The poll ID this question belongs to." text: type: "string" description: "The question text." response_count: type: "integer" description: "The total number of responses." options: type: - "array" - "null" items: type: "object" unevaluatedProperties: false properties: id: type: "integer" description: "The option ID." text: type: "string" description: "The option text." count: type: "integer" description: "The number of times this option was selected." percent: type: "number" format: "float" description: "The percentage of respondents who selected this option." description: "The available answer options and their response counts." description: "Poll questions and their response data." unevaluatedProperties: false WebinarRegistrationMetricsMixin: type: "object" properties: registrations: type: - "integer" - "null" description: "The number of registrations in this time period." impressions: type: - "integer" - "null" description: "The number of registration page impressions in this time period." on_demand_registrations: type: - "integer" - "null" description: "The number of on-demand registrations in this time period." on_demand_impressions: type: - "integer" - "null" description: "The number of on-demand page impressions in this time period." completion_rate: type: - "number" - "null" format: "float" description: "The completion rate for attendees in this time period (between 0 and 1)." on_demand_completion_rate: type: - "number" - "null" format: "float" description: "The completion rate for on-demand viewers in this time period (between 0 and 1)." WebinarAudienceMemberMixin: type: "object" properties: first_name: type: - "string" - "null" description: "The registrant's first name." last_name: type: - "string" - "null" description: "The registrant's last name." email: type: - "string" - "null" description: "The registrant's email address." phone_number: type: - "string" - "null" description: "The registrant's phone number." company: type: - "string" - "null" description: "The registrant's company name." job_title: type: - "string" - "null" description: "The registrant's job title." country: type: - "string" - "null" description: "The registrant's country." registered_at: type: - "string" - "null" format: "date-time" description: "When the registrant registered in ISO 8601 format." attended_at: type: - "string" - "null" format: "date-time" description: "When the registrant joined the live event in ISO 8601 format." attendance_status: type: - "string" - "null" description: "Whether the registrant attended the event." restriction_status: type: - "string" - "null" description: "The registrant's restriction status (e.g., approved, blocked)." origin_method: type: - "string" - "null" description: "How the registrant was added (e.g., registration_form, import)." utm_campaign: type: - "string" - "null" description: "The UTM campaign that referred this registrant." utm_source: type: - "string" - "null" description: "The UTM source that referred this registrant." utm_medium: type: - "string" - "null" description: "The UTM medium that referred this registrant." referrer_domain: type: - "string" - "null" description: "The referring domain for this registrant." ip_country: type: - "string" - "null" description: "The registrant's country based on IP geolocation." ip_city: type: - "string" - "null" description: "The registrant's city based on IP geolocation." engagement_rate: type: - "number" - "null" format: "float" description: "The registrant's engagement rate during the event (between 0 and 1)." focused_rate: type: - "number" - "null" format: "float" description: "The registrant's focused viewing rate during the event (between 0 and 1)." played_time: type: - "integer" - "null" description: "Total time the registrant watched in seconds." focused_played_time: type: - "integer" - "null" description: "Total time the registrant watched with the tab focused in seconds." chat_count: type: - "integer" - "null" description: "The number of chat messages sent by this registrant." annotation_click_count: type: - "integer" - "null" description: "The number of annotation clicks by this registrant." poll_responses_count: type: - "integer" - "null" description: "The number of poll responses submitted by this registrant." attendee_histogram: type: - "array" - "null" items: type: - "integer" - "null" description: "Per-bucket attendance data for this registrant." focused_attendee_histogram: type: - "array" - "null" items: type: - "integer" - "null" description: "Per-bucket focused attendance data for this registrant." chats: type: - "array" items: type: "object" unevaluatedProperties: false properties: rounded_player_position: type: "integer" description: "The approximate position in the event when the chat was sent (in seconds)." chats: type: "array" items: type: "string" description: "The chat message content." description: "Chat messages sent by this registrant with timestamps." WebinarAudienceMember: allOf: - type: "object" properties: first_name: type: - "string" - "null" description: "The registrant's first name." last_name: type: - "string" - "null" description: "The registrant's last name." email: type: - "string" - "null" description: "The registrant's email address." phone_number: type: - "string" - "null" description: "The registrant's phone number." company: type: - "string" - "null" description: "The registrant's company name." job_title: type: - "string" - "null" description: "The registrant's job title." country: type: - "string" - "null" description: "The registrant's country." registered_at: type: - "string" - "null" format: "date-time" description: "When the registrant registered in ISO 8601 format." attended_at: type: - "string" - "null" format: "date-time" description: "When the registrant joined the live event in ISO 8601 format." attendance_status: type: - "string" - "null" description: "Whether the registrant attended the event." restriction_status: type: - "string" - "null" description: "The registrant's restriction status (e.g., approved, blocked)." origin_method: type: - "string" - "null" description: "How the registrant was added (e.g., registration_form, import)." utm_campaign: type: - "string" - "null" description: "The UTM campaign that referred this registrant." utm_source: type: - "string" - "null" description: "The UTM source that referred this registrant." utm_medium: type: - "string" - "null" description: "The UTM medium that referred this registrant." referrer_domain: type: - "string" - "null" description: "The referring domain for this registrant." ip_country: type: - "string" - "null" description: "The registrant's country based on IP geolocation." ip_city: type: - "string" - "null" description: "The registrant's city based on IP geolocation." engagement_rate: type: - "number" - "null" format: "float" description: "The registrant's engagement rate during the event (between 0 and 1)." focused_rate: type: - "number" - "null" format: "float" description: "The registrant's focused viewing rate during the event (between 0 and 1)." played_time: type: - "integer" - "null" description: "Total time the registrant watched in seconds." focused_played_time: type: - "integer" - "null" description: "Total time the registrant watched with the tab focused in seconds." chat_count: type: - "integer" - "null" description: "The number of chat messages sent by this registrant." annotation_click_count: type: - "integer" - "null" description: "The number of annotation clicks by this registrant." poll_responses_count: type: - "integer" - "null" description: "The number of poll responses submitted by this registrant." attendee_histogram: type: - "array" - "null" items: type: - "integer" - "null" description: "Per-bucket attendance data for this registrant." focused_attendee_histogram: type: - "array" - "null" items: type: - "integer" - "null" description: "Per-bucket focused attendance data for this registrant." chats: type: - "array" items: type: "object" unevaluatedProperties: false properties: rounded_player_position: type: "integer" description: "The approximate position in the event when the chat was sent (in seconds)." chats: type: "array" items: type: "string" description: "The chat message content." description: "Chat messages sent by this registrant with timestamps." unevaluatedProperties: false securitySchemes: BearerAuth: type: "http" scheme: "bearer" responses: "400": description: "Bad request" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Bad request" description: "Error message detailing the reason for the bad request." errors: type: "array" items: type: "string" description: "Array of error messages detailing the reasons for the bad request." "401": description: "Unauthorized, invalid or missing token" content: application/json: schema: type: "object" unevaluatedProperties: false properties: code: type: "string" enum: - "unauthorized_credentials" - "account_inactive" - "unauthorized_scope" - "unauthorized_params" description: "A machine-readable identifier for the specific authorization failure." 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" unevaluatedProperties: false properties: error: type: "string" examples: - "Webinars are not available on your current plan" "404": description: "Resource not found" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Folder with ID 'fakeid' not found." "422": description: "Unprocessable entity, the request parameters were invalid." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "A single error message describing what went wrong." errors: type: "array" examples: - - "Title is required" - "Event duration must be at least 15 minutes" items: type: "string" description: "Array of error messages describing what went wrong." "500": description: "Internal server error" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Internal server error" "503": description: "Analytics service is temporarily unavailable" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Analytics service is temporarily unavailable" 404-2: description: "Resource not found" 422_stats: description: "Unprocessable entity, the request parameters were invalid." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "Error message describing why the request could not be processed." 422_analytics: description: "Unprocessable entity" content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" description: "Error message detailing why the request could not be processed." 409_event_not_ended: description: "The event has not yet reached a terminal state. Analytics are only available after the event has ended." content: application/json: schema: type: "object" unevaluatedProperties: false properties: error: type: "string" examples: - "Aggregate analytics are not available until the event has ended" description: "Error message indicating the event has not ended." parameters: page: name: "page" in: "query" description: "The page number to retrieve. This cannot be combined with `cursor`,\npagination.\n" required: false schema: type: "integer" per_page: 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" cursor: name: "cursor" in: "query" description: "If `cursor[enabled]` is set to 1 then cursor pagination is enabled and the\nfirst set of records are fetched up to the `per_page`. Cursor\npagination will also be turned on if `cursor[before]` or `cursor[after]`\nare set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.\nThe cursor value of the last record can be used to fetch records after the current result set and\nthe cursor of the first record can be used to fetch records before the result set.\n\nNOTE: a cursor value is only valid if the `sort_by` value hasn't changed from the\nlast fetch. For example, you cannot fetch using `sort_by` id and then pass that\ncursor value to a `sort_by` name.\n" required: false style: "deepObject" schema: type: "object" unevaluatedProperties: false properties: enabled: type: "integer" enum: - 0 - 1 description: "If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This\nvalues is ignored if `cursor[before]` or `cursor[after]` are set.\n" before: type: "string" description: "If `cursor[before]` is set then cursor pagination is enabled and all records\nbefore the cursor up to the `per_page` are returned. This feature is useful for\nfetching \"new records\", for example, in a \"pull to refersh\" feature when showing records in a descending\norder.\n" after: type: "string" description: "If `cursor[after]` is set then cursor pagination is enabled and all records\nafter the cursor up to the `per_page` are returned.\n" sort_by: name: "sort_by" in: "query" description: "Ordering. Default is ID ASC. When using cursor pagination (see cursor param),\nonly `id` and `created` are supported. All other sort_by options (`position`, `title`, `updated`, `published_at`)\nrequire offset pagination.\n" required: false schema: type: "string" enum: - "position" - "title" - "created" - "updated" - "published_at" - "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 media_id: name: "media_id[]" in: "query" description: "Filter by media id. Accepts either the numeric id or the hashed id of a media." required: false schema: type: "array" items: type: "string" hashed_ids: name: "hashed_ids[]" 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" tags: - name: "Media" x-displayName: "Media" - name: "Customizations" x-displayName: "Customizations" - name: "Captions" x-displayName: "Captions" - name: "Speakers" x-displayName: "Speakers" - name: "Localizations" x-displayName: "Localizations" - name: "Trims" x-displayName: "Trims" - name: "Extended Audio Descriptions" x-displayName: "Extended Audio Descriptions" - name: "Brands" x-displayName: "Brands" - name: "Tags" x-displayName: "Tags" - name: "Taggings" x-displayName: "Taggings" - name: "Folders" x-displayName: "Folders" - name: "Folder Sharings" x-displayName: "Folder Sharings" - name: "Subfolders" x-displayName: "Subfolders" - name: "Channels" x-displayName: "Channels" - name: "Channel Collaborators" x-displayName: "Channel Collaborators" - name: "Channel Episodes" x-displayName: "Channel Episodes" - name: "Webinars" x-displayName: "Webinars" - name: "Webinar Collaborators" x-displayName: "Webinar Collaborators" - name: "Webinar Registrations" x-displayName: "Webinar Registrations" - name: "Account" x-displayName: "Account" - name: "Search" x-displayName: "Search" - name: "Resource URLs" x-displayName: "Resource URLs" - name: "Expiring Access Tokens" x-displayName: "Expiring Access Tokens" - name: "Background Job Status" x-displayName: "Background Job Status" - name: "Allowed Domains" x-displayName: "Allowed Domains" - name: "Deleted Media" x-displayName: "Deleted Media" - name: "Review Bundles" x-displayName: "Review Bundles" - name: "Share Links" x-displayName: "Share Links" - name: "Bulk Actions" x-displayName: "Bulk Actions" - name: "Bulk Purchases" x-displayName: "Bulk Purchases" - name: "Contacts" x-displayName: "Contacts" - name: "Account Trials" x-displayName: "Account Trials" - name: "Stats:Account" x-displayName: "Stats:Account" - name: "Stats:Events" x-displayName: "Stats:Events" - name: "Stats:Media" x-displayName: "Stats:Media" - name: "Stats:Projects" x-displayName: "Stats:Projects" - name: "Stats:Visitors" x-displayName: "Stats:Visitors" - name: "Analytics:Account" x-displayName: "Analytics:Account" - name: "Analytics:Media" x-displayName: "Analytics:Media" - name: "Analytics:Webinar" x-displayName: "Analytics:Webinar" servers: - url: "https://api.wistia.com/modern" x-tagGroups: - name: "Data API" tags: - "Media" - "Customizations" - "Captions" - "Speakers" - "Localizations" - "Trims" - "Extended Audio Descriptions" - "Brands" - "Tags" - "Taggings" - "Folders" - "Folder Sharings" - "Subfolders" - "Channels" - "Channel Collaborators" - "Channel Episodes" - "Webinars" - "Webinar Collaborators" - "Webinar Registrations" - "Account" - "Search" - "Resource URLs" - "Expiring Access Tokens" - "Background Job Status" - "Allowed Domains" - "Deleted Media" - "Review Bundles" - "Share Links" - "Bulk Actions" - "Bulk Purchases" - "Contacts" - "Account Trials" - name: "Stats API" tags: - "Stats:Account" - "Stats:Events" - "Stats:Media" - "Stats:Projects" - "Stats:Visitors" - name: "Analytics API" tags: - "Analytics:Account" - "Analytics:Media" - "Analytics:Webinar"