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

# Count audio channels

> Counts each file's audio channels across all its audio tracks, numbered the way the
`channels` field of an `/analyze` transcription job expects. A file with two mono
audio tracks has channels `[1, 2]`. A file without audio has `channel_count` 0. Both
fields are null when the file doesn't exist or its audio couldn't be read. No
`cache_dir` is needed.




## OpenAPI

````yaml /api-reference/openapi-v1.yaml post /media/audio-channels
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, face detection with clustering, and hierarchical
    summaries.

    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. A non-empty JSON `license_key` takes

    precedence over the header.


    Send the raw license key on every authenticated request. Activating Jumper

    in the UI does not authenticate later API requests automatically. Pro uses

    the same entitlements in the UI and API; no separate API entitlement is
    needed.


    Missing keys return `401`. Supplied keys that cannot be validated or lack

    Pro entitlements return `403`. The `error` is `Jumper Pro license required`

    for both cases; inspect the response `message` for the validation reason.

    A valid non-Pro key can have `message: "OK"` and still return `403`.

    Enterprise policy denials also return `403`, with a `policy_error` field.


    Successful validation can be cached for 30 minutes. Health only checks

    connectivity and does not validate a license. The API is local to the

    machine running Jumper; use `localhost` or `127.0.0.1`.


    ## 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 backend-issued media identity returned by the metadata
    endpoint. Computed with xxh64 from the file size and sampled head/tail
    bytes; it is not a full-file integrity checksum.

    - **`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:
  /media/audio-channels:
    post:
      tags:
        - Media
      summary: Count audio channels
      description: >
        Counts each file's audio channels across all its audio tracks, numbered
        the way the

        `channels` field of an `/analyze` transcription job expects. A file with
        two mono

        audio tracks has channels `[1, 2]`. A file without audio has
        `channel_count` 0. Both

        fields are null when the file doesn't exist or its audio couldn't be
        read. No

        `cache_dir` is needed.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - media_paths
              properties:
                media_paths:
                  type: array
                  items:
                    type: string
                  description: Media files to inspect
      responses:
        '200':
          description: Channels keyed by each path exactly as sent
          content:
            application/json:
              schema:
                type: object
                required:
                  - audio_channels
                properties:
                  audio_channels:
                    type: object
                    description: Keyed by each path exactly as sent.
                    additionalProperties:
                      type: object
                      properties:
                        channel_count:
                          type: integer
                          nullable: true
                        channels:
                          type: array
                          nullable: true
                          items:
                            type: integer
                          description: >-
                            One-based channel numbers for the channels field of
                            /analyze transcription jobs
        '400':
          description: media_paths is missing or empty
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/AuthenticationRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          description: Failed to count audio channels
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: Error message
        message:
          type: string
          description: >-
            Additional validation detail. Authentication failures include this
            field.
      required:
        - error
    PolicyError:
      type: object
      required:
        - policy_error
      properties:
        policy_error:
          type: string
          description: Enterprise policy restriction that denied the request.
  responses:
    AuthenticationRequired:
      description: >-
        No license key was supplied in X-License-Key or the JSON license_key
        field.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Authentication required
            message: Provide license_key in request body or X-License-Key header
    Forbidden:
      description: >-
        The supplied key could not be validated, lacks Pro entitlements, or an
        Enterprise policy denied the action. Inspect message or policy_error for
        the reason.
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/Error'
              - $ref: '#/components/schemas/PolicyError'
          examples:
            invalidKey:
              summary: License key does not exist
              value:
                error: Jumper Pro license required
                message: >-
                  License invalid and activation not required: license does not
                  exist
            nonProKey:
              summary: Valid license without Pro entitlements
              value:
                error: Jumper Pro license required
                message: OK
            policyDenied:
              summary: Enterprise policy denied the action
              value:
                policy_error: >-
                  This action is not available under your organization's Jumper
                  policy
  securitySchemes:
    HeaderAuth:
      type: apiKey
      in: header
      name: X-License-Key
      description: >-
        Raw Jumper Pro license key on every authenticated request, without a
        Bearer prefix

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.