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

# Start media analysis

> Starts an asynchronous analysis pipeline. Returns immediately with a `task_id`
that can be used to track progress via SocketIO.

You can run visual analysis, speech transcription, and face clustering in a single call.

For throughput, batch many files into one request instead of sending many
single-file requests. Jumper loads ML models per analysis request, so one
50-file request is much faster than 50 one-file requests on the same node.

Only one analysis task can run at a time per backend instance. A new analyze
request first asks the current task to stop. If the previous task is still
unwinding, Jumper returns `409`.




## OpenAPI

````yaml /api-reference/openapi-v1.yaml post /analyze
openapi: 3.0.3
info:
  title: Jumper Public API
  version: '1.0'
  description: >
    REST API for third-party integrations with Jumper's media analysis engine.


    Jumper analyzes video, image, and audio files — enabling semantic visual
    search,

    speech transcription, and face detection with clustering.

    This API exposes those capabilities for use by MAM systems, automation
    pipelines,

    and custom tooling.


    ## Authentication


    All endpoints except `/health` require a **Jumper Pro** license key.

    The OpenAPI contract models the supported `X-License-Key` header flow.


    Jumper also accepts a `license_key` field in many JSON POST bodies as a

    convenience, but that is a Jumper-specific request-body convention rather

    than an OpenAPI security scheme.


    Invalid or missing keys return `401`. Non-Pro keys return `403`.


    ## Key Concepts


    - **`cache_dir`** — The folder where Jumper stores analysis data (visual
    analysis, transcriptions, face clusters). You choose this path.

    - **`media_paths`** — Absolute filesystem paths to media files. Jumper needs
    direct access to these files.

    - **`hash_str`** — A CRC32-based hash that uniquely identifies a media file.
    Returned by the metadata endpoint.

    - **`model_key`** — Internal identifier for a visual or speech analysis
    model variant (e.g. `v2-medium-256`).
  contact:
    name: Jumper
    url: https://getjumper.io
servers:
  - url: http://localhost:6699/api/v1
    description: Local Jumper backend
security:
  - HeaderAuth: []
paths:
  /analyze:
    post:
      tags:
        - Analysis
      summary: Start media analysis
      description: >
        Starts an asynchronous analysis pipeline. Returns immediately with a
        `task_id`

        that can be used to track progress via SocketIO.


        You can run visual analysis, speech transcription, and face clustering
        in a single call.


        For throughput, batch many files into one request instead of sending
        many

        single-file requests. Jumper loads ML models per analysis request, so
        one

        50-file request is much faster than 50 one-file requests on the same
        node.


        Only one analysis task can run at a time per backend instance. A new
        analyze

        request first asks the current task to stop. If the previous task is
        still

        unwinding, Jumper returns `409`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - cache_dir
              properties:
                cache_dir:
                  type: string
                  description: Where to store analysis results
                detect_speakers:
                  type: boolean
                  default: true
                  description: >-
                    Set to false to skip final speaker diarization for
                    transcription jobs.
                speaker_count:
                  oneOf:
                    - type: string
                      enum:
                        - auto
                        - auto-detect
                        - 5+
                    - type: integer
                      enum:
                        - 1
                        - 2
                        - 3
                        - 4
                  default: auto
                  description: >-
                    Optional speaker-count hint for pyannote diarization. Use
                    auto for unconstrained detection, 1-4 for num_speakers, or
                    5+ for min_speakers=5 and max_speakers=12.
                preferred_qwen_model_key:
                  type: string
                  enum:
                    - auto
                    - faster
                    - more accurate
                    - qwen3-asr-0.6b
                    - qwen3-asr-1.7b
                  default: auto
                  description: >-
                    Optional Qwen ASR preference for Qwen-supported languages.
                    Use faster for the 0.6B model, more accurate for the 1.7B
                    model, or auto/default to use Jumper's default.
                visual_media_paths:
                  type: array
                  items:
                    type: string
                  description: Files to run visual analysis on
                transcription_jobs:
                  type: array
                  items:
                    type: object
                    required:
                      - path
                    properties:
                      path:
                        type: string
                      language:
                        type: string
                        default: english
                      detect_speakers:
                        type: boolean
                        default: true
                        description: Optional per-job override for speaker diarization.
                      speaker_count:
                        oneOf:
                          - type: string
                            enum:
                              - auto
                              - auto-detect
                              - 5+
                          - type: integer
                            enum:
                              - 1
                              - 2
                              - 3
                              - 4
                        default: auto
                        description: Optional per-job speaker-count hint.
                      preferred_qwen_model_key:
                        type: string
                        enum:
                          - auto
                          - faster
                          - more accurate
                          - qwen3-asr-0.6b
                          - qwen3-asr-1.7b
                        default: auto
                        description: >-
                          Optional per-job Qwen ASR preference for
                          Qwen-supported languages.
                      channels:
                        type: array
                        nullable: true
                        items:
                          type: integer
                          minimum: 1
                        default: null
                        description: >-
                          Omit, set to null, or pass an empty array to use
                          legacy downmix-to-mono extraction. Pass a non-empty
                          array to explicitly transcribe 1-based audio
                          channel/track numbers; [1] means only channel 1.
                          Multiple selected channels are analyzed separately,
                          then merged with conservative near-duplicate removal.
                  description: >-
                    Files to transcribe, with optional language and channel
                    hints
                face_clustering_jobs:
                  type: array
                  items:
                    type: object
                    required:
                      - cluster_job_name
                      - face_media_paths
                    properties:
                      cluster_job_name:
                        type: string
                        description: Name for this clustering job
                      face_media_paths:
                        type: array
                        items:
                          type: string
                        description: Paths to media files for face detection
                      face_eps:
                        type: number
                        description: Clustering sensitivity (default 0.48)
                      face_min_samples:
                        type: integer
                        description: Minimum faces to form a cluster (default 5)
                  description: Face detection and clustering job definitions
      responses:
        '202':
          description: Analysis started
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Analysis started
                  task_id:
                    type: string
                    description: Use this ID to join a SocketIO room for progress events
        '400':
          description: No valid media supplied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Another analysis task is still stopping or already active
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Models still loading
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: Error message
      required:
        - error
  securitySchemes:
    HeaderAuth:
      type: apiKey
      in: header
      name: X-License-Key
      description: Jumper Pro license key passed via header

````