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

# Get a Source-Video Transcript

> Fetch the trimmed source-video transcript for a project by making a `GET` request to `https://api.opus.pro/api/transcripts?q=findByProjectId&projectId=...`. Returns paragraphs with start/end times in seconds, text, optional speaker, and per-word timings. ASR internals (seek, tokens, log-probabilities, etc.) are stripped.

<Note>
  For API callers on a range-limited project, paragraphs are filtered to the **billed curation range** (the portion the user paid to clip). Internal callers and full-source submissions get the full transcript.
</Note>

## Related Schemas

<CardGroup cols={2}>
  <Card title="TranscriptExportParagraph" icon="code" href="/api-reference/schemas/transcript-export-paragraph">
    Reference the paragraph object returned in the transcript.
  </Card>

  <Card title="TranscriptExportWord" icon="code" href="/api-reference/schemas/transcript-export-word">
    Reference the per-word timing object inside each paragraph.
  </Card>
</CardGroup>


## OpenAPI

````yaml GET /api/transcripts
openapi: 3.0.0
info:
  title: Clip API
  description: Clip API documentation
  version: '1.0'
  contact: {}
servers:
  - url: https://api.opus.pro
    description: OpusClip Open API Production Server
security: []
tags: []
paths:
  /api/transcripts:
    get:
      tags:
        - transcripts
      summary: Get a source-video transcript
      description: >-
        Fetch the trimmed source-video transcript for a project. ASR internals
        (seek, tokens, log-probabilities, etc.) are stripped. For API callers on
        a range-limited project, paragraphs are filtered to the billed curation
        range; internal callers and full-source submissions get the full
        transcript.
      operationId: TranscriptController_getTranscript
      parameters:
        - name: q
          required: true
          in: query
          description: Query variant. Public callers must pass `findByProjectId`.
          schema:
            type: string
            enum:
              - findByProjectId
        - name: projectId
          required: true
          in: query
          description: Project ID.
          schema:
            type: string
            example: P2120900kDmP
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranscriptResponse'
      security:
        - bearer: []
components:
  schemas:
    TranscriptResponse:
      type: object
      description: >-
        Wrapper for the transcript response. `data[0]` is the transcript, or
        `null` when the project has no transcript yet.
      properties:
        data:
          type: array
          items:
            type: array
            nullable: true
            items:
              $ref: '#/components/schemas/TranscriptExportParagraph'
    TranscriptExportParagraph:
      type: object
      description: >-
        A paragraph of the transcript with timing and optional speaker
        attribution.
      properties:
        id:
          type: integer
          description: Paragraph index within the transcript.
          example: 0
        start:
          type: number
          description: Start time in seconds.
          example: 0
        end:
          type: number
          description: End time in seconds.
          example: 10.5
        text:
          type: string
          description: Paragraph text.
          example: Hello and welcome to the show.
        speaker:
          type: string
          description: Speaker label, when diarization is available.
          example: SPEAKER_00
        words:
          type: array
          items:
            $ref: '#/components/schemas/TranscriptExportWord'
          description: Per-word timings inside this paragraph.
      required:
        - id
        - start
        - end
        - text
        - words
    TranscriptExportWord:
      type: object
      description: A single word with start/end timings and optional filler-word flag.
      properties:
        word:
          type: string
          description: The word.
          example: hello
        start:
          type: number
          description: Start time in seconds.
          example: 0.12
        end:
          type: number
          description: End time in seconds.
          example: 0.48
        isFillerWord:
          type: boolean
          description: True if the word is a filler (um, uh, ...).
          example: false
      required:
        - word
        - start
        - end
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http

````