---
title: "Get Audio Details"
method: GET
path: "/v2/audios/{audio_id}"
tags: ["Audio Emotion API"]
---

# Get Audio Details

`GET /v2/audios/{audio_id}`

## Request

- Base URL: `https://api.imentiv.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.imentiv.ai/v2/audios/{audio_id}`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer
  - OAuth 2
    - Authorization code: `https://api.imentiv.ai/oauth/authorize`
    - Token URL: `https://api.imentiv.ai/oauth/token` scopes: `media.read`

Retrieve all details for a specific audio directly from the database.

Returns a complete standardized response with all possible fields.
Fields that don't exist in the database are returned as null.

**Access Control:**
- Authenticated users can access their own audios
- Admins can access all audios
- Sample audios and shared audios are publicly accessible

## Path parameters

- `audio_id` string, required: The unique ID of the audio.

## Response `200`

Successful Response

- AudioDetailResponseV2: Complete V2 response model for audio details with all possible fields. Returns null for fields that don't exist in the database, except diarization/text_emotion/transcription, which default to true when absent (enabled-by-default speech stages, matching the upload contract), and audio_type / llm_audio_policy, which always surface as strings (generic / off when absent). Fields are ordered alphabetically.
  - `languages` string[]: Detected languages in stored dominant-first order; empty when unavailable. Short stretches may have line language marks without appearing in this list. This is an output summary, independent of the expected_languages input hint.
  - `audio_duration` number, nullable: Audio duration in seconds
  - `audio_model_id` string, nullable: Model used for audio processing
  - `audio_type` string: Declared recording type (not a file format): generic or contact_center_call. Absent on old documents is generic. Always a string; never null.
  - `auto_translation` AutoTranslation: The automatic main-language translation of a mixed-language audio, as the last completed run left it.
    - `language` string, required: The audio's main language the lines were to be translated into.
    - `status` 'requested' | 'skipped', required: `requested` or `skipped`.
    - `reason` 'insufficient_credits' | 'unavailable', nullable: Why a `skipped` one was skipped. Present only for the owner, and only when `status` is `skipped`.
  - `average_audio_emotions` object, nullable: Average audio emotions
  - `bulk_upload_id` string, nullable: Bulk upload batch ID
  - `channel` object, nullable: Worker-written per-speaker channel assignment (A1). Null until written. Visible to share-link readers of GET /v2/audios/{audio_id}, same as other analysis outputs on this model.
  - `created_at` string, nullable: Creation timestamp
  - `updated_at` string, nullable: ISO-8601 UTC timestamp of the last change to this audio. Compare it for inequality with the value you hold to tell whether your copy is stale; it carries no ordering guarantee. It covers this audio's own fields only, not data derived from other records such as frames or analytics.
  - `csv_analysis_url` string, nullable: CSV analysis file URL
  - `description` string, nullable: Audio description
  - `emotions` object, nullable: Overall audio emotions
  - `expected_languages` string[]: The languages you said the audio may contain, as sent on upload or reprocess (Whisper codes, main language included). This is the INPUT you gave, not the languages detected in the speech. `[]` when none was given.
  - `id` string, nullable: Unique audio identifier
  - `interpretation` AudioInterpretation: Derived contact-centre interpretation (interp_v1). Computed on read; never stored.
    - `version` 'interp_v1': Interpretation schema version.
    - `speakers` object: Per-speaker register, reliability, and C1 summary. Keys are string speaker ids.
    - `segments` InterpretationSegment[]: Index-aligned with segment_emotions[] (CSV Index = i+1). Not transcript-sentence index.
      - `relative` object, nullable: emotions minus this speaker's register, per emotion2vec label, values in [-1, 1]. A difference, not a distribution — do not feed it to computeEmotionVectors. Null when that speaker's register is null.
      - `moment` boolean: True when the max placeable non-neutral relative is >= 0.25. Sink rows are never moments.
      - `moment_label` string, nullable: The placeable non-neutral label that cleared the moment floor, else null.
      - `tone_label` 'animated' | 'pleased' | 'flat', nullable: Agent-only, request-time role. animated = bright voice + non-positive text valence; pleased = bright + positive text valence; flat = not bright. Null for non-agent, unset role, and unreadable (unknown: 1.0) sink rows. A role edit flips this on the next GET.
      - `stance` string, nullable: Process-time C1 label from stance.segments['<idx>'].label. Null when C1 is missing or the stance map length does not match segment_emotions (e.g. after a speaker delete before C2 restamp). A role edit does not flip this.
  - `language` string, nullable: The audio's language as a BCP-47 tag made of a language, an optional script and an optional region (for example `en` or `pt-BR`), or null when none is recorded.
  - `language_source` 'user' | 'detected' | 'unknown': Where `language` came from: `user` when the upload sent one, `detected` when speech recognition filled it in, `unknown` otherwise (including when `language` is null). Always a string; never null.
  - `llm_audio_policy` string: Backend-stamped audio-LLM policy (off, transcript_only, allowed). Not client-writable. Absent is off. Always a string; never null.
  - `media_source` string, nullable: Source type: youtube, dropbox, public_url, file_upload
  - `media_source_url` string, nullable: The URL the media was submitted with. For an upload this is a reference to the stored media, not guaranteed to be readable; use the media's `playback-url` endpoint to play it back.
  - `multilingual` boolean: Whether mixed-language transcription was requested for this audio. This is the INPUT you gave, not a detection result. `false` when it was not requested. When on, the lines that are not in the audio's main language are also translated into it once the audio completes (see `auto_translation`), billed as a translation on top of transcription.
  - `parent_id` string, nullable: Parent video ID if extracted from video
  - `predefined_qa` object[], nullable: Predefined Q&A analysis
  - `process_status` union: Processing progress
    - number
    - object
  - `project_id` string, nullable: Associated project ID. Empty/absent for library audio.
  - `project_type` string, nullable: Type of the associated project (sales_deal/...). Null for library audio.
  - `psychologist_review` string, nullable: Psychologist review content
  - `psychologist_review_status` string, nullable: Psychologist review status
  - `segment_audio_emotions` object[], nullable: Segment-level audio emotions
  - `segment_text_emotions` object[], nullable: Segment-level text emotions
  - `share_status` boolean, nullable: Whether audio is shared
  - `diarization` boolean, nullable: Whether diarization is enabled (defaults to true if absent from the stored document)
  - `has_transcript` boolean, nullable: Whether a transcript exists (or is being produced): our ASR ran, OR one was supplied and applied. Drive the transcript UI off THIS, not `transcription` — an imported call has transcription=false and a real transcript, so that flag hides one that is right there.
  - `text_speaker_id_overall_emotions` object[], nullable: Speaker-level aggregated emotions
  - `speakers` object[], nullable: Identified speakers
  - `speech_status` union: Speech transcription status
    - string
    - boolean
  - `stance` object, nullable: Worker-written stance measurement (C1). Null until written, and null when audio_type is not contact_center_call. Share-link readers of GET /v2/audios/{audio_id} see it when present — same visibility as the other analysis outputs on this anonymously-readable endpoint.
  - `status` string, nullable: Processing status
  - `summary` union: Audio summary or summary object
    - string
    - object
  - `system_name` string, nullable: System name that processed the audio
  - `tags` union[], nullable: Generalized media tags (demographic, survey, label, system). Discriminated union over value_type — see /v2/tag-keys for dimension metadata.
    - union
      - StringTag
        - `id` string, required
        - `key` string, required
        - `source` string, required
        - `created_at` string, date-time, required
        - `created_by` string, nullable
        - `value_type` 'string', required
        - `value_text` string, required
      - EnumTag
        - `id` string, required
        - `key` string, required
        - `source` string, required
        - `created_at` string, date-time, required
        - `created_by` string, nullable
        - `value_type` 'enum', required
        - `value_text` string, required
      - IntegerTag
        - `id` string, required
        - `key` string, required
        - `source` string, required
        - `created_at` string, date-time, required
        - `created_by` string, nullable
        - `value_type` 'integer', required
        - `value_int` integer, required
      - BoolTag
        - `id` string, required
        - `key` string, required
        - `source` string, required
        - `created_at` string, date-time, required
        - `created_by` string, nullable
        - `value_type` 'boolean', required
        - `value_bool` boolean, required
      - DateTag
        - `id` string, required
        - `key` string, required
        - `source` string, required
        - `created_at` string, date-time, required
        - `created_by` string, nullable
        - `value_type` 'date', required
        - `value_date` string, date-time, required
      - GeoTag
        - `id` string, required
        - `key` string, required
        - `source` string, required
        - `created_at` string, date-time, required
        - `created_by` string, nullable
        - `value_type` 'location_admin', required
        - `value_geo` GeoValue, required: Administrative-level location. lat/lng intentionally omitted in v1.
          - `country` string, nullable
          - `state` string, nullable
          - `city` string, nullable
      - SetTag
        - `id` string, required
        - `key` string, required
        - `source` string, required
        - `created_at` string, date-time, required
        - `created_by` string, nullable
        - `value_type` 'set', required
        - `value_text` string, required
      - NoneTag
        - `id` string, required
        - `key` string, required
        - `source` string, required
        - `created_at` string, date-time, required
        - `created_by` string, nullable
        - `value_type` 'none', required
  - `tags_map` object, nullable: Tags map for categorization
  - `text_emotion` boolean, nullable: Whether text emotion analysis was enabled at upload time (defaults to true if absent from the stored document)
  - `text_overall_emotions` object, nullable: Overall text emotions from transcript
  - `text_id` string, nullable: Associated text analysis ID
  - `text_model_id` string, nullable: Model used for text processing
  - `title` string, nullable: Audio title
  - `transcript_segments` object[], nullable: Transcript segments with emotions
  - `transcription` boolean, nullable: Whether transcription/ASR was enabled at upload time (defaults to true if absent from the stored document)
  - `ui_request` boolean, nullable: Whether request came from UI
  - `url` string, nullable: Stored audio URL. A reference to the stored media, not guaranteed to be readable: use `GET /v2/audios/{audio_id}/playback-url` to play it back.
  - `user_id` string, nullable: The user who created the item (the same value as `created_by`).
  - `created_by` string, nullable: The user who created the item. Never changes, including when the item is moved to a workspace.
  - `owner` MediaOwnerOut: Who owns a media item. Never carries an email address.
    - `kind` 'user' | 'workspace', required: `user`: an item owned by one person, its creator. `workspace`: an item owned by a team workspace, which its members can read. This says who owns the item only; a share link or other access to it is separate.
    - `id` string, required: The owner's id: the user's id, or the workspace's id.
    - `name` string, nullable: The workspace's name, or the creator's display name. Absent when it is not known.
  - `video_id` string, nullable: Associated video ID if extracted from video
  - `text_word_count` integer, nullable: Word count of transcript
  - `youtube_url` string, nullable: YouTube URL if applicable

## Other responses

- `401`: Missing, malformed or rejected credentials — no `X-API-Key` / `Authorization: Bearer <jwt>`, an expired token, or a caller that lacks the role the route requires. Note that this API answers *authorization* failures with 401 as well as 403 (see the 403 entry where a route declares both).
- `404`: No such resource, or it is not visible to this caller. Ownership failures are reported as 404 rather than 403 so the API does not confirm the existence of another account's records.
- `422`: Validation Error

## Changes

- **2026-10-31** `bd825cd86e8c`: 5 info
  - added the optional property `auto_translation` to the response with the `200` status
  - added the optional property `expected_languages` to the response with the `200` status
  - added the optional property `languages` to the response with the `200` status
  - added the optional property `multilingual` to the response with the `200` status
  - …1 more
- **2026-10-07** `45bdd041d683`: 4 info
  - added the optional property `created_by` to the response with the `200` status
  - added the optional property `language` to the response with the `200` status
  - added the optional property `language_source` to the response with the `200` status
  - added the optional property `owner` to the response with the `200` status
- **2026-09-22** `536bf48bb9fb`: 3 info
  - the endpoint scheme security `ApiKeyAuth` was added to the API
  - the endpoint scheme security `BearerAuth` was added to the API
  - the endpoint scheme security `OAuth2Delegated` was added to the API
- **2026-09-08** `b10651168511`: 6 info
  - added the optional property `audio_type` to the response with the `200` status
  - added the optional property `channel` to the response with the `200` status
  - added the optional property `interpretation` to the response with the `200` status
  - added the optional property `llm_audio_policy` to the response with the `200` status
  - …2 more
- **2026-08-20** `74ceee4a5c98`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/imentiv/apis/welcome-to-imentiv-ai/changes/v2/audios/:audio_id/get.md)

---

[API](https://skmtc.dev/imentiv/apis/welcome-to-imentiv-ai.md) - [All operations](https://skmtc.dev/imentiv/apis/welcome-to-imentiv-ai/llms.txt) - [OpenAPI document](https://skmtc.dev/imentiv/apis/welcome-to-imentiv-ai/revisions/bc15cec7e794?raw)
