Wistia Captions API

The Captions API from Wistia — 3 operation(s) for captions.

Operations 15

GET /medias/{hashedId}/captions List captions #
POST /medias/{hashedId}/captions Create captions #
GET /medias/{hashedId}/captions/{languageCode} Show captions #
PUT /medias/{hashedId}/captions/{languageCode} Update captions #
DELETE /medias/{hashedId}/captions/{languageCode} Delete captions #
POST /medias/{hashedId}/captions/purchase Purchase captions #
GET /medias/{mediaHashedId}/captions List Captions by Media
POST /medias/{mediaHashedId}/captions Create Captions
GET /captions List Captions
POST /medias/{mediaHashedId}/captions/purchase Purchase Captions
GET /medias/{mediaHashedId}/captions/{languageCode} Show Captions
PUT /medias/{mediaHashedId}/captions/{languageCode} Update Captions
DELETE /medias/{mediaHashedId}/captions/{languageCode} Delete Captions
POST /medias/{mediaHashedId}/captions/{languageCode}/edits Edit Captions Text
POST /medias/{mediaHashedId}/captions/order Order Captions

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/wistia-captions-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

wistia-captions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Wistia Captions API
  version: '1.0'
  description: 'Operations tagged Captions across 4 of this provider''s published API definitions: wistia-captions-api-openapi.yml, wistia-data-api-2026-01-openapi.yml, wistia-data-api-modern-edge-openapi.yml, wistia-data-api-v1-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.wistia.com/v1
  description: Wistia Data API production server
