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

# Get a theme

> Get a theme by ID. Users can access their own themes and public themes.



## OpenAPI

````yaml api-reference/openapi.json get /api/v1/themes/{id}
openapi: 3.1.0
info:
  title: Quiz Quail API
  version: 1.0.0
  description: >-
    The Quiz Quail API lets you create, manage, and render quiz videos
    programmatically. Build quizzes with multiple rounds and question types,
    apply custom themes, render to video, upload to YouTube, and use AI to
    generate quizzes from topics.


    ## Authentication


    All endpoints require a Bearer token (API key). Include it in the
    `Authorization` header:


    ```

    Authorization: Bearer qq_your_api_key_here

    ```


    API keys can be scoped to specific permissions. See the security schemes
    below for available scopes.


    ## Rate Limiting


    Requests are rate-limited per user:

    - **Read** endpoints: 300 requests/minute

    - **Write** endpoints: 30 requests/minute

    - **AI** endpoints: 5 requests/minute

    - **Render** endpoints: 10 requests/hour


    Rate limit headers are included in every response.


    ## Pagination


    List endpoints use cursor-based pagination. Pass the `cursor` from the
    previous response to get the next page. The `hasMore` field indicates
    whether more items exist.


    ## Errors


    Errors follow [RFC 9457 Problem
    Details](https://www.rfc-editor.org/rfc/rfc9457). Every error response
    includes `type`, `title`, `status`, and `detail` fields.
  contact:
    name: Quiz Quail
    url: https://quizquail.com
servers:
  - url: https://quizquail.com
    description: Production
  - url: http://localhost:3000
    description: Local development
security:
  - bearerAuth: []
tags:
  - name: Quizzes
    description: Create and manage quizzes, rounds, and questions
  - name: Themes
    description: Create and manage visual themes for quizzes
  - name: Media
    description: Upload, manage, and search media files
  - name: Renders
    description: Render quizzes to video and download results
  - name: Thumbnails
    description: Generate video thumbnails
  - name: YouTube
    description: Upload videos to YouTube and manage uploads
  - name: Webhooks
    description: Register webhooks for event notifications
  - name: AI
    description: AI-powered quiz generation and promotion suggestions
  - name: Trends
    description: Trending topics for quiz inspiration
paths:
  /api/v1/themes/{id}:
    get:
      tags:
        - Themes
      summary: Get a theme
      description: Get a theme by ID. Users can access their own themes and public themes.
      parameters:
        - schema:
            type: string
            format: uuid
            description: Resource UUID
            example: 550e8400-e29b-41d4-a716-446655440000
          required: true
          description: Resource UUID
          in: path
          name: id
      responses:
        '200':
          description: Theme details
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Theme'
                required:
                  - data
        '404':
          description: Theme not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth:
            - themes:read
components:
  schemas:
    Theme:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        primaryColor:
          type: string
        secondaryColor:
          type: string
        backgroundColor:
          type: string
        textColor:
          type: string
        accentColor:
          type: string
        fontFamily:
          type: string
        backgroundImageUrl:
          type:
            - string
            - 'null'
        isPublic:
          type: boolean
        soundPack: {}
        effects:
          allOf:
            - $ref: '#/components/schemas/ThemeEffects'
            - type:
                - object
                - 'null'
              description: >-
                Visual effects configuration (42 fields, all optional with
                defaults)
        userId:
          type: string
          format: uuid
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - id
        - name
        - primaryColor
        - secondaryColor
        - backgroundColor
        - textColor
        - accentColor
        - fontFamily
        - backgroundImageUrl
        - isPublic
        - effects
        - userId
        - createdAt
        - updatedAt
    Error:
      type: object
      properties:
        type:
          type: string
          example: https://quizquail.com/problems/validation-error
        title:
          type: string
          example: Validation Error
        status:
          type: integer
          example: 400
        detail:
          type: string
          example: Request validation failed
        instance:
          type: string
        errors:
          type: array
          items:
            $ref: '#/components/schemas/FieldError'
      required:
        - type
        - title
        - status
    ThemeEffects:
      type: object
      properties:
        backgroundImageOpacity:
          type: number
          minimum: 0
          maximum: 1
          default: 0.4
          description: Opacity of the background image overlay
        backgroundStyle:
          type: string
          enum:
            - blobs
            - aurora
            - gradient_mesh
            - solid
            - noise
          default: blobs
          description: Background animation style
        backgroundBlobCount:
          type: number
          minimum: 0
          maximum: 6
          default: 3
          description: Number of animated background blobs
        backgroundBlobOpacity:
          type: number
          minimum: 0
          maximum: 1
          default: 0.24
          description: Opacity of background blobs
        backgroundAnimationSpeed:
          type: number
          minimum: 0.5
          maximum: 3
          default: 1
          description: Speed multiplier for background animations
        backgroundGradientIntensity:
          type: number
          minimum: 0
          maximum: 1
          default: 0.13
          description: Intensity of background gradient shifts
        backgroundVignetteIntensity:
          type: number
          minimum: 0
          maximum: 1
          default: 0.7
          description: Darkness of edge vignette
        gradientAngle:
          type: number
          minimum: 0
          maximum: 360
          default: 135
          description: Angle of background gradient in degrees
        gradientAnimation:
          type: boolean
          default: true
          description: Whether the gradient animates over time
        backgroundPattern:
          type: string
          enum:
            - none
            - dots
            - grid
            - diagonal
            - hexagons
            - topographic
            - circuit
          default: none
          description: Overlay pattern on the background
        backgroundPatternOpacity:
          type: number
          minimum: 0
          maximum: 1
          default: 0.12
          description: Opacity of the background pattern
        backgroundPatternScale:
          type: number
          minimum: 0.5
          maximum: 2
          default: 1
          description: Scale multiplier for the background pattern
        particleStyle:
          type: string
          enum:
            - none
            - bokeh
            - dust
            - stars
            - bubbles
            - fireflies
            - snow
            - confetti
          default: none
          description: Floating particle effect style
        particleDensity:
          type: number
          minimum: 0
          maximum: 1
          default: 0.3
          description: Density of particles (0 = none, 1 = maximum)
        particleSpeed:
          type: number
          minimum: 0.5
          maximum: 3
          default: 1
          description: Speed of particle movement
        particleColor:
          type: string
          enum:
            - theme
            - white
            - accent
          default: theme
          description: Color source for particles
        optionCardVariant:
          type: string
          enum:
            - standard
            - glass
            - tile
          default: standard
          description: Visual style of answer option cards
        optionCardOpacity:
          type: number
          minimum: 0
          maximum: 1
          default: 0.33
          description: Background opacity of option cards
        optionStripeWidth:
          type: number
          minimum: 0
          maximum: 8
          default: 4
          description: Width of the accent stripe on option cards (px)
        titleLetterSpacing:
          type: string
          pattern: ^-?\d+(\.\d+)?(em|px|rem)$
          default: '-0.02em'
          description: Letter spacing for title text (CSS value)
        textStyle:
          type: string
          enum:
            - solid
            - outline
            - gradient
            - glow
            - shadow
          default: solid
          description: Text rendering style for body text
        titleTextStyle:
          type: string
          enum:
            - solid
            - outline
            - gradient
            - glow
            - shadow
          default: solid
          description: Text rendering style for titles
        textShadowStyle:
          type: string
          enum:
            - none
            - subtle
            - dramatic
            - glow
          default: subtle
          description: Text shadow intensity
        optionFontWeight:
          type: number
          minimum: 400
          maximum: 700
          default: 400
          description: Font weight for option text (400-700)
        frameStyle:
          type: string
          enum:
            - none
            - neon
            - corners
            - scanlines
            - gradient_border
          default: none
          description: Decorative frame around the video
        frameColor:
          type: string
          pattern: ^#[0-9a-fA-F]{6}$
          default: '#FFFFFF'
          description: Color of the frame decoration
        frameOpacity:
          type: number
          minimum: 0
          maximum: 1
          default: 0.5
          description: Opacity of the frame decoration
        introRingCount:
          type: number
          minimum: 0
          maximum: 6
          default: 3
          description: Number of expanding rings on the intro screen
        introParticleCount:
          type: number
          minimum: 0
          maximum: 20
          default: 8
          description: Number of particles on the intro screen
        outroConfettiCount:
          type: number
          minimum: 0
          maximum: 30
          default: 12
          description: Number of confetti pieces on the outro screen
        outroBurstCount:
          type: number
          minimum: 0
          maximum: 6
          default: 3
          description: Number of burst effects on the outro screen
        celebrationStyle:
          type: string
          enum:
            - none
            - pulse
            - confetti
            - burst
            - shimmer
            - flash
          default: pulse
          description: Animation when the correct answer is revealed
        celebrationIntensity:
          type: number
          minimum: 0
          maximum: 1
          default: 0.7
          description: Intensity of the celebration effect
        correctAnswerGlowSize:
          type: number
          minimum: 0
          maximum: 60
          default: 30
          description: Glow radius around the correct answer (px)
        revealSuspenseFrames:
          type: number
          minimum: 15
          maximum: 90
          default: 45
          description: Frames of suspense before answer reveal
        revealDimIntensity:
          type: number
          minimum: 0
          maximum: 0.6
          default: 0.3
          description: How much wrong answers dim during reveal
        urgencyStyle:
          type: string
          enum:
            - none
            - vignette
            - pulse
            - shake
            - border_pulse
          default: vignette
          description: Visual effect when countdown timer is low
        urgencyThreshold:
          type: number
          minimum: 1
          maximum: 10
          default: 3
          description: Seconds remaining to trigger urgency effect
        urgencyColor:
          type: string
          pattern: ^#[0-9a-fA-F]{6}$
          default: '#EF4444'
          description: Color of the urgency effect
        transitionStyle:
          type: string
          enum:
            - fade
            - slide
            - wipe
            - zoom
            - iris
            - flash
          default: fade
          description: Transition animation between screens
        grainOverlay:
          type: string
          enum:
            - none
            - subtle
            - medium
            - heavy
          default: none
          description: Film grain overlay intensity
        grainStyle:
          type: string
          enum:
            - film
            - digital
            - vhs
          default: film
          description: Style of the grain overlay
        audioReactive:
          type: boolean
          default: false
          description: Whether visuals react to audio
        audioReactiveIntensity:
          type: number
          minimum: 0
          maximum: 1
          default: 0.5
          description: Intensity of audio-reactive effects
        audioReactiveBpm:
          type: number
          minimum: 60
          maximum: 200
          default: 120
          description: BPM for audio-reactive sync
    FieldError:
      type: object
      properties:
        field:
          type: string
          example: title
        message:
          type: string
          example: Title is required
        code:
          type: string
          example: too_small
      required:
        - field
        - message
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        API key authentication. Prefix your key with `Bearer ` in the
        Authorization header.


        Keys follow the format `qq_...` and can be scoped to specific
        permissions.

````