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

# Add Video to Collection

> **DEPRECATED: Use POST /collections/\{collection_id\}/media instead.**

Add a video to a collection. This endpoint is deprecated - use the /media endpoint which supports both video and audio files.



## OpenAPI

````yaml POST /collections/{collection_id}/videos
openapi: 3.0.0
info:
  title: Cloudglue API
  description: API for Cloudglue
  license:
    name: Apache License 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
  version: 0.7.13
servers:
  - url: https://api.cloudglue.dev/v1
security:
  - bearerAuth: []
paths:
  /collections/{collection_id}/videos:
    post:
      tags:
        - Collections
      summary: '[Deprecated] Add a video to a collection'
      description: >-
        **DEPRECATED: Use POST /collections/\{collection_id\}/media instead.**


        Add a video to a collection. This endpoint is deprecated - use the
        /media endpoint which supports both video and audio files.
      operationId: addVideo
      parameters:
        - name: collection_id
          in: path
          required: true
          description: The ID of the collection to add the video file to
          schema:
            type: string
      requestBody:
        description: File association parameters
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddCollectionFile'
        required: true
      responses:
        '200':
          description: Successful file addition
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CollectionFile'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Collection or file not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: An unexpected error occurred on the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      deprecated: true
components:
  schemas:
    AddCollectionFile:
      allOf:
        - type: object
          oneOf:
            - type: object
              properties:
                file_id:
                  type: string
                  description: The ID of the file to add to the collection
              required:
                - file_id
            - type: object
              properties:
                url:
                  type: string
                  description: >-
                    The URL of the video to add to the collection. Supports URIs
                    of files uploaded to Cloudglue Files endpoint, public
                    YouTube video URLs, public TikTok video URLs, public Loom
                    share URLs, public HTTP URLs, and files which have been
                    granted access to Cloudglue via data connectors.


                    Note that YouTube videos are currently limited to speech
                    level understanding only. Public TikTok video URLs will be
                    scraped and stored automatically — subject to charges. For
                    files via our Data connectors, see our documentation on data
                    connectors for setup information.
              required:
                - url
        - $ref: '#/components/schemas/FileSegmentationConfig'
        - type: object
          properties:
            thumbnails_config:
              $ref: '#/components/schemas/ThumbnailsConfig'
            metadata:
              type: object
              description: >-
                User metadata stored on the file (merged into the file's
                metadata and included in the indexed metadata doc). Only
                supported when adding to metadata collections; other collection
                types take metadata via the Files endpoints.
    CollectionFile:
      type: object
      properties:
        collection_id:
          type: string
          description: ID of the collection
        file_id:
          type: string
          description: ID of the file
        object:
          type: string
          enum:
            - collection_file
          description: Object type, always 'collection_file'
        added_at:
          type: integer
          description: >-
            Unix timestamp in milliseconds when the file was added to the
            collection
        status:
          type: string
          enum:
            - pending
            - processing
            - completed
            - failed
            - not_applicable
          description: Overall processing status of the file in this collection
        file:
          $ref: '#/components/schemas/File'
          description: The file object
        segmentation:
          type: object
          description: >-
            Segmentation information for this file in the collection. Only
            present when the file has been segmented.
          properties:
            id:
              type: string
              format: uuid
              description: Unique identifier for the segmentation
            status:
              type: string
              enum:
                - pending
                - processing
                - completed
                - failed
                - not_applicable
              description: Status of the segmentation job
            file_id:
              type: string
              format: uuid
              description: ID of the file that was segmented
            segmentation_config:
              $ref: '#/components/schemas/SegmentationConfig'
              description: Configuration used for this segmentation
          required:
            - id
            - status
            - file_id
            - segmentation_config
      required:
        - collection_id
        - file_id
        - object
        - added_at
        - status
    Error:
      required:
        - error
      type: object
      properties:
        error:
          type: string
    FileSegmentationConfig:
      type: object
      properties:
        segmentation_id:
          type: string
          format: uuid
          description: >-
            Segmentation job id to use. If not provided will use default to
            uniform 20s segmentation. Cannot be provided together with
            segmentation_config.
        segmentation_config:
          $ref: '#/components/schemas/SegmentationConfig'
          description: >-
            Configuration for video segmentation. Cannot be provided together
            with segmentation_id.
    ThumbnailsConfig:
      type: object
      required:
        - enable_segment_thumbnails
      properties:
        enable_segment_thumbnails:
          type: boolean
          description: >-
            Whether to enable segment thumbnails. If not provided will use
            default to false. Cannot be used together with segmentation_id.
    File:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the file
        status:
          type: string
          enum:
            - pending
            - processing
            - completed
            - failed
            - not_applicable
          description: Processing status of the file
        bytes:
          type: integer
          nullable: true
          description: Size of the file in bytes, null if not available
        created_at:
          type: integer
          description: Unix timestamp in milliseconds when the file was created
        filename:
          type: string
          description: Original filename
        uri:
          type: string
          description: Cloudglue URI for the file, to be used in other API calls
        metadata:
          type: object
          nullable: true
          description: User-provided metadata about the file, null if none provided
        media_type:
          type: string
          enum:
            - video
            - audio
            - image
          description: >-
            Type of media file (video, audio, or image). Images are processed at
            the file level only (no segmentation).
        media_info:
          type: object
          properties:
            duration_seconds:
              type: number
              nullable: true
              description: Duration in seconds
            width:
              type: integer
              nullable: true
              description: Width in pixels (null for audio files)
            height:
              type: integer
              nullable: true
              description: Height in pixels (null for audio files)
            sample_rate:
              type: integer
              nullable: true
              description: Audio sample rate in Hz
            channels:
              type: integer
              nullable: true
              description: Number of audio channels
            bitrate:
              type: integer
              nullable: true
              description: Audio bitrate in bps
            format:
              type: string
              nullable: true
              description: File format
            has_audio:
              type: boolean
              nullable: true
              description: Whether the file has audio
          description: Unified media information for video, audio, and image files
        video_info:
          type: object
          properties:
            duration_seconds:
              type: number
              nullable: true
              description: Duration of the video in seconds, null if not available
            height:
              type: integer
              nullable: true
              description: Height of the video in pixels, null if not available
            width:
              type: integer
              nullable: true
              description: Width of the video in pixels, null if not available
            format:
              type: string
              nullable: true
              description: Format of the video file, null if not available
            has_audio:
              type: boolean
              nullable: true
              description: Whether the video has audio, null if not available
          description: Information about the video content
        thumbnail_url:
          type: string
          description: URL of the thumbnail for the file
        source:
          type: string
          enum:
            - video
            - youtube
            - s3
            - dropbox
            - http
            - upload
            - google-drive
            - zoom
            - gong
            - recall
            - gcs
            - grain
            - loom
            - iconik
          description: Source of the file
        source_metadata:
          allOf:
            - $ref: '#/components/schemas/SourceMetadata'
          nullable: true
          description: >-
            Source provenance captured from the upstream connector at ingest
            time. Null when nothing was captured (older files, or a connector
            that does not yet populate it).
      required:
        - id
        - uri
        - status
    SegmentationConfig:
      type: object
      description: >-
        Configuration for video segmentation. **Choose a strategy and provide
        ONLY the corresponding config:**


        • **uniform**: Provide `uniform_config`, do NOT provide other configs

        • **shot-detector**: Provide `shot_detector_config`, do NOT provide
        other configs

        • **manual**: Provide `manual_config`, do NOT provide other configs

        • **narrative**: Provide `narrative_config`, do NOT provide other
        configs


        Optionally specify `start_time_seconds` and `end_time_seconds` to limit
        segmentation to a portion of the video.
      required:
        - strategy
      properties:
        strategy:
          type: string
          enum:
            - uniform
            - shot-detector
            - manual
            - narrative
          description: Segmentation strategy - determines which config you must provide
        uniform_config:
          $ref: '#/components/schemas/SegmentationUniformConfig'
          description: >-
            🎯 **REQUIRED when strategy = 'uniform'** - Configuration for
            uniform segmentation.
        shot_detector_config:
          $ref: '#/components/schemas/SegmentationShotDetectorConfig'
          description: >-
            🎯 **REQUIRED when strategy = 'shot-detector'** - Configuration for
            shot detection segmentation.
        manual_config:
          $ref: '#/components/schemas/SegmentationManualConfig'
          description: >-
            🎯 **REQUIRED when strategy = 'manual'** - Configuration for manual
            segmentation.
        narrative_config:
          $ref: '#/components/schemas/NarrativeConfig'
          description: >-
            🎯 **REQUIRED when strategy = 'narrative'** - Configuration for
            narrative-based chapter segmentation using AI analysis.
        keyframe_config:
          $ref: '#/components/schemas/KeyframeConfig'
          description: >-
            When provided, will be used to extract keyframes for the
            segmentation.
        start_time_seconds:
          type: number
          minimum: 0
          description: >-
            Optional: The start time of the video in seconds to start segmenting
            from
        end_time_seconds:
          type: number
          minimum: 0
          description: 'Optional: The end time of the video in seconds to stop segmenting at'
    SourceMetadata:
      oneOf:
        - $ref: '#/components/schemas/GrainSourceMetadata'
        - $ref: '#/components/schemas/ZoomSourceMetadata'
        - $ref: '#/components/schemas/RecallSourceMetadata'
        - $ref: '#/components/schemas/GoogleDriveSourceMetadata'
        - $ref: '#/components/schemas/DropboxSourceMetadata'
        - $ref: '#/components/schemas/GongSourceMetadata'
        - $ref: '#/components/schemas/IconikSourceMetadata'
      discriminator:
        propertyName: source_type
        mapping:
          grain:
            $ref: '#/components/schemas/GrainSourceMetadata'
          zoom:
            $ref: '#/components/schemas/ZoomSourceMetadata'
          recall:
            $ref: '#/components/schemas/RecallSourceMetadata'
          google-drive:
            $ref: '#/components/schemas/GoogleDriveSourceMetadata'
          dropbox:
            $ref: '#/components/schemas/DropboxSourceMetadata'
          gong:
            $ref: '#/components/schemas/GongSourceMetadata'
          iconik:
            $ref: '#/components/schemas/IconikSourceMetadata'
      description: >-
        Per-source provenance captured from the upstream connector,
        discriminated by source_type. Populated for Grain, Zoom, Recall, Google
        Drive, Dropbox, Gong, and iconik; files synced before a connector was
        upgraded carry null. S3/GCS files carry null (plain object stores have
        no richer metadata).
    SegmentationUniformConfig:
      type: object
      required:
        - window_seconds
      properties:
        window_seconds:
          type: number
          minimum: 1
          maximum: 120
          description: >-
            The duration of each segment in seconds. Must be between 1 and 120
            seconds.
        hop_seconds:
          type: number
          minimum: 1
          maximum: 120
          description: >-
            The offset between the start of new windows. This means there can be
            overlap between segments. If not provided, defaults to
            window_seconds. Must be between 1 and 120 seconds.
    SegmentationShotDetectorConfig:
      type: object
      required:
        - detector
      properties:
        threshold:
          type: number
          nullable: true
          description: >-
            Detection sensitivity threshold - lower values create more segments:


            • **content**: Sensitivity to visual differences (default: 27.0).
            Lower values detect smaller changes in color/lighting.

            • **adaptive**: Does not support threshold parameter - uses internal
            adaptive algorithm.
        min_seconds:
          type: number
          minimum: 0.6
          maximum: 600
          nullable: true
          description: The minimum length of a shot in seconds. Defaults to 0.6.
        max_seconds:
          type: number
          minimum: 1
          maximum: 600
          nullable: true
          description: The maximum length of a shot in seconds. Defaults to 300.
        detector:
          type: string
          enum:
            - adaptive
            - content
          description: >-
            The detector strategy to use:


            • **adaptive**: Designed for dynamic footage with camera movement,
            panning, or action. Examples: sports broadcasts, drone footage,
            handheld documentaries, action movies, live events.

            • **content**: Optimized for controlled footage with clear visual
            transitions. Examples: studio interviews, corporate videos,
            educational content, product demos, scripted content.
        fill_gaps:
          type: boolean
          description: >-
            When true, gaps between detected shots are filled: gaps greater than
            or equal to min_seconds become their own segments (split by
            max_seconds if needed), and shorter gaps are merged into the nearest
            adjacent segment. Defaults to true.
    SegmentationManualConfig:
      type: object
      required:
        - segments
      properties:
        segments:
          type: array
          items:
            type: object
            properties:
              start_time:
                type: number
                description: The start time of the segment in seconds
              end_time:
                type: number
                description: The end time of the segment in seconds
          description: Array of segments
    NarrativeConfig:
      type: object
      properties:
        prompt:
          type: string
          description: >-
            Optional custom prompt to guide the narrative segmentation analysis.
            This will be incorporated into the main segmentation prompt as
            additional guidance.
        strategy:
          type: string
          enum:
            - comprehensive
            - balanced
            - transcript
          description: >-
            Narrative segmentation strategy:


            • **comprehensive**: Uses a VLM to deeply analyze logical segments
            of video. Only available for video files (not YouTube or audio).


            • **balanced** (default): Balanced analysis approach using multiple
            modalities. Supports YouTube URLs and audio files.


            • **transcript**: Cheap and fast speech-transcript-based
            segmentation. Requires a transcript; returns an error for silent or
            visual-only content (use `balanced` instead, or `comprehensive` for
            non-YouTube/non-audio video files).


            **Note**: YouTube URLs and audio files only support the **balanced**
            and **transcript** strategies; **comprehensive** will be rejected
            with an error.
        number_of_chapters:
          type: integer
          minimum: 1
          description: >-
            Optional target number of chapters to generate. If provided,
            min_chapters and max_chapters will be calculated automatically if
            not specified. If only target is provided, the AI will attempt to
            generate exactly this number of chapters.
        min_chapters:
          type: integer
          minimum: 1
          description: >-
            Optional minimum number of chapters to generate. If provided along
            with number_of_chapters and max_chapters, validates that min <=
            number_of_chapters <= max. If only number_of_chapters is provided,
            min and max are calculated automatically.
        max_chapters:
          type: integer
          minimum: 1
          description: >-
            Optional maximum number of chapters to generate. If provided along
            with number_of_chapters and min_chapters, validates that min <=
            number_of_chapters <= max. If only number_of_chapters is provided,
            min and max are calculated automatically.
    KeyframeConfig:
      type: object
      required:
        - frames_per_segment
      description: >-
        Configuration for keyframe extraction. When provided, will be used to
        extract keyframes for the segmentation. This is not supported for
        YouTube videos.
      properties:
        frames_per_segment:
          type: number
          minimum: 0
          maximum: 8
          description: The number of key frames to extract per segment
        max_width:
          type: number
          minimum: 144
          maximum: 4320
          description: The maximum width of the key frames in pixels
    GrainSourceMetadata:
      type: object
      description: >-
        Source provenance captured from Grain at ingest time. The richer
        AI/contextual fields are only present when Grain returns them.
      properties:
        source_type:
          type: string
          enum:
            - grain
          description: Discriminator identifying the upstream connector.
        grain_recording_id:
          type: string
          description: Grain's recording id.
        title:
          type: string
          description: Recording title.
          nullable: true
        start_datetime:
          type: string
          format: date-time
          description: UTC time Grain started the recording.
          nullable: true
        end_datetime:
          type: string
          format: date-time
          description: UTC time the recording ended.
          nullable: true
        duration_ms:
          type: integer
          description: Recording duration in milliseconds.
          nullable: true
        media_type:
          type: string
          enum:
            - audio
            - transcript
            - video
          description: Grain media type of the recording.
          nullable: true
        upstream_source:
          type: string
          enum:
            - aircall
            - local_capture
            - meet
            - teams
            - upload
            - webex
            - zoom
            - other
          description: Platform Grain captured the recording from.
          nullable: true
        grain_url:
          type: string
          description: URL to the recording in Grain.
          nullable: true
        thumbnail_url:
          type: string
          nullable: true
          description: Thumbnail URL, null if none.
        tags:
          type: array
          items:
            type: string
          description: Tags applied to the recording.
          nullable: true
        teams:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
          description: Teams the recording belongs to.
          nullable: true
        meeting_type:
          type: object
          nullable: true
          properties:
            id:
              type: string
            name:
              type: string
            scope:
              type: string
          description: Recording's meeting type, null if none.
        participants:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
              email:
                type: string
                nullable: true
              scope:
                type: string
                enum:
                  - internal
                  - external
                  - unknown
              confirmed_attendee:
                type: boolean
              hs_contact_id:
                type: string
                nullable: true
                description: HubSpot contact id, if linked.
          nullable: true
          description: >-
            Meeting participants (include-gated by Grain). Null when requested
            but empty.
        highlights:
          type: array
          items:
            type: object
          nullable: true
          description: Clips / highlights (include-gated). Null when requested but empty.
        ai_summary:
          type: object
          properties:
            text:
              type: string
              description: Markdown AI summary.
          nullable: true
          description: AI summary (include-gated). Null when requested but empty.
        ai_action_items:
          type: array
          items:
            type: object
            properties:
              status:
                type: string
                enum:
                  - pending
                  - completed
              timestamp_ms:
                type: integer
                description: Time in the recording the item was mentioned.
              text:
                type: string
              assignee:
                type: object
                nullable: true
                properties:
                  id:
                    type: string
                  name:
                    type: string
                  user_id:
                    type: string
                    nullable: true
          nullable: true
          description: AI action items (include-gated). Null when requested but empty.
        ai_template_sections:
          type: array
          items:
            type: object
          nullable: true
          description: >-
            AI template sections, shape varies by template (include-gated). Null
            when requested but empty.
        calendar_event:
          type: object
          nullable: true
          properties:
            ical_uid:
              type: string
          description: Related calendar event (include-gated).
        hubspot:
          type: object
          properties:
            hubspot_company_ids:
              type: array
              items:
                type: string
            hubspot_deal_ids:
              type: array
              items:
                type: string
          nullable: true
          description: >-
            Related HubSpot company/deal ids (include-gated). Null when
            requested but empty.
      required:
        - source_type
        - grain_recording_id
    ZoomSourceMetadata:
      type: object
      description: >-
        Source provenance captured from Zoom at ingest time. Signed
        download/play URLs, share URLs, and passcodes are never included.
      properties:
        source_type:
          type: string
          enum:
            - zoom
          description: Discriminator identifying the upstream connector.
        zoom_meeting_uuid:
          type: string
          description: Zoom meeting instance UUID.
        zoom_meeting_id:
          type: integer
          description: Zoom numeric meeting id.
          nullable: true
        topic:
          type: string
          description: Meeting topic (empty string when Zoom omits it).
          nullable: true
        start_time:
          type: string
          format: date-time
          description: UTC time the meeting started.
          nullable: true
        host_id:
          type: string
          nullable: true
          description: Zoom host user id.
        host_email:
          type: string
          nullable: true
          description: >-
            Host email. Nullable whenever Zoom omits it — both list and
            per-meeting endpoints may return null depending on account scopes.
        account_id:
          type: string
          nullable: true
          description: Zoom account id.
        timezone:
          type: string
          nullable: true
          description: Meeting timezone.
        duration_minutes:
          type: number
          nullable: true
          description: Meeting duration in minutes (as reported by Zoom).
        total_size:
          type: number
          nullable: true
          description: Total size of all recording files in bytes.
        recording_count:
          type: number
          nullable: true
          description: Number of recording files for the meeting.
        meeting_type:
          type: number
          nullable: true
          description: Zoom's numeric meeting type.
        recording_files:
          type: array
          nullable: true
          items:
            type: object
            properties:
              id:
                type: string
                nullable: true
              recording_type:
                type: string
                nullable: true
                description: e.g. shared_screen_with_speaker_view, audio_only.
              file_type:
                type: string
                nullable: true
              file_extension:
                type: string
                nullable: true
              file_size:
                type: number
                nullable: true
                description: File size in bytes.
              recording_start:
                type: string
                nullable: true
              recording_end:
                type: string
                nullable: true
              status:
                type: string
                nullable: true
          description: >-
            Structural facts about each recording file. Download/play URLs are
            excluded.
      required:
        - source_type
        - zoom_meeting_uuid
    RecallSourceMetadata:
      type: object
      description: >-
        Source provenance captured from Recall at ingest time. Artifact
        availability is exposed as booleans — signed artifact download URLs are
        never included.
      properties:
        source_type:
          type: string
          enum:
            - recall
          description: Discriminator identifying the upstream connector.
        recall_recording_id:
          type: string
          description: Recall recording id.
        created_at:
          type: string
          nullable: true
          description: UTC time the recording object was created.
        started_at:
          type: string
          nullable: true
          description: UTC time recording started.
        completed_at:
          type: string
          nullable: true
          description: UTC time recording completed.
        expires_at:
          type: string
          nullable: true
          description: UTC time the recording expires upstream at Recall.
        status_code:
          type: string
          nullable: true
          description: >-
            Recall status: done, processing, failed, or paused. Only done
            recordings can be synced.
        meeting_title:
          type: string
          nullable: true
          description: Meeting title, when Recall's meeting metadata carries one.
        meeting_platform:
          type: string
          nullable: true
          description: Meeting platform (e.g. zoom, google_meet), when available.
        has_transcript:
          type: boolean
          description: Whether a transcript artifact exists.
          nullable: true
        has_audio:
          type: boolean
          description: Whether a separate audio artifact exists.
          nullable: true
        has_participant_events:
          type: boolean
          nullable: true
          description: Whether a participant-events artifact exists.
        bot_id:
          type: string
          nullable: true
          description: Id of the bot that captured the recording.
        recall_metadata:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Arbitrary caller-supplied metadata attached to the bot/recording in
            Recall.
      required:
        - source_type
        - recall_recording_id
    GoogleDriveSourceMetadata:
      type: object
      description: >-
        Source provenance captured from Google Drive at ingest time. Short-lived
        signed URLs (e.g. thumbnailLink) are never included.
      properties:
        source_type:
          type: string
          enum:
            - google-drive
          description: Discriminator identifying the upstream connector.
        gdrive_file_id:
          type: string
          description: Drive file id.
        name:
          type: string
          description: File name.
          nullable: true
        mime_type:
          type: string
          nullable: true
        size_bytes:
          type: number
          nullable: true
        created_time:
          type: string
          nullable: true
          description: UTC time the file was created in Drive.
        modified_time:
          type: string
          nullable: true
          description: UTC time the file was last modified.
        web_view_link:
          type: string
          nullable: true
          description: Link to view the file in Drive (requires Drive access).
        owners:
          type: array
          nullable: true
          items:
            type: object
            properties:
              display_name:
                type: string
                nullable: true
              email_address:
                type: string
                nullable: true
          description: File owners.
        last_modifying_user:
          type: object
          nullable: true
          properties:
            display_name:
              type: string
              nullable: true
            email_address:
              type: string
              nullable: true
          description: User who last modified the file.
        parents:
          type: array
          nullable: true
          items:
            type: string
          description: Parent folder ids.
        shared:
          type: boolean
          nullable: true
          description: Whether the file is shared.
        file_extension:
          type: string
          nullable: true
        md5_checksum:
          type: string
          nullable: true
        video_media_metadata:
          type: object
          nullable: true
          properties:
            duration_millis:
              type: number
              nullable: true
              description: Video duration in milliseconds.
            width:
              type: number
              nullable: true
            height:
              type: number
              nullable: true
          description: Drive's video metadata, when Drive has processed the file.
      required:
        - source_type
        - gdrive_file_id
    DropboxSourceMetadata:
      type: object
      description: Source provenance captured from Dropbox at ingest time.
      properties:
        source_type:
          type: string
          enum:
            - dropbox
          description: Discriminator identifying the upstream connector.
        dropbox_id:
          type: string
          description: Dropbox file id (id:… form).
        name:
          type: string
          description: File name.
          nullable: true
        path_lower:
          type: string
          description: Lowercased path of the file.
          nullable: true
        path_display:
          type: string
          nullable: true
          description: Display-cased path.
        size_bytes:
          type: number
          nullable: true
        client_modified:
          type: string
          nullable: true
          description: Modification time reported by the client that uploaded the file.
        server_modified:
          type: string
          nullable: true
          description: Time the file was last modified on Dropbox.
        rev:
          type: string
          nullable: true
          description: Dropbox revision id.
        content_hash:
          type: string
          nullable: true
          description: Dropbox content hash.
        is_downloadable:
          type: boolean
          nullable: true
        media_info:
          type: object
          nullable: true
          properties:
            duration_ms:
              type: number
              nullable: true
              description: Media duration in milliseconds.
            width:
              type: number
              nullable: true
            height:
              type: number
              nullable: true
          description: >-
            Media dimensions/duration. Only populated at sync/lookup time —
            Dropbox's list endpoint stopped returning media info in 2019, so
            items in the list endpoint carry null here.
      required:
        - source_type
        - dropbox_id
    GongSourceMetadata:
      type: object
      description: >-
        Source provenance captured from Gong at ingest time. Signed media URLs
        are never included. AI content fields (topics, trackers, brief,
        key_points) require Gong Call Spotlight entitlement and are only
        captured at sync/lookup time.
      properties:
        source_type:
          type: string
          enum:
            - gong
          description: Discriminator identifying the upstream connector.
        gong_call_id:
          type: string
          description: Gong call id.
        title:
          type: string
          description: Call title (empty string when Gong omits it).
          nullable: true
        started:
          type: string
          nullable: true
          description: UTC time the call started.
        scheduled:
          type: string
          nullable: true
          description: UTC time the call was scheduled for.
        duration:
          type: number
          nullable: true
          description: Call duration in seconds.
        gong_url:
          type: string
          nullable: true
          description: URL to the call in Gong.
        meeting_url:
          type: string
          nullable: true
          description: URL of the underlying meeting.
        is_private:
          type: boolean
          nullable: true
          description: >-
            Whether the call is private in Gong. Private calls cannot be listed
            or synced.
        purpose:
          type: string
          nullable: true
        primary_user_id:
          type: string
          nullable: true
          description: Gong user id of the call owner.
        direction:
          type: string
          nullable: true
          description: Inbound, Outbound, Conference, or Unknown.
        system:
          type: string
          nullable: true
          description: Telephony/meeting system the call was held on.
        scope:
          type: string
          nullable: true
          description: Internal, External, or Unknown.
        language:
          type: string
          nullable: true
          description: ISO-639-2B language code Gong detected.
        workspace_id:
          type: string
          nullable: true
          description: Gong workspace id.
        call_media_type:
          type: string
          nullable: true
          description: 'Gong''s media indicator: Video or Audio.'
        parties:
          type: array
          nullable: true
          items:
            type: object
            properties:
              id:
                type: string
                nullable: true
              name:
                type: string
                nullable: true
              email:
                type: string
                nullable: true
              affiliation:
                type: string
                nullable: true
                description: Internal, External, or Unknown.
              speaker_id:
                type: string
                nullable: true
              user_id:
                type: string
                nullable: true
          description: Call participants.
        topics:
          type: array
          nullable: true
          items:
            type: object
            properties:
              name:
                type: string
                nullable: true
              duration:
                type: number
                nullable: true
                description: Seconds spent on the topic.
          description: AI topics (Call Spotlight).
        trackers:
          type: array
          nullable: true
          items:
            type: object
            properties:
              name:
                type: string
                nullable: true
              count:
                type: number
                nullable: true
          description: Tracker keyword hit counts (Call Spotlight).
        brief:
          type: string
          nullable: true
          description: AI call brief (Call Spotlight).
        key_points:
          type: array
          nullable: true
          items:
            type: string
          description: AI key points (Call Spotlight).
      required:
        - source_type
        - gong_call_id
    IconikSourceMetadata:
      type: object
      description: >-
        Source provenance captured from iconik at ingest time. Signed download
        URLs are never included.
      properties:
        source_type:
          type: string
          enum:
            - iconik
          description: Discriminator identifying the upstream connector.
        iconik_asset_id:
          type: string
          description: iconik asset id.
        title:
          type: string
          nullable: true
          description: Asset title.
        media_type:
          type: string
          nullable: true
          description: iconik media type of the asset (e.g. video, audio).
        date_created:
          type: string
          nullable: true
          description: UTC time the asset was created in iconik.
        date_modified:
          type: string
          nullable: true
          description: UTC time the asset was last modified in iconik.
        duration_ms:
          type: number
          nullable: true
          description: Asset duration in milliseconds, when iconik reports one.
        ingested_rendition:
          type: string
          enum:
            - proxy
            - original
          nullable: true
          description: >-
            Which rendition Cloudglue downloaded: the web proxy (preferred) or
            the ORIGINAL file.
        iconik_url:
          type: string
          nullable: true
          description: Deep link to the asset page in iconik.
        external_id:
          type: string
          nullable: true
          description: External reference id set on the asset in iconik.
        created_by_user:
          type: string
          nullable: true
          description: iconik user id that created the asset.
        iconik_metadata:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Custom metadata-view field values from iconik (customer-defined
            schemas, e.g. a screening view's UGC Title / Keywords / Categories),
            captured verbatim keyed by field name. Indexed into
            metadata-collection search documents and filterable via
            source_metadata.iconik_metadata.<FieldName> paths.
      required:
        - source_type
        - iconik_asset_id
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````