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

# List decks

> Returns all decks for the authenticated organization, ordered by most recently created.



## OpenAPI

````yaml /openapi.json get /api/decks
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: 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/decks:
    get:
      tags:
        - Decks
      summary: List decks
      description: >-
        Returns all decks for the authenticated organization, ordered by most
        recently created.
      responses:
        '200':
          description: List of decks
          content:
            application/json:
              schema:
                type: object
                properties:
                  decks:
                    type: array
                    items:
                      $ref: '#/components/schemas/DeckSummary'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - sessionCookie: []
components:
  schemas:
    DeckSummary:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        description:
          type: string
          nullable: true
        type:
          type: string
          enum:
            - structured
            - image-based
        isActive:
          type: boolean
        previewImageUrl:
          type: string
          format: uri
          nullable: true
          description: Presigned URL for the first slide image
        previewImageThumbUrl:
          type: string
          format: uri
          nullable: true
          description: >-
            Presigned URL for the 480px WebP thumbnail rendition of the first
            slide, sized for deck and template preview cards. Falls back to the
            full image URL when no thumbnail exists.
        generation:
          $ref: '#/components/schemas/GenerationStatus'
          nullable: true
          description: >-
            The latest unsettled generation job (pending, processing, or
            failed); null once it completed or if the deck was never generated
        firstSlideType:
          type: string
          enum:
            - standard
            - product_pricing_v1
          nullable: true
          description: >-
            Slide type of the deck's first slide, or `null` if the deck has no
            slides. Used by clients to decide whether to render a product
            tier-card preview instead of the hero image.
        firstSlideProductData:
          allOf:
            - $ref: '#/components/schemas/ProductSlideData'
          nullable: true
          description: >-
            Product slide configuration for the deck's first slide when
            `firstSlideType` is `product_pricing_v1`. `null` otherwise.
        brandingColors:
          type: object
          nullable: true
          description: >-
            Subset of the deck's branding palette used to render product slide
            previews. `null` if the deck has no branding configured.
          properties:
            primary:
              type: string
              nullable: true
              example: '#1a73e8'
            neutral:
              type: string
              nullable: true
              example: '#5f6368'
        tags:
          type: array
          items:
            type: string
          description: >-
            Free-form labels stored on the deck metadata. Defaults to an empty
            array.
          default: []
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - id
        - name
        - type
        - isActive
        - tags
        - createdAt
        - updatedAt
    Error:
      type: object
      properties:
        error:
          type: string
      required:
        - error
    GenerationStatus:
      type: object
      description: >-
        A deck generation job. The single-job endpoint (`GET
        /api/decks/{deckId}/generate/status`) adds the row counts and
        timestamps; the deck list and the per-organization poll carry only the
        fields common to both.
      properties:
        jobId:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - pending
            - processing
            - completed
            - failed
        currentSlide:
          type: integer
          nullable: true
          description: >-
            The slide that most recently STARTED processing; completed work is
            currentSlide − 1
        totalSlides:
          type: integer
          nullable: true
          description: 0 until the job flips to processing
        progress:
          type: integer
          description: 0-100, derived from completed slides / totalSlides; 100 once settled
        error:
          type: string
          nullable: true
        slidesCreated:
          type: integer
          description: >-
            Slide rows that exist for the deck right now. This is the signal to
            refresh on: currentSlide marks a slide's start, and the row lands a
            full slide's work later. Single-job endpoint only.
        faqsCreated:
          type: integer
          description: >-
            FAQ rows that exist right now. The job tracks no FAQ state; they are
            written in one batch after the last slide. Single-job endpoint only.
        createdAt:
          type: string
          format: date-time
          description: Single-job endpoint only
        completedAt:
          type: string
          format: date-time
          nullable: true
          description: Single-job endpoint only
      required:
        - jobId
        - status
        - currentSlide
        - totalSlides
        - progress
    ProductSlideData:
      type: object
      description: Good/better/best product pricing tiers for a product pricing slide.
      properties:
        good:
          type: object
          nullable: true
        better:
          type: object
          nullable: true
        best:
          type: object
          nullable: true
        subtitle:
          type: string
          nullable: true
        brandLogo:
          type: string
          nullable: true
          deprecated: true
          description: >-
            Deprecated. The product pricing slide always renders the deck's
            branding logo (set via `PUT /api/decks/{deckId}/branding`). This
            field is still accepted and stored, but the viewer and editor ignore
            it.
        disclaimer:
          type: string
          nullable: true
        defaultSelectedTier:
          type: string
          enum:
            - good
            - better
            - best
          nullable: true
  securitySchemes:
    sessionCookie:
      type: apiKey
      in: cookie
      name: session
      description: Session cookie obtained from `POST /api/auth/login`.

````