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

# Upload Media File to Track

> ### POST /releases/{id}/tracks/{trackId}/media/file

<Note>
  This endpoint requires authentication. Include your Bearer token in the Authorization header.
</Note>

## Description

This endpoint allows uploading a single media file to a specific track. Only audio and video files are allowed for tracks.
Each track can have only one audio or video file. The file is stored temporarily and transferred to permanent storage upon approval.

## Code Examples

<CodeGroup>
  ```javascript Node.js theme={null}
  const response = await fetch('https://api.royalti.io/releases/example-id/tracks/example-id/media/file', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({})
  });

  const data = await response.json();
  console.log(data);
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
    'https://api.royalti.io/releases/example-id/tracks/example-id/media/file',
    headers={
      'Authorization': f'Bearer {token}'
    },
    json={}
  )

  data = response.json()
  print(data)
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.royalti.io/releases/example-id/tracks/example-id/media/file \
    -H "Authorization: Bearer YOUR_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{}'

  ```
</CodeGroup>


## OpenAPI

````yaml post /releases/{id}/tracks/{trackId}/media/file
openapi: 3.0.0
info:
  title: Royalti.io API
  description: "# Royalti API\r\n\r\nThis is the Royalti music royalty management platform API server.\r\n\r\n## Overview\r\n\r\nThe Royalti API provides comprehensive music royalty management services including:\r\n- Music publishing and writer management\r\n- Royalty processing and analytics\r\n- DDEX integration for music industry standards\r\n- File processing and pattern recognition\r\n- Payment processing and distribution\r\n\r\n## Authentication\r\n\r\nThe API uses JWT-based authentication with multiple protection levels:\r\n- Public endpoints for basic operations\r\n- Protected endpoints requiring valid JWT tokens\r\n- Admin endpoints for administrative functions\r\n\r\n## Features\r\n\r\n- Multi-dimensional royalty analytics\r\n- CWR (Collective Works Registration) support\r\n- DDEX integration for music metadata\r\n- Advanced file processing with pattern recognition\r\n- Real-time data processing with queue system"
  version: 2.6.0
  contact:
    name: Royalti.io Support
    email: support@royalti.io
    url: https://royalti.io
  license:
    name: Proprietary
    url: https://royalti.io/terms
servers:
  - url: https://api.royalti.io
    description: Production server
  - url: https://api-dev.royalti.io
    description: Development server
  - url: http://localhost:8084
    description: Local development
security:
  - bearerAuth: []
tags:
  - name: Accounting
    description: Accounting and financial transaction operations
  - name: DDEX
    description: DDEX operations (ERN/MEAD, messages, delivery, providers)
  - name: Label
    description: Label management operations
  - name: Internal Webhooks
    description: Internal system webhooks for royalty processing and downloads
  - name: Payment Webhooks
    description: Payment processor webhook endpoints
  - name: Billing Webhooks
    description: Stripe billing and subscription webhooks
  - name: Infrastructure Webhooks
    description: Cloudflare domain and SSL webhooks
  - name: Distribution Webhooks
    description: Digital distribution platform webhooks (FUGA)
paths:
  /releases/{id}/tracks/{trackId}/media/file:
    post:
      tags:
        - Track Media
      summary: Upload Media File to Track
      description: >-
        ### POST /releases/{id}/tracks/{trackId}/media/file


        This endpoint allows uploading a single media file to a specific track.
        Only audio and video files are allowed for tracks.

        Each track can have only one audio or video file. The file is stored
        temporarily and transferred to permanent storage upon approval.
      parameters:
        - name: id
          in: path
          required: true
          description: Release ID
          schema:
            type: string
            format: uuid
        - name: trackId
          in: path
          required: true
          description: Track ID
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: Single audio or video file
              required:
                - file
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MediaUploadResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - bearerAuth: []
components:
  schemas:
    MediaUploadResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
        data:
          oneOf:
            - $ref: '#/components/schemas/Media'
            - type: array
              items:
                $ref: '#/components/schemas/Media'
        message:
          type: string
          example: Media uploaded successfully
    Media:
      type: object
      properties:
        cloudId:
          type: string
          description: Cloud storage file ID or unique identifier for links
          example: 550e8400-e29b-41d4-a716-446655440000
        cloudUrl:
          type: string
          format: uri
          description: Public URL from cloud storage OR the submitted link URL
          example: https://storage.royalti.io/files/audio.mp3
        type:
          type: string
          enum:
            - audio
            - video
            - image
            - document
          description: File type
          example: audio
        name:
          type: string
          description: File name or link title
          example: my-track.mp3
        isLink:
          type: boolean
          description: Flag to distinguish links from files
          example: false
        releasePath:
          type: string
          description: Temporary release storage path (for files only)
          nullable: true
          example: tenant123/releases/release456/tracks/track789/file.mp3
        metadata:
          type: object
          description: Additional metadata
          properties:
            duration:
              type: number
              format: float
              description: Duration in seconds
              example: 213.5
            bitrate:
              type: string
              description: Audio bitrate
              example: '320'
            sampleRate:
              type: string
              description: Audio sample rate
              example: '44100'
            channels:
              type: string
              description: Audio channels
              example: '2'
            codec:
              type: string
              description: Audio/video codec
              example: mp3
            fileSize:
              type: number
              description: File size in bytes
              example: 1048576
            mimeType:
              type: string
              description: MIME type
              example: audio/mpeg
            processedAt:
              type: string
              format: date-time
              description: Processing timestamp
            linkValidated:
              type: boolean
              description: For link submissions - validation status
              example: true
          additionalProperties: true
  responses:
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                example: error
              message:
                type: string
                example: Invalid request parameters
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                example: error
              message:
                type: string
                example: Unauthorized
    NotFound:
      description: Not found
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                example: error
              message:
                type: string
                example: Resource not found
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                example: error
              message:
                type: string
                example: Internal server error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        JWT Authorization header using the Bearer scheme. Format: "Bearer
        {token}"

````