> ## 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.

# Replace the video file

> Prepares an existing video for a replacement upload. Previously encoded files and thumbnails are deleted (captions and chapters are kept), the CDN cache is purged, and fresh TUS upload credentials are returned. Upload the new file exactly as for `POST /v1/api/video`. Requires the `UPDATE_MEDIA` scope.



## OpenAPI

````yaml POST /v1/api/video/{videoId}/tus
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}/tus:
    parameters:
      - $ref: '#/components/parameters/videoId'
    post:
      tags:
        - Videos
      summary: Replace the video file
      description: >-
        Prepares an existing video for a replacement upload. Previously encoded
        files and thumbnails are deleted (captions and chapters are kept), the
        CDN cache is purged, and fresh TUS upload credentials are returned.
        Upload the new file exactly as for `POST /v1/api/video`. Requires the
        `UPDATE_MEDIA` scope.
      responses:
        '200':
          description: Upload credentials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadCredentials'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  parameters:
    videoId:
      name: videoId
      in: path
      required: true
      description: Video ID (GUID)
      schema:
        type: string
        example: 657bb740-a71b-4529-a012-528021c31a92
  schemas:
    UploadCredentials:
      type: object
      properties:
        videoId:
          type: string
        libraryId:
          type: integer
          description: Send as the `LibraryId` TUS header
        uploadUrl:
          type: string
          format: uri
          example: string
        signature:
          type: string
          description: Send as the `AuthorizationSignature` TUS header
        expiry:
          type: integer
          description: >-
            Unix time in milliseconds. Send as the `AuthorizationExpire` TUS
            header.
    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
    NotFound:
      description: Resource not found in this account
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Not found
  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.

````