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

# Get a harmony

> Returns the status of each track of a harmony, in the preset's order. A track is finished when `confirmedDone` or `failed` is `true`; once `confirmedDone` is `true` its `outputFilePlayUrl` (MP3) and `outputFileDownloadUrl` (WAV when available, MP3 otherwise) are usable signed URLs.

Tracks are separate files, not a mix. Apply each track's `pan` and `timeShift` in your own mix to reproduce the harmony maker's stereo spread. A track that has not finished about 16 minutes after creation is removed from `tracks` and its conversion time returned; once every track is gone the harmony returns `404`.



## OpenAPI

````yaml GET /harmonies/{id}
openapi: 3.1.0
info:
  title: Audimee API
  description: >-
    The Audimee API lets clients browse voice models, train custom voices, run
    AI voice conversions, and create multi-voice harmonies.
  version: 1.0.0
servers:
  - url: https://audimee.com/api/v1
security:
  - bearerAuth: []
paths:
  /harmonies/{id}:
    get:
      tags:
        - Harmonies
      summary: Get a harmony
      description: >-
        Returns the status of each track of a harmony, in the preset's order. A
        track is finished when `confirmedDone` or `failed` is `true`; once
        `confirmedDone` is `true` its `outputFilePlayUrl` (MP3) and
        `outputFileDownloadUrl` (WAV when available, MP3 otherwise) are usable
        signed URLs.


        Tracks are separate files, not a mix. Apply each track's `pan` and
        `timeShift` in your own mix to reproduce the harmony maker's stereo
        spread. A track that has not finished about 16 minutes after creation is
        removed from `tracks` and its conversion time returned; once every track
        is gone the harmony returns `404`.
      operationId: getHarmony
      parameters:
        - name: id
          in: path
          required: true
          description: Harmony UUID returned by `POST /harmonies`.
          schema:
            type: string
      responses:
        '200':
          description: Harmony details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Harmony'
              example:
                id: 0c8f6f0e-3a43-4b6e-9a8a-2d3f6b1c9e57
                createdAt: '2026-10-01T14:08:21.000Z'
                tracks:
                  - id: 457d147e-e0c4-4b92-a731-92bbc8b7ab22
                    voiceModelId: '101'
                    harmonyKey: Melody
                    octaveShift: 0
                    pan: -1
                    timeShift: 0.012
                    percentageDone: 100
                    confirmedDone: true
                    failed: false
                    outputFilePlayUrl: https://sounds.audimeestorage.com/output-1.mp3?token=...
                    outputFileDownloadUrl: https://sounds.audimeestorage.com/output-1.wav?token=...
                  - id: 9b2c7c2e-51a8-4a4f-8d0b-6f3a1e2d4c5b
                    voiceModelId: '133'
                    harmonyKey: Melody
                    octaveShift: 0
                    pan: 1
                    timeShift: 0.037
                    percentageDone: 64
                    confirmedDone: false
                    failed: false
                    outputFilePlayUrl: https://sounds.audimeestorage.com/output-2.mp3?token=...
                    outputFileDownloadUrl: https://sounds.audimeestorage.com/output-2.wav?token=...
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: >-
            No harmony with this id is visible to the authenticated client, or
            all of its tracks have been removed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error: Harmony not found
        '500':
          description: Server error fetching the harmony.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error: Server error fetching harmony
components:
  schemas:
    Harmony:
      type: object
      required:
        - id
        - createdAt
        - tracks
      properties:
        id:
          type: string
          format: uuid
          description: Harmony UUID.
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the harmony was created.
        tracks:
          type: array
          description: The harmony's tracks, in the order the preset lists them.
          items:
            $ref: '#/components/schemas/HarmonyTrack'
    ErrorResponse:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: Human-readable explanation of what went wrong.
    HarmonyTrack:
      type: object
      required:
        - id
        - voiceModelId
        - harmonyKey
        - octaveShift
        - pan
        - timeShift
        - percentageDone
        - confirmedDone
        - failed
        - outputFilePlayUrl
        - outputFileDownloadUrl
      properties:
        id:
          type: string
          format: uuid
          description: >-
            UUID of this track. It identifies the track within this harmony
            only: harmony tracks are not returned by `GET /conversions/{id}`.
        voiceModelId:
          type: string
          description: ID of the voice model singing this track, as listed in the preset.
        harmonyKey:
          $ref: '#/components/schemas/HarmonyKey'
        octaveShift:
          type: integer
          description: Octave shift of this track, as listed in the preset.
        pan:
          type: number
          minimum: -1
          maximum: 1
          description: >-
            Suggested stereo position when mixing, from `-1` (hard left) to `1`
            (hard right). Tracks that sing the same line at the same octave are
            spread across the stereo field.
        timeShift:
          type: number
          description: >-
            Suggested start delay when mixing, in seconds. A few milliseconds
            per track keeps the voices from starting sample-aligned.
        percentageDone:
          type: number
          minimum: 0
          maximum: 100
          description: Processing progress of this track, `0`–`100`.
        confirmedDone:
          type: boolean
          description: >-
            `true` once this track finishes successfully and its output URLs are
            usable.
        failed:
          type: boolean
          description: '`true` if this track failed.'
        outputFilePlayUrl:
          type: string
          description: >-
            Signed MP3 URL for streaming this track. Issued as soon as the
            harmony is created, but only resolves to playable audio once the
            track's `confirmedDone` is `true`.
        outputFileDownloadUrl:
          type: string
          description: >-
            Signed URL for downloading this track — WAV when available, MP3
            otherwise. Like `outputFilePlayUrl`, issued upfront but only
            resolves once the track's `confirmedDone` is `true`.
    HarmonyKey:
      type: string
      enum:
        - Melody
        - + Third
        - '- Third'
        - + Fourth
        - '- Fourth'
        - + Fifth
        - '- Fifth'
        - + Sixth
        - '- Sixth'
        - Root Drone
        - 3rd Drone
        - 5th Drone
      description: >-
        The line a track sings, relative to the input melody. `Melody` doubles
        the input. `+`/`-` intervals follow the melody a third, fourth, fifth or
        sixth above or below it, staying on the notes of the harmony's `key`.
        Drones hold a single note of the key — its root, third or fifth — for
        the whole take.
  responses:
    Unauthorized:
      description: Missing, malformed, or unrecognised bearer token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            missingHeader:
              summary: No Authorization header
              value:
                error: Missing or invalid Authorization header
            invalidToken:
              summary: Token not recognised
              value:
                error: Invalid authorization token
            userNotFound:
              summary: Token valid but user no longer exists
              value:
                error: User not found
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Static API key issued by Audimee, passed as `Authorization: Bearer
        {token}`.

````

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