> ## 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.

# Save a subtitle preset

> Saves a subtitle look as a personal preset, like the editor's "Save as preset". Pass `videoId` to snapshot that video's current subtitles (style, font, weight, size, position, grouping and lines per block), `captionStyle` to build one from scratch on the style's defaults, or both — explicit caption fields override the video's. Omit `name` for the editor's default (the matching built-in's name, numbered). The preset then appears in GET /v1/subtitle-presets and in the editor's Subtitles panel, and can be applied to other videos with PUT /v1/videos/{id}/subtitle-preset.



## OpenAPI

````yaml /openapi.json post /v1/subtitle-presets
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/subtitle-presets:
    post:
      tags:
        - Videos
      summary: Save a subtitle preset
      description: >-
        Saves a subtitle look as a personal preset, like the editor's "Save as
        preset". Pass `videoId` to snapshot that video's current subtitles
        (style, font, weight, size, position, grouping and lines per block),
        `captionStyle` to build one from scratch on the style's defaults, or
        both — explicit caption fields override the video's. Omit `name` for the
        editor's default (the matching built-in's name, numbered). The preset
        then appears in GET /v1/subtitle-presets and in the editor's Subtitles
        panel, and can be applied to other videos with PUT
        /v1/videos/{id}/subtitle-preset.
      operationId: saveSubtitlePreset
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveSubtitlePresetRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  preset:
                    $ref: '#/components/schemas/SubtitlePreset'
                required:
                  - preset
                type: object
          description: Preset saved
          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:
    SaveSubtitlePresetRequest:
      additionalProperties: false
      description: >-
        A subtitle look to save. Pass `videoId` to snapshot a video's current
        subtitles, `captionStyle` to build one from scratch, or both — explicit
        caption fields override the video's.
      properties:
        captionFontFamily:
          allOf:
            - $ref: '#/components/schemas/CaptionFontFamily'
          description: >-
            One of Tella's catalog font families. Defaults to the video's font,
            or the style's default face.
        captionFontSize:
          allOf:
            - $ref: '#/components/schemas/CaptionFontSize'
          description: >-
            Exact subtitle text size, 40 to 200. Defaults to the video's, or the
            style's default. Pass this or `captionSize`, not both.
        captionFontWeight:
          allOf:
            - $ref: '#/components/schemas/CaptionFontWeight'
          description: >-
            Variable-font weight, 100 to 1000, clamped to the family's range.
            Defaults to the font's current weight.
        captionGrouping:
          description: >-
            How subtitle text is grouped: sentence chunks or one word at a time.
            Defaults to the video's, or chunked.
          enum:
            - chunked
            - singleWord
          type: string
        captionLinesPerBlock:
          allOf:
            - $ref: '#/components/schemas/CaptionLinesPerBlock'
          description: >-
            Lines per chunked caption block: 1, 2, 3, or 0 for no limit.
            Defaults to the video's, or 1.
        captionPosition:
          allOf:
            - $ref: '#/components/schemas/CaptionPosition'
          description: >-
            Normalized subtitle position, or null for automatic placement.
            Defaults to the video's, or automatic.
          nullable: true
        captionSize:
          description: >-
            Subtitle text size. Defaults to the video's, or the style's default.
            Pass this or `captionFontSize`, not both.
          enum:
            - small
            - medium
            - large
          type: string
        captionStyle:
          allOf:
            - $ref: '#/components/schemas/CaptionStyle'
          description: >-
            Subtitle style for the preset. Required without `videoId`; with it,
            replaces the video's style.
        name:
          description: >-
            Preset name, as shown in the editor. Defaults to the matching
            built-in's name, numbered past any saved preset already using it.
          example: Brand captions
          maxLength: 255
          minLength: 1
          type: string
        videoId:
          description: >-
            Video whose current subtitle look to start from. Omit to build the
            preset from `captionStyle` and the style's defaults.
          example: vid_abc123
          minLength: 1
          type: string
      type: object
    SubtitlePreset:
      additionalProperties: false
      properties:
        captionStyle:
          $ref: '#/components/schemas/CaptionStyle'
        name:
          type: string
        presetId:
          description: Pass this ID to PUT /v1/videos/{id}/subtitle-preset
          example: default:spotlight
          type: string
        scope:
          enum:
            - default
            - personal
          type: string
      required:
        - presetId
        - name
        - scope
        - captionStyle
      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
    CaptionFontFamily:
      description: >-
        Subtitle font family. On write, one of Tella's catalog font families
        (the list the editor's font picker offers, and the same one `fontFamily`
        accepts on text overlays), or the video's current family to keep an
        uploaded font. Reads report the family the subtitles render with, which
        on videos styled before the catalog can be a legacy bundled family such
        as `Arial`.
      example: Inter
      minLength: 1
      type: string
    CaptionFontSize:
      description: >-
        Exact subtitle text size, 40 to 200 — the editor's Size slider.
        `captionSize` is the same setting in buckets (small 40, medium 64, large
        80), so a request passes one or the other, not both.
      example: 64
      maximum: 200
      minimum: 40
      type: number
    CaptionFontWeight:
      description: >-
        Variable-font weight axis — 100 (thin) to 1000. Clamped to the range the
        family supports, so a read reports the weight that renders. Sent without
        `captionFontFamily`, it re-weights the video's current font.
      example: 500
      maximum: 1000
      minimum: 100
      type: number
    CaptionLinesPerBlock:
      description: >-
        Lines a caption block may span when `captionGrouping` is `chunked`: 1,
        2, or 3, or 0 for no limit, where blocks only break on pauses and
        sentence ends.
      example: 1
      maximum: 3
      minimum: 0
      type: integer
    CaptionPosition:
      additionalProperties: false
      description: >-
        Normalized subtitle position. Applies if subtitles are enabled on the
        video. Null uses automatic placement.
      properties:
        x:
          maximum: 1
          minimum: 0
          type: number
        'y':
          maximum: 1
          minimum: 0
          type: number
      required:
        - x
        - 'y'
      type: object
    CaptionStyle:
      description: >-
        Subtitle style. Applies if subtitles are enabled on the video.
        Background, shadow, and outline colors and toggles are available on
        every style.
      discriminator:
        mapping:
          backdrop: '#/components/schemas/BackdropCaptionStyle'
          cannes: '#/components/schemas/CannesCaptionStyle'
          classic: '#/components/schemas/ClassicCaptionStyle'
          highlight: '#/components/schemas/HighlightCaptionStyle'
          mono: '#/components/schemas/MonoCaptionStyle'
        propertyName: name
      oneOf:
        - $ref: '#/components/schemas/BackdropCaptionStyle'
        - $ref: '#/components/schemas/HighlightCaptionStyle'
        - $ref: '#/components/schemas/MonoCaptionStyle'
        - $ref: '#/components/schemas/CannesCaptionStyle'
        - $ref: '#/components/schemas/ClassicCaptionStyle'
      type: object
    BackdropCaptionStyle:
      additionalProperties: false
      properties:
        activeWordTextColor:
          description: >-
            Text color of the spoken word when highlightMode is background.
            Defaults to textColor.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        backgroundColor:
          description: >-
            Caption background color in #RRGGBB or #RRGGBBAA form. Its alpha
            channel is rendered exactly; #RRGGBB is fully opaque. Responses use
            uppercase #RRGGBBAA and report the effective rendered color.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        backgroundEnabled:
          type: boolean
        highlightColor:
          description: >-
            Spoken-word color. Omit to retain the legacy text-opacity
            progression.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        highlightMode:
          description: How the spoken word is emphasized. Defaults to text.
          enum:
            - text
            - background
            - fadeRest
          type: string
        name:
          enum:
            - backdrop
          type: string
        outlineColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        outlineEnabled:
          type: boolean
        shadowColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        shadowEnabled:
          type: boolean
        textCase:
          description: Letter case applied to every caption word. Defaults to original.
          enum:
            - original
            - uppercase
            - lowercase
          type: string
        textColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        wordLevelHighlights:
          type: boolean
      required:
        - backgroundColor
        - name
        - textColor
        - wordLevelHighlights
      title: Backdrop
      type: object
    CannesCaptionStyle:
      additionalProperties: false
      properties:
        activeWordTextColor:
          description: >-
            Text color of the spoken word when highlightMode is background.
            Defaults to textColor.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        backgroundColor:
          description: >-
            Caption background color in #RRGGBB or #RRGGBBAA form. Its alpha
            channel is rendered exactly; #RRGGBB is fully opaque. Responses use
            uppercase #RRGGBBAA and report the effective rendered color.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        backgroundEnabled:
          type: boolean
        highlightColor:
          description: Spoken-word color. Defaults to textColor.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        highlightMode:
          description: How the spoken word is emphasized. Defaults to text.
          enum:
            - text
            - background
            - fadeRest
          type: string
        name:
          enum:
            - cannes
          type: string
        outlineColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        outlineEnabled:
          type: boolean
        shadowColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        shadowEnabled:
          type: boolean
        textCase:
          description: Letter case applied to every caption word. Defaults to original.
          enum:
            - original
            - uppercase
            - lowercase
          type: string
        textColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        wordLevelHighlights:
          description: Highlight each word as it is spoken. Defaults to false.
          type: boolean
      required:
        - shadowColor
        - name
        - textColor
      title: Cannes
      type: object
    ClassicCaptionStyle:
      additionalProperties: false
      properties:
        activeWordTextColor:
          description: >-
            Text color of the spoken word when highlightMode is background.
            Defaults to textColor.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        backgroundColor:
          description: >-
            Caption background color in #RRGGBB or #RRGGBBAA form. Its alpha
            channel is rendered exactly; #RRGGBB is fully opaque. Responses use
            uppercase #RRGGBBAA and report the effective rendered color.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        backgroundEnabled:
          type: boolean
        highlightColor:
          description: Spoken-word color. Defaults to textColor.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        highlightMode:
          description: How the spoken word is emphasized. Defaults to text.
          enum:
            - text
            - background
            - fadeRest
          type: string
        name:
          enum:
            - classic
          type: string
        outlineColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        outlineEnabled:
          type: boolean
        shadowColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        shadowEnabled:
          type: boolean
        textCase:
          description: Letter case applied to every caption word. Defaults to original.
          enum:
            - original
            - uppercase
            - lowercase
          type: string
        textColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        wordLevelHighlights:
          description: Highlight each word as it is spoken. Defaults to false.
          type: boolean
      required:
        - outlineColor
        - name
        - textColor
      title: Classic
      type: object
    HighlightCaptionStyle:
      additionalProperties: false
      properties:
        backgroundColor:
          description: >-
            Caption background color in #RRGGBB or #RRGGBBAA form. Its alpha
            channel is rendered exactly; #RRGGBB is fully opaque. Responses use
            uppercase #RRGGBBAA and report the effective rendered color.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        backgroundEnabled:
          type: boolean
        highlightColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        highlightMode:
          description: How the spoken word is emphasized. Defaults to background.
          enum:
            - text
            - background
            - fadeRest
          type: string
        name:
          enum:
            - highlight
          type: string
        outlineColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        outlineEnabled:
          type: boolean
        primaryTextColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        secondaryTextColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        shadowColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        shadowEnabled:
          type: boolean
        textCase:
          description: Letter case applied to every caption word. Defaults to original.
          enum:
            - original
            - uppercase
            - lowercase
          type: string
        wordLevelHighlights:
          description: Highlight each word as it is spoken. Defaults to true.
          type: boolean
      required:
        - name
        - primaryTextColor
        - secondaryTextColor
        - highlightColor
      title: Highlight
      type: object
    MonoCaptionStyle:
      additionalProperties: false
      properties:
        activeWordTextColor:
          description: >-
            Text color of the spoken word when highlightMode is background.
            Defaults to textColor.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        backgroundColor:
          description: >-
            Caption background color in #RRGGBB or #RRGGBBAA form. Its alpha
            channel is rendered exactly; #RRGGBB is fully opaque. Responses use
            uppercase #RRGGBBAA and report the effective rendered color.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        backgroundEnabled:
          type: boolean
        highlightColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        highlightMode:
          description: How the spoken word is emphasized. Defaults to text.
          enum:
            - text
            - background
            - fadeRest
          type: string
        name:
          enum:
            - mono
          type: string
        outlineColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        outlineEnabled:
          type: boolean
        shadowColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        shadowEnabled:
          type: boolean
        textCase:
          description: Letter case applied to every caption word. Defaults to original.
          enum:
            - original
            - uppercase
            - lowercase
          type: string
        textColor:
          description: >-
            Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase
            #RRGGBBAA.
          example: '#5E51F8FF'
          pattern: ^#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$
          type: string
        wordLevelHighlights:
          description: Highlight each word as it is spoken. Defaults to true.
          type: boolean
      required:
        - name
        - textColor
        - highlightColor
      title: Mono
      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

- [Videos](/docs/mcp-tools/videos.md)
- [Apply a subtitle preset](/docs/api-reference/videos/apply-a-subtitle-preset.md)
- [List subtitle presets](/docs/api-reference/videos/list-subtitle-presets.md)
- [Save a text preset](/docs/api-reference/clips/save-a-text-preset.md)
- [Text overlays](/docs/mcp-tools/text-overlays.md)


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