- url: https://api.wistia.com/modern
tags:
- name: Captions
paths:
  /medias/{hashedId}/captions:
    parameters:
    - in: path
      name: hashedId
      required: true
      schema:
        type: string
    get:
      tags:
      - Captions
      summary: List captions
      operationId: listCaptions
      responses:
        '200':
          description: OK
      security:
      - bearerAuth: []
      - basicAuth: []
    post:
      tags:
      - Captions
      summary: Create captions
      operationId: createCaptions
      responses:
        '201':
          description: Created
      security:
      - bearerAuth: []
      - basicAuth: []
    servers:
    - url: https://api.wistia.com/v1
      description: Wistia Data API production server
  /medias/{hashedId}/captions/{languageCode}:
    parameters:
    - in: path
      name: hashedId
      required: true
      schema:
        type: string
    - in: path
      name: languageCode
      required: true
      schema:
        type: string
    get:
      tags:
      - Captions
      summary: Show captions
      operationId: getCaption
      responses:
        '200':
          description: OK
      security:
      - bearerAuth: []
      - basicAuth: []
    put:
      tags:
      - Captions
      summary: Update captions
      operationId: updateCaption
      responses:
        '200':
          description: OK
      security:
      - bearerAuth: []
      - basicAuth: []
    delete:
      tags:
      - Captions
      summary: Delete captions
      operationId: deleteCaption
      responses:
        '204':
          description: No Content
      security:
      - bearerAuth: []
      - basicAuth: []
    servers:
    - url: https://api.wistia.com/v1
      description: Wistia Data API production server
  /medias/{hashedId}/captions/purchase:
    parameters:
    - in: path
      name: hashedId
      required: true
      schema:
        type: string
    post:
      tags:
      - Captions
      summary: Purchase captions
      operationId: purchaseCaptions
      responses:
        '200':
          description: OK
      security:
      - bearerAuth: []
      - basicAuth: []
    servers:
    - url: https://api.wistia.com/v1
      description: Wistia Data API production server
  /medias/{mediaHashedId}/captions:
    get:
      summary: List Captions by Media
      description: 'Lists captions belonging to a specific video.


        <!--- HIDE-MCP -->

        ## Requires api token with one of the following permissions

        ```

        Read all folder and media data

        ```

        <!--- /HIDE-MCP -->

        '
      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:
                  unevaluatedProperties: false
                  type: object
                  properties:
                    english_name:
                      description: English name of the language.
                      type: string
                    native_name:
                      description: Native name of the language.
                      type: string
                    language:
                      description: A 3 character language code as specified by ISO-639–2.
                      type: string
                    text:
                      description: The text of the captions for the specified language in SRT format.
                      type:
                      - string
                      - 'null'
                    is_draft:
                      type: boolean
                    id:
                      description: The unique hashed identifier of the time-coded transcript.
                      type: string
                    cursor:
                      description: A cursor for stable pagination based on current `sort_by` order. You can pass this to `cursor[before]` or `cursor[after]` as a parameter to fetch the records before or after this record in the same sort order. This is only populated if records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`.
                      type:
                      - string
                      - 'null'
                  required:
                  - language
                  - is_draft
                  - id
        '401':
          description: Unauthorized, invalid or missing token
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  code:
                    description: A machine-readable identifier for the specific authorization failure.
                    type: string
                    enum:
                    - unauthorized_credentials
                    - account_inactive
                    - unauthorized_scope
                    - unauthorized_params
                  error:
                    type: string
                    examples:
                    - Invalid credentials.
        '404':
          description: Video not found
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Internal server error
      tags:
      - Captions
      security:
      - BearerAuth: []
    post:
      summary: Create Captions
      description: 'Adds captions to a specified video by providing an SRT file or its contents directly.


        <!--- HIDE-MCP -->

        ## Requires api token with one of the following permissions

        ```

        Read, update & delete anything

        ```

        <!--- /HIDE-MCP -->

        '
      parameters:
      - name: mediaHashedId
        in: path
        description: The hashed ID of the media for which captions are to be added.
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              unevaluatedProperties: false
              type: object
              properties:
                caption_file:
                  description: Either an attached SRT file or a string parameter with the contents of an SRT file.
                  type: string
                language:
                  description: An optional parameter that denotes which language this file represents. Should conform to ISO-639–2. If left unspecified, the language code will be detected automatically.
                  type: string
              required:
              - caption_file
          multipart/form-data:
            schema:
              unevaluatedProperties: false
              type: object
              properties:
                caption_file:
                  description: Either an attached SRT file or a string parameter with the contents of an SRT file.
                  type: string
                  format: binary
                language:
                  description: An optional parameter that denotes which language this file represents. Should conform to ISO-639–2. If left unspecified, the language code will be detected automatically.
                  type: string
              required:
              - caption_file
      responses:
        '200':
          description: Captions added successfully
        '400':
          description: Captions already exist for this video
        '401':
          description: Unauthorized, invalid or missing token
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  code:
                    description: A machine-readable identifier for the specific authorization failure.
                    type: string
                    enum:
                    - unauthorized_credentials
                    - account_inactive
                    - unauthorized_scope
                    - unauthorized_params
                  error:
                    type: string
                    examples:
                    - Invalid credentials.
        '404':
          description: Video not found
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Internal server error
      tags:
      - Captions
      security:
      - BearerAuth: []
    servers:
    - url: https://api.wistia.com/modern
  /captions:
    get:
      summary: List Captions
      description: 'Lists captions belonging to the account. This endpoint can also narrow down results

        to those belonging to a specific video.


        <!--- HIDE-MCP -->

        ## Requires api token with one of the following permissions

        ```

        Read all folder and media data

        ```

        <!--- /HIDE-MCP -->

        '
      parameters:
      - name: media_id
        in: query
        description: Find captions for a particular video by providing the media hashed ID
        required: false
        schema:
          type: string
      - name: page
        in: query
        description: 'The page number to retrieve. This cannot be combined with `cursor`,

          pagination.

          '
        required: false
        schema:
          type: integer
      - name: per_page
        in: query
        description: The number of medias per page. Use this for both offset pagination and cursor pagination.
        required: false
        schema:
          type: integer
      - name: cursor
        in: query
        description: 'If `cursor[enabled]` is set to 1 than cursor pagination is enabled and the

          first set of records are fetched up to the `per_page`. Cursor

          pagination will also be turned on if `cursor[before]` or `cursor[after]`

          are set. Records returned will have a `cursor` property set which can be used to fetch more records in the same `sort_by` ordering.

          The cursor value of the last record can be used to fetch records after the current result set and

          the cursor of the first record can be used to fetch records before the result set.


          NOTE: a cursor value is only valid if the `sort_by` value hasn''t changed from the

          last fetch. For example, you cannot fetch using `sort_by` id and than pass that

          cursor value to a `sort_by` name.

          '
        required: false
        schema:
          unevaluatedProperties: false
          type: object
          properties:
            enabled:
              description: 'If `cursor[enabled]` is set to 1, the first result set will be fetched with cursor pagination enabled. This

                values is ignored if `cursor[before]` or `cursor[after]` are set.

                '
              type: integer
              enum:
              - 0
              - 1
            before:
              description: 'If `cursor[before]` is set than cursor pagination is enabled and all records

                before the cursor up to the `per_page` are returned. This feature is useful for

                fetching "new records", for example, in a "pull to refersh" feature when showing records in a descending

                order.

                '
              type: string
            after:
              description: 'If `cursor[after]` is set than cursor pagination is enabled and all records

                after the cursor up to the `per_page` are returned.

                '
              type: string
        style: deepObject
      - name: sort_by
        in: query
        description: 'Ordering. When using cursor pagination (see cursor param),

          only `id` is supported.

          '
        required: false
        schema:
          type: string
          enum:
          - id
          - 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: Captions retrieval successful
          content:
            application/json:
              schema:
                type: array
                items:
                  unevaluatedProperties: false
                  type: object
                  properties:
                    english_name:
                      description: English name of the language.
                      type: string
                    native_name:
                      description: Native name of the language.
                      type: string
                    language:
                      description: A 3 character language code as specified by ISO-639–2.
                      type: string
                    text:
                      description: The text of the captions for the specified language in SRT format.
                      type:
                      - string
                      - 'null'
                    is_draft:
                      type: boolean
                    id:
                      description: The unique hashed identifier of the time-coded transcript.
                      type: string
                    cursor:
                      description: A cursor for stable pagination based on current `sort_by` order. You can pass this to `cursor[before]` or `cursor[after]` as a parameter to fetch the records before or after this record in the same sort order. This is only populated if records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`.
                      type:
                      - string
                      - 'null'
                  required:
                  - language
                  - is_draft
                  - id
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    description: Error message detailing the reason for the bad request.
                    type: string
                    examples:
                    - Bad request
                  errors:
                    description: Array of error messages detailing the reasons for the bad request.
                    type: array
                    items:
                      type: string
        '401':
          description: Unauthorized, invalid or missing token
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  code:
                    description: A machine-readable identifier for the specific authorization failure.
                    type: string
                    enum:
                    - unauthorized_credentials
                    - account_inactive
                    - unauthorized_scope
                    - unauthorized_params
                  error:
                    type: string
                    examples:
                    - Invalid credentials.
        '404':
          description: Video not found (when media_id parameter is provided)
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Internal server error
      tags:
      - Captions
      security:
      - BearerAuth: []
    servers:
    - url: https://api.wistia.com/modern
  /medias/{mediaHashedId}/captions/purchase:
    post:
      summary: Purchase Captions
      x-wistia-is-purchase: true
      x-wistia-mcp-annotations:
        open_world_hint: true
        destructive_hint: true
      description: 'This method is for purchasing English captions for a video. The request will charge the credit card on the account if successful. A saved credit card is required to use this endpoint.


        > 🚫 Alert

        >

        > The `automated` parameter defaults to `false`, which orders **paid human-generated captions**. To order computer-generated captions, you must explicitly set `automated` to `true`.


        <!--- HIDE-MCP -->

        ## Requires api token with one of the following permissions

        ```

        Read, update & delete anything

        ```

        <!--- /HIDE-MCP -->

        '
      parameters:
      - name: mediaHashedId
        in: path
        description: Unique identifier for the video.
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              unevaluatedProperties: false
              type: object
              properties:
                automated:
                  description: Order computer-generated captions or paid human-generated captions.
                  type: boolean
                  default: false
                rush:
                  description: Enable rush order for one business day turnaround or standard four business day turnaround for human-generated captions. Rush can only be used for human-generated captions.
                  type: boolean
                  default: false
                automatically_enable:
                  description: Automatically enable captions for the video once the order is ready or hold the captions for review before manually enabling.
                  type: boolean
                  default: true
              required:
              - automated
              - rush
              - automatically_enable
      responses:
        '200':
          description: Successful operation. Captions purchased.
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  message:
                    description: Success message indicating the captions have been purchased
                    type: string
                    examples:
                    - Captions purchased for this video. Your account will be charged when the captions are ready.
                  id:
                    description: The unique hashed identifier of the time-coded transcript that was created
                    type: string
                    examples:
                    - abc123def456
                required:
                - message
                - id
        '400':
          description: English captions already exist for this video.
        '401':
          description: Unauthorized, invalid or missing token
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  code:
                    description: A machine-readable identifier for the specific authorization failure.
                    type: string
                    enum:
                    - unauthorized_credentials
                    - account_inactive
                    - unauthorized_scope
                    - unauthorized_params
                  error:
                    type: string
                    examples:
                    - Invalid credentials.
        '404':
          description: Video not found.
        '422':
          description: Unprocessable entity. Account not eligible, captions already purchased, or other validation error.
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  message:
                    description: Error message explaining why the purchase cannot be completed
                    type: string
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Internal server error
      tags:
      - Captions
      security:
      - BearerAuth: []
    servers:
    - url: https://api.wistia.com/modern
  /medias/{mediaHashedId}/captions/{languageCode}:
    get:
      summary: Show Captions
      description: 'Returns a video''s captions in the specified language.

        Supports multiple formats: JSON (default), SRT, VTT, and TXT.

        Use file extensions (.srt, .vtt, .txt) or Accept headers to specify format.


        <!--- HIDE-MCP -->

        ## Requires api token with one of the following permissions

        ```

        Read all folder and media data

        ```

        <!--- /HIDE-MCP -->

        '
      parameters:
      - name: mediaHashedId
        in: path
        description: The hashed ID of the media from which captions are to be retrieved.
        required: true
        schema:
          type: string
      - name: languageCode
        in: path
        description: The 3-character ISO 639-2 language code of the captions to be retrieved (e.g., `eng`, `fra`, `spa`). Some languages use extended IETF subtags (e.g., `zh-Hant`).
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response containing captions in the requested format
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  english_name:
                    description: English name of the language.
                    type: string
                  native_name:
                    description: Native name of the language.
                    type: string
                  language:
                    description: A 3 character language code as specified by ISO-639–2.
                    type: string
                  text:
                    description: The text of the captions for the specified language in SRT format.
                    type:
                    - string
                    - 'null'
                  is_draft:
                    type: boolean
                  id:
                    description: The unique hashed identifier of the time-coded transcript.
                    type: string
                  cursor:
                    description: A cursor for stable pagination based on current `sort_by` order. You can pass this to `cursor[before]` or `cursor[after]` as a parameter to fetch the records before or after this record in the same sort order. This is only populated if records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`.
                    type:
                    - string
                    - 'null'
                required:
                - language
                - is_draft
                - id
            text/plain:
              schema:
                description: Caption content in SRT or TXT format
                type: string
            text/vtt:
              schema:
                description: Caption content in VTT format
                type: string
        '401':
          description: Unauthorized, invalid or missing token
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  code:
                    description: A machine-readable identifier for the specific authorization failure.
                    type: string
                    enum:
                    - unauthorized_credentials
                    - account_inactive
                    - unauthorized_scope
                    - unauthorized_params
                  error:
                    type: string
                    examples:
                    - Invalid credentials.
        '404':
          description: Captions not found or video not found
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Internal server error
      tags:
      - Captions
      security:
      - BearerAuth: []
    put:
      summary: Update Captions
      description: 'This method is for replacing the captions on a video for the specified language.


        <!--- HIDE-MCP -->

        ## Requires api token with one of the following permissions

        ```

        Read, update & delete anything

        ```

        <!--- /HIDE-MCP -->

        '
      parameters:
      - name: mediaHashedId
        in: path
        description: Unique identifier for the video.
        required: true
        schema:
          type: string
      - name: languageCode
        in: path
        description: Language code conforming to ISO-639-2 for which the captions should be updated.
        required: true
        schema:
          type: string
          pattern: ^[a-z]{3}$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              unevaluatedProperties: false
              type: object
              properties:
                caption_file:
                  description: Either an attached SRT file or a string parameter with the contents of an SRT file.
                  type: string
              required:
              - caption_file
          multipart/form-data:
            schema:
              unevaluatedProperties: false
              type: object
              properties:
                caption_file:
                  description: Either an attached SRT file or a string parameter with the contents of an SRT file.
                  type: string
                  format: binary
              required:
              - caption_file
      responses:
        '200':
          description: Successful operation. Captions replaced.
        '401':
          description: Unauthorized, invalid or missing token
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  code:
                    description: A machine-readable identifier for the specific authorization failure.
                    type: string
                    enum:
                    - unauthorized_credentials
                    - account_inactive
                    - unauthorized_scope
                    - unauthorized_params
                  error:
                    type: string
                    examples:
                    - Invalid credentials.
        '404':
          description: Captions or video not found.
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Internal server error
      tags:
      - Captions
      security:
      - BearerAuth: []
    delete:
      summary: Delete Captions
      description: 'Removes the captions file from a video for the specified language.


        <!--- HIDE-MCP -->

        ## Requires api token with one of the following permissions

        ```

        Read, update & delete anything

        ```

        <!--- /HIDE-MCP -->

        '
      parameters:
      - name: mediaHashedId
        in: path
        description: Unique identifier for the video.
        required: true
        schema:
          type: string
      - name: languageCode
        in: path
        description: Language code conforming to ISO-639-2 for which the captions should be removed.
        required: true
        schema:
          type: string
          pattern: ^[a-z]{3}$
      responses:
        '200':
          description: Successful operation. Captions removed.
        '401':
          description: Unauthorized, invalid or missing token
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  code:
                    description: A machine-readable identifier for the specific authorization failure.
                    type: string
                    enum:
                    - unauthorized_credentials
                    - account_inactive
                    - unauthorized_scope
                    - unauthorized_params
                  error:
                    type: string
                    examples:
                    - Invalid credentials.
        '404':
          description: Captions or video not found.
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Internal server error
      tags:
      - Captions
      security:
      - BearerAuth: []
    servers:
    - url: https://api.wistia.com/modern
  /medias/{mediaHashedId}/captions/{languageCode}/edits:
    post:
      summary: Edit Captions Text
      x-wistia-mcp-annotations:
        read_only_hint: false
        read_only_hint_justification: This tool rewrites transcript text and saves a new caption version, so it modifies data.
        open_world_hint: false
        open_world_hint_justification: This tool only operates on records inside the account and does not reach external services.
        destructive_hint: true
        destructive_hint_justification: Edits replace or delete existing transcript text; the public API has no undo, so previous wording cannot be recovered through it.
        idempotent_hint: false
        idempotent_hint_justification: Each call is checked against a specific caption version and advances it, so re-sending the same request against the new version no longer matches and is rejected.
      x-speakeasy-group: captions
      x-speakeasy-name-override: edit
      description: 'Applies targeted find-and-replace corrections to a media''s transcript for

        the specified language, preserving the timings of unchanged words. The whole

        batch is applied atomically against a specific caption version, or nothing is.


        ## Requires api token with one of the following permissions

        ```

        Read, update & delete anything

        ```

        '
      x-wistia-mcp-tool-name: edit-captions-text
      x-wistia-mcp-description: 'Apply targeted corrections to one caption track while preserving word

        timings. Use this instead of update-captions for small fixes;

        update-captions replaces the entire track.


        First call show-captions-file 

# --- truncated at 32 KB (50 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/wistia/refs/heads/main/openapi/wistia-captions-api-openapi.yml