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

# Get the transcript of a source on no clip

> Returns the words spoken in a streaming upload source owned by the caller or their workspace, without a video or clip: for a source that isn't on any clip yet, such as an imported video. Times are in ms of source time and no cuts apply. Answers 503 while the source is still being transcribed. Takes the same `startTimeMs`/`endTimeMs` window and `view=sentences` as the clip transcript.



## OpenAPI

````yaml /openapi.json get /v1/sources/{sourceId}/transcript
openapi: 3.0.3
info:
  description: >-
    The Tella Public API allows you to programmatically access your videos and
    playlists, including transcripts, chapters, and thumbnails.


    ## Authentication


    All requests require a Bearer token in the Authorization header:

    ```

    Authorization: Bearer tella_pk_xxxxx...

    ```


    API keys can be generated in your Tella workspace settings.


    ## Rate Limiting


    The API is rate-limited to 100 requests per minute per user within a
    workspace.

    Rate limit information is returned in response headers:

    - `RateLimit-Policy`: Named quota, request limit, and window in seconds

    - `RateLimit`: Remaining quota and seconds until reset

    - `X-RateLimit-Limit`: Maximum requests per window

    - `X-RateLimit-Remaining`: Remaining requests in current window

    - `X-RateLimit-Reset`: Unix timestamp in milliseconds when the window resets


    A `429 Too Many Requests` response also includes `Retry-After` in seconds.
  title: Tella Public API
  version: 1.0.0
servers:
  - description: Production
    url: https://api.tella.com
security: []
tags:
  - description: Video operations
    name: Videos
  - description: Sections of a video
    name: Clips
  - description: Playlist operations
    name: Playlists
  - description: Sidebar groups for organizing playlists
    name: Playlist Groups
  - description: Tags for categorizing and filtering videos
    name: Tags
  - description: >-
      Viewing analytics for a video or across the workspace: plays, watch time,
      retention, geography, referrers
    name: Analytics
  - description: Personal, workspace, and default video backgrounds
    name: Backgrounds
  - description: >-
      Reusable media saved to a workspace, plus Tella's curated sound effect and
      background music catalogs — the same items the editor's media panels show
    name: Library
  - description: Webhook endpoint management
    name: Webhooks
externalDocs:
  description: API versioning and deprecation policy
  url: https://www.tella.com/docs/versioning
