> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pnplayer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Generate captions automatically

> Queues automatic transcription for the video in each target language. Generated tracks appear on the video once processing completes. The video ID must be sent in the body as well as the path. Requires the `UPDATE_MEDIA` scope.



## OpenAPI

````yaml POST /v1/api/video/{videoId}/captions/transcribe
openapi: 3.1.0
info:
  title: PN Player API
  description: >-
    Manage videos, captions, playlists, tags, analytics, team members and
    account settings for your PN Player account.


    All `/v1/api` endpoints accept either an API key in the `X-Auth-Token`
    header or a JWT in the `Authorization: Bearer` header. Most endpoints also
    require the calling user to hold a specific role (scope): `READ_MEDIA`,
    `UPDATE_MEDIA`, `READ_ANALYTICS`, `READ_BILLING`, `READ_SETTINGS`,
    `UPDATE_SETTINGS` or `UPDATE_USERS`. The required scope is noted on each
    endpoint.
  version: 2.0.0
servers:
  - url: https://api.pnplayer.com
security:
  - apiKeyAuth: []
  - bearerAuth: []
tags:
  - name: Authentication
    description: >-
      Obtain a session token or reset a password. These endpoints do not require
      authentication.
  - name: Videos
    description: Create, list, update and delete videos.
  - name: Captions
    description: Upload, download, transcribe and manage caption tracks for a video.
  - name: Playlists
    description: Manual and rule-based (dynamic) playlists.
  - name: Tags
    description: Account-level tags that can be attached to videos.
  - name: Analytics
    description: Playback, engagement and usage metrics.
  - name: Reports
    description: Saved analytics report links.
  - name: Account
    description: Team members and account-wide streaming and security settings.
  - name: Profile
    description: The authenticated user's own profile.
  - name: API keys
    description: Long-lived keys for programmatic access.
  - name: Webhooks
    description: Configure the HTTPS endpoint that receives signed event notifications.
  - name: Billing
    description: Plan, usage, invoices, expansion packs and billing address.
  - name: Transcription settings
    description: Per-account key/value settings for automatic transcription.
  - name: Feature requests
    description: Submit, upvote and discuss feature requests.
  - name: Agreements
    description: Data processing agreement (DPA) and enterprise order form signing.
paths:
  /v1/api/video/{videoId}/captions/transcribe:
    parameters:
      - $ref: '#/components/parameters/videoId'
    post:
      tags:
        - Captions
      summary: Generate captions automatically
      description: >-
        Queues automatic transcription for the video in each target language.
        Generated tracks appear on the video once processing completes. The
        video ID must be sent in the body as well as the path. Requires the
        `UPDATE_MEDIA` scope.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - videoId
                - targetLanguages
              properties:
                videoId:
                  type: string
                  description: Same value as the path parameter
                targetLanguages:
                  type: array
                  items:
                    type: string
                  example:
                    - en
                    - es
      responses:
        '200':
          description: Transcription queued
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
        '400':
          description: Missing fields or rejected by the transcription service
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          $ref: '#/components/responses/Forbidden'
components:
  parameters:
    videoId:
      name: videoId
      in: path
      required: true
      description: Video ID (GUID)
      schema:
        type: string
        example: 657bb740-a71b-4529-a012-528021c31a92
  schemas:
    Message:
      type: object
      properties:
        message:
          type: string
          example: success
    Error:
      type: object
      required:
        - message
      properties:
        message:
          type: string
  responses:
    Forbidden:
      description: The caller lacks the required scope
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Forbidden
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-Auth-Token
      description: >-
        API key created in the dashboard or via `POST /v1/api/api-keys`. Keys
        are prefixed `pn_` and do not expire until revoked.
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Session token from `POST /auth/token`, valid for 24 hours.

````