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

# Download transcript

> Download the transcript of a finished transcription job as SRT (default) or JSON. The content is the latest version in the website editor, including your edits; it is the same transcript the website exports as original-language subtitles.

The SRT is returned as a plain-text body (`Content-Type: application/x-subrip; charset=UTF-8`), not wrapped in the JSON envelope. With `format=json`, the usual envelope is returned and `data.segments` holds the same entries as the SRT, with times in integer milliseconds. Errors always use the JSON envelope with HTTP 200 and `code` in the body: `400` invalid parameters; `404` the `taskId` is not a transcription job in your account (translation job IDs also return `404`); `409` the job has not finished or its transcript is not ready yet (retry after `status` is `finished`).

Omit the `Accept` header or send `Accept: */*`. If `Accept` lists only non-JSON types (for example only `application/x-subrip`), error responses may not be returned correctly.



## OpenAPI

````yaml /api-reference/app-synced.json get /openapi/v1/app/tasks/transcription/srt
openapi: 3.1.0
info:
  title: VMEG Open API (App-Synced)
  description: >-
    Same protocol as the Standalone API, but every task, material, and cloned
    voice lives in your VMEG website account: jobs show up in **My tasks**, open
    in the editor, and can be re-exported. Supports media translation,
    transcription, and voice clone. Get results from your webhook (first result
    only, event `openapi-app-media-translation`) or by polling `GET
    /openapi/v1/app/tasks/detail`. See [Standalone vs
    App-Synced](/guides/choose-api).


    Linked guides are written for the Standalone API. The steps are the same;
    use the `/openapi/v1/app` prefix instead of `/openapi/v1`.
  version: 1.0.0
servers:
  - url: https://api.vmeg.ai
    description: Production
security:
  - apiKeyAuth: []
tags:
  - name: Media translation
    x-group: Video & audio translate and dub
    description: >-
      Translate and dub uploaded video/audio or a YouTube link on the same
      pipeline as vmeg.ai. The first pass renders the dubbed file; the job also
      appears in **My tasks** for editing and re-export. Get results from your
      webhook (first result only) or poll [Query job
      status](/api-reference/app-synced/tasks/get-task-detail).
  - name: Transcription
    description: >-
      Transcribe uploaded video/audio or a YouTube link on the same pipeline as
      vmeg.ai. The job appears in **My tasks** and opens in the transcription
      editor. When it finishes, download the latest transcript (including your
      edits on the website) as SRT or JSON.
  - name: Voice clone
    x-group: Voice cloning
    description: >-
      Clone a voice from a short recording. The voice is saved to **My voices**
      on the website and returned as `cv_*` for translate-and-dub jobs.
  - name: Task management
    x-group: Task status and history
    description: >-
      List, inspect, or delete the video/audio translation and transcription
      jobs in your VMEG account, including jobs created on the website.
  - name: Assets - Materials
    x-group: Upload files (materials)
    description: >-
      Upload and manage the files in your website material library (**My
      assets**). Finish the upload (single-file or multipart), then pass
      `materialId` to create-async.
  - name: Assets - Voices
    x-group: Voices (presets and clones)
    description: >-
      List preset system voices (`sv_*`) and manage your cloned voices (`cv_*`,
      same as **My voices** on the website).
paths:
  /openapi/v1/app/tasks/transcription/srt:
    get:
      tags:
        - Transcription
      summary: Download transcript
      description: >-
        Download the transcript of a finished transcription job as SRT (default)
        or JSON. The content is the latest version in the website editor,
        including your edits; it is the same transcript the website exports as
        original-language subtitles.


        The SRT is returned as a plain-text body (`Content-Type:
        application/x-subrip; charset=UTF-8`), not wrapped in the JSON envelope.
        With `format=json`, the usual envelope is returned and `data.segments`
        holds the same entries as the SRT, with times in integer milliseconds.
        Errors always use the JSON envelope with HTTP 200 and `code` in the
        body: `400` invalid parameters; `404` the `taskId` is not a
        transcription job in your account (translation job IDs also return
        `404`); `409` the job has not finished or its transcript is not ready
        yet (retry after `status` is `finished`).


        Omit the `Accept` header or send `Accept: */*`. If `Accept` lists only
        non-JSON types (for example only `application/x-subrip`), error
        responses may not be returned correctly.
      operationId: appTranscriptionSrt
      parameters:
        - name: taskId
          in: query
          required: true
          description: Transcription task ID
          schema:
            type: string
        - name: format
          in: query
          required: false
          description: >-
            `srt` (default) plain-text SRT | `json` JSON segments.
            Case-insensitive; other values return `400`.
          schema:
            type: string
            enum:
              - srt
              - json
            default: srt
        - name: speakers
          in: query
          required: false
          description: >-
            `true` prefixes each SRT line with `[Speaker N] ` when speaker
            information is available. Default `false`; values other than
            `true`/`false` return `400`. JSON always includes `speaker`.
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: SRT text by default; JSON envelope with `format=json`.
          content:
            application/x-subrip:
              schema:
                type: string
                example: |
                  1
                  00:00:00,000 --> 00:00:05,960
                  Welcome to VMEG.

                  2
                  00:00:06,120 --> 00:00:09,480
                  Let's get started.
            application/json:
              schema:
                $ref: '#/components/schemas/AppTranscriptResponse'
components:
  schemas:
    AppTranscriptResponse:
      allOf:
        - $ref: '#/components/schemas/OpenApiResponseBase'
        - type: object
          properties:
            data:
              type: object
              description: Transcript (format=json)
              properties:
                taskId:
                  type: string
                  description: Task ID (same as the job ID on the website)
                segments:
                  type: array
                  items:
                    $ref: '#/components/schemas/AppTranscriptSegment'
                  description: >-
                    Transcript segments sorted by start time; empty lines are
                    dropped
    OpenApiResponseBase:
      type: object
      properties:
        code:
          type: integer
          example: 200
          description: Business code; 200 means success
        message:
          type: string
          example: ''
          description: Human-readable detail when `code` is not success
      required:
        - code
    AppTranscriptSegment:
      type: object
      properties:
        index:
          type: integer
          description: Sequence number starting at 1, same as the SRT entry number
          example: 1
        start:
          type: integer
          format: int64
          description: Start time in milliseconds
          example: 0
        end:
          type: integer
          format: int64
          description: End time in milliseconds
          example: 5960
        text:
          type: string
          description: Segment text
          example: Welcome to VMEG.
        speaker:
          type: string
          description: >-
            Speaker label such as `1`; omitted when there is no speaker
            information
          example: '1'
  securitySchemes:
    apiKeyAuth:
      type: http
      scheme: bearer
      description: >-
        Send your API Key in the **`Authorization`** header (`Bearer
        <api_key>`). See [Authentication](/guides/authentication).

````

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