paths:
  /v1/sources/{sourceId}/transcript:
    get:
      tags:
        - Sources
      summary: Get the transcript of a source on no clip
      description: >-
        Returns the words spoken in a streaming upload source owned by the
        caller or their workspace, without a video or clip: for a source that
        isn't on any clip yet, such as an imported video. Times are in ms of
        source time and no cuts apply. Answers 503 while the source is still
        being transcribed. Takes the same `startTimeMs`/`endTimeMs` window and
        `view=sentences` as the clip transcript.
      operationId: getSourceTranscript
      parameters:
        - description: Streaming upload source identifier
          in: path
          name: sourceId
          required: true
          schema:
            description: Streaming upload source identifier
            example: su_abc123def456
            type: string
        - description: >-
            Only return items at or after this time, in ms on the clip's
            playback timeline. Defaults to the clip's start.
          in: query
          name: startTimeMs
          schema:
            description: >-
              Only return items at or after this time, in ms on the clip's
              playback timeline. Defaults to the clip's start.
            example: 60000
            maximum: 9007199254740991
            minimum: 0
            type: integer
        - description: >-
            Only return items before this time (exclusive), in ms on the clip's
            playback timeline. Must be greater than `startTimeMs`. Defaults to
            the clip's end. Page through a long clip with windows that meet end
            to start.
          in: query
          name: endTimeMs
          schema:
            description: >-
              Only return items before this time (exclusive), in ms on the
              clip's playback timeline. Must be greater than `startTimeMs`.
              Defaults to the clip's end. Page through a long clip with windows
              that meet end to start.
            example: 120000
            maximum: 9007199254740991
            minimum: 1
            type: integer
        - description: >-
            `words` (default): every word with its index, times and flags.
            `sentences`: one row per sentence (first and last word index, start
            and end time, text), about a quarter of the size, for reading the
            gist of a long clip. A time window cuts sentences at its edges.
          in: query
          name: view
          schema:
            description: >-
              `words` (default): every word with its index, times and flags.
              `sentences`: one row per sentence (first and last word index,
              start and end time, text), about a quarter of the size, for
              reading the gist of a long clip. A time window cuts sentences at
              its edges.
            enum:
              - words
              - sentences
            example: sentences
            type: string
        - description: >-
            `true`: also return the words that cuts removed, each marked `cut`,
            with every word's times in the clip's source recording
            (`sourceStartTimeMs`/`sourceEndTimeMs`). Use it to find footage the
            cuts took out, such as a retake, without undoing the cuts. Kept
            words still carry their playback `startTimeMs`/`endTimeMs`.
            `startTimeMs`/`endTimeMs` filter on the source times. Words view
            only.
          in: query
          name: includeCut
          schema:
            description: >-
              `true`: also return the words that cuts removed, each marked
              `cut`, with every word's times in the clip's source recording
              (`sourceStartTimeMs`/`sourceEndTimeMs`). Use it to find footage
              the cuts took out, such as a retake, without undoing the cuts.
              Kept words still carry their playback `startTimeMs`/`endTimeMs`.
              `startTimeMs`/`endTimeMs` filter on the source times. Words view
              only.
            enum:
              - 'true'
              - 'false'
            example: 'true'
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/ClipTranscriptResponse'
                  - $ref: '#/components/schemas/ClipTranscriptSentencesResponse'
          description: OK
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
        '400':
          content:
            application/json:
              example:
                docsUrl: https://docs.tella.com/
                error: bad_request
                message: The request was malformed or contained invalid parameters.
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: The request was malformed or contained invalid parameters.
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
        '401':
          content:
            application/json:
              example:
                docsUrl: https://docs.tella.com/
                error: unauthorized
                message: Authentication is required. Provide a valid API key.
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Authentication is required. Provide a valid API key.
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
        '403':
          content:
            application/json:
              example:
                docsUrl: https://docs.tella.com/
                error: forbidden
                message: You don't have permission to access this resource.
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: You don't have permission to access this resource.
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
        '404':
          content:
            application/json:
              example:
                docsUrl: https://docs.tella.com/
                error: not_found
                message: The requested resource was not found.
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: The requested resource was not found.
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
        '409':
          content:
            application/json:
              example:
                docsUrl: https://docs.tella.com/
                error: conflict
                message: >-
                  The request conflicts with the resource's current state, e.g.
                  an Idempotency-Key whose first request is still in progress.
                  Retry once it settles.
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: >-
            The request conflicts with the resource's current state, e.g. an
            Idempotency-Key whose first request is still in progress. Retry once
            it settles.
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
        '429':
          content:
            application/json:
              example:
                docsUrl: https://docs.tella.com/
                error: rate_limited
                message: You have exceeded the rate limit. Please slow down.
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: You have exceeded the rate limit. Please slow down.
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            Retry-After:
              $ref: '#/components/headers/RetryAfter'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
        '500':
          content:
            application/json:
              example:
                docsUrl: https://docs.tella.com/
                error: server_error
                message: An unexpected error occurred
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: An unexpected error occurred
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
        '501':
          content:
            application/json:
              example:
                docsUrl: https://docs.tella.com/
                error: not_implemented
                message: The requested operation is not implemented.
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: The requested operation is not implemented.
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
        '503':
          content:
            application/json:
              example:
                docsUrl: https://docs.tella.com/
                error: unavailable
                message: >-
                  A dependency was unavailable and the request was not executed.
                  Safe to resend unchanged after the Retry-After delay.
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: >-
            A dependency was unavailable and the request was not executed. Safe
            to resend unchanged after the Retry-After delay.
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
      security:
        - BearerAuth: []
