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

# Stream the spoken audio for an answer

> Synthesizes an answer that `POST /api/qa` already produced and streams MP3 audio as it is generated, so playback can start before the clip is complete. The response doesn't support byte ranges.

Once the clip has been stored for a cached answer, the same token redirects to the stored file. If synthesis can't start, the endpoint redirects to the default answer clip.

You don't build this URL yourself. Use the `audioUrl` returned by `POST /api/qa` when `audioStreamed` is `true`.

**Authentication**: The sealed token in the `t` query parameter of `QaResponse.audioUrl`. Tokens expire after 6 hours.



## OpenAPI

````yaml /openapi.json get /api/qa/audio
openapi: 3.0.0
info:
  title: AI Presentations API
  version: 1.0.0
  description: >-
    REST API for AI Presentations — an AI-powered presentation platform with
    narrated slides, live Q&A, and deck management.


    **Authentication**: Most endpoints require a session cookie obtained from
    `POST /api/auth/login`. Presentation playback endpoints (`/api/qa`,
    `/api/narration/*`) also accept a `presentationId` for unauthenticated
    viewer access.
  contact:
    name: Demand IQ
    url: https://demand-iq.com
servers:
  - url: https://app.demand-iq.com
    description: Production
  - url: http://localhost:3000
    description: Local development
security: []
tags:
  - name: Decks
    description: Manage presentation decks
  - name: Slides
    description: Manage slides within a deck
  - name: FAQs
    description: Manage pre-built Q&A pairs
  - name: Branding
    description: Colors, logo, and call-to-action configuration
  - name: Q&A
    description: Live question answering and Q&A settings
  - name: Narration
    description: Text-to-speech synthesis
  - name: Presentations
    description: Create and manage personalized presentation instances
  - name: Generation
    description: AI-powered content generation from slide images
  - name: Images
    description: Image upload and management
  - name: Voices
    description: Available TTS voices
  - name: Utility
    description: Health check and diagnostics
  - name: Authentication
    description: Session-based login, logout, and identity
  - name: Company
    description: Organization contact info and knowledge base
  - name: Notifications
    description: Event subscriptions and delivery log
  - name: Contracts
    description: Contract template import and e-signature
  - name: Fonts
    description: Available Google Fonts for branding
  - name: Roof Measurements
    description: Request and track automated roof measurements
  - name: Actions
    description: Voice/text command detection for presentation control
  - name: Appointments
    description: Appointment scheduling for presentation viewers
  - name: Activity
    description: Recent presentation activity feed
  - name: Engagement
    description: Presentation engagement analytics
  - name: Onboarding
    description: >-
      Per-user product onboarding milestones (ENG-641). Milestone endpoints are
      idempotent and are called by the app UI — they should not be treated as
      tenant-integration surface.
paths:
  /api/qa/audio:
    get:
      tags:
        - Q&A
      summary: Stream the spoken audio for an answer
      description: >-
        Synthesizes an answer that `POST /api/qa` already produced and streams
        MP3 audio as it is generated, so playback can start before the clip is
        complete. The response doesn't support byte ranges.


        Once the clip has been stored for a cached answer, the same token
        redirects to the stored file. If synthesis can't start, the endpoint
        redirects to the default answer clip.


        You don't build this URL yourself. Use the `audioUrl` returned by `POST
        /api/qa` when `audioStreamed` is `true`.


        **Authentication**: The sealed token in the `t` query parameter of
        `QaResponse.audioUrl`. Tokens expire after 6 hours.
      parameters:
        - in: query
          name: t
          required: true
          schema:
            type: string
          description: Sealed answer-audio token from `QaResponse.audioUrl`
      responses:
        '200':
          description: MP3 audio, streamed
          content:
            audio/mpeg:
              schema:
                type: string
                format: binary
        '302':
          description: >-
            Redirect to the stored clip for a cached answer, or to
            `/audio/answer-default.mp3` when synthesis can't start
        '401':
          description: Missing, tampered, or expired token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security: []
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
      required:
        - error

````

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