components:
  schemas:
    ClipTranscriptResponse:
      additionalProperties: false
      description: Clip transcript — what viewers hear.
      properties:
        words:
          description: >-
            Words on the playback timeline (cuts removed, times relative to the
            clip's playback start). Word indices are stable — they don't shift
            when cuts change; words inside cuts are simply absent.
          items:
            $ref: '#/components/schemas/TranscriptWord'
          type: array
      required:
        - words
      type: object
    ClipTranscriptSentencesResponse:
      additionalProperties: false
      description: Clip transcript as sentences (`view=sentences`).
      properties:
        sentences:
          description: >-
            Sentences on the playback timeline (cuts removed), split at `.`, `?`
            and `!`. Word indices can have gaps where words were cut.
          items:
            $ref: '#/components/schemas/TranscriptSentence'
          type: array
      required:
        - sentences
      type: object
    ErrorResponse:
      additionalProperties: false
      description: Standard error response format
      properties:
        docsUrl:
          description: Link to Tella API documentation
          example: https://docs.tella.com/
          format: uri
          type: string
        error:
          description: Machine-readable error code
          enum:
            - bad_request
            - unauthorized
            - forbidden
            - not_found
            - rate_limited
            - server_error
            - conflict
            - edit_conflict
            - not_implemented
            - unavailable
          example: not_found
          type: string
        message:
          description: Human-readable error message
          example: Resource not found
          type: string
      required:
        - error
        - message
        - docsUrl
      type: object
    TranscriptWord:
      additionalProperties: false
      description: A single transcribed word
      properties:
        breakAfter:
          description: >-
            Whether a subtitle break is forced after this word, so the next word
            always starts a new subtitle block
          example: false
          type: boolean
        endTimeMs:
          description: Word end time, in ms on the clip's playback timeline
          example: 1800
          minimum: 0
          type: number
        hidden:
          description: Whether the word is hidden by an edit
          example: false
          type: boolean
        index:
          description: Stable index of the word in the source recording
          example: 12
          maximum: 9007199254740991
          minimum: 0
          type: integer
        keepWithNext:
          description: >-
            Whether this word's subtitle block is kept together with the next
            word across punctuation and pauses. The lines-per-block limit still
            applies and `breakAfter` wins.
          example: false
          type: boolean
        startTimeMs:
          description: Word start time, in ms on the clip's playback timeline
          example: 1500
          minimum: 0
          type: number
        text:
          description: Word text
          example: Hello
          type: string
      required:
        - index
        - startTimeMs
        - endTimeMs
        - text
        - hidden
        - breakAfter
        - keepWithNext
      type: object
    TranscriptSentence:
      additionalProperties: false
      properties:
        endTimeMs:
          description: End of the last word, in ms on the clip's playback timeline
          example: 4200
          minimum: 0
          type: number
        firstIndex:
          description: Index of the sentence's first word
          example: 12
          maximum: 9007199254740991
          minimum: 0
          type: integer
        lastIndex:
          description: Index of the sentence's last word
          example: 19
          maximum: 9007199254740991
          minimum: 0
          type: integer
        startTimeMs:
          description: Start of the first word, in ms on the clip's playback timeline
          example: 1500
          minimum: 0
          type: number
        text:
          description: The sentence's words joined with spaces
          example: Hello and welcome to the demo.
          type: string
      required:
        - firstIndex
        - lastIndex
        - startTimeMs
        - endTimeMs
        - text
      type: object
  headers:
    Deprecation:
      description: Indicates that an API operation is deprecated, following RFC 9745
      example: '@1767225600'
      schema:
        type: string
    RateLimit:
      description: >-
        Current quota with remaining requests (`r`) and seconds until reset
        (`t`)
      example: '"public-api";r=95;t=42'
      schema:
        type: string
    RateLimitPolicy:
      description: >-
        Named quota policy with the request limit (`q`) and window in seconds
        (`w`)
      example: '"public-api";q=100;w=60'
      schema:
        type: string
    Sunset:
      description: >-
        Indicates when a deprecated API operation will become unavailable,
        following RFC 8594
      example: Tue, 30 Jun 2026 23:59:59 GMT
      schema:
        type: string
    XRateLimitLimit:
      description: Maximum requests allowed in the current window
      example: 100
      schema:
        type: integer
    XRateLimitRemaining:
      description: Requests remaining in the current window
      example: 95
      schema:
        type: integer
    XRateLimitReset:
      description: Unix timestamp in milliseconds when the window resets
      example: 1704067200000
      schema:
        format: int64
        type: integer
    RetryAfter:
      description: Seconds to wait before retrying a rate-limited request
      example: 45
      schema:
        minimum: 1
        type: integer
  securitySchemes:
    BearerAuth:
      description: API key obtained from your Tella account settings
      scheme: bearer
      type: http

````

## Related topics

- [Get clip transcript](/docs/api-reference/clips/get-clip-transcript.md)
- [Get a thumbnail of a source on no clip](/docs/api-reference/sources/get-a-thumbnail-of-a-source-on-no-clip.md)
- [Get the audio waveform JSON for a source on no clip](/docs/api-reference/sources/get-the-audio-waveform-json-for-a-source-on-no-clip.md)
- [Clips](/docs/mcp-tools/clips.md)
- [Cut clip ranges by transcript word indices](/docs/api-reference/clips/cut-clip-ranges-by-transcript-word-indices.md)


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