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

# Introduction

> AI Presentations is an AI-powered presentation platform with narrated slides, live Q&A, and template management.

AI Presentations by Demand IQ lets you build AI-narrated sales presentations with interactive Q\&A. Upload slide images or create structured templates, and AI Presentations generates narration scripts, synthesizes audio, and delivers a shareable presentation link your prospects can view on any device.

## Key capabilities

* **Template management** — create structured or image-based templates with custom branding, colors, and fonts
* **AI generation** — upload slide images and let GPT-4o extract content, write narration scripts, and generate FAQs automatically
* **Text-to-speech** — narrate every slide with word-level timing for synchronized text highlighting
* **Live Q\&A** — viewers ask questions by voice or text; AI Presentations matches FAQs or generates answers in real time
* **Personalized presentations** — create shareable links tailored to each homeowner with address validation and optional pricing inputs
* **Product pricing** — configure good/better/best product tiers on slides with dynamic pricing formulas; missing inputs are deferred automatically
* **Journey-backed product slides** — set a product slide's content source to Journeys so product names, prices, images, and highlights are populated from the live Demand IQ journey instead of being edited manually. The first three options map onto good/better/best tiers; any additional options render as scrollable extra cards that homeowners can still select for narration and contract flow
* **Knowledge base** — upload company documents to improve AI-generated answers with your specific product and service information
* **Contracts & e-signature** — import contract templates, configure signing requirements, and collect typed signatures during the presentation
* **Automated email delivery** — send the presentation link to homeowners from the deck's configured sender, with delivery and open tracking via SendGrid
* **Notifications** — subscribe to presentation events via webhooks or email to track viewer engagement in real time
* **Roof measurements** — request automated roof measurements for homeowner addresses and poll for results
* **Appointment scheduling** — let viewers book appointments directly from the presentation
* **Voice commands** — detect navigation, audio, and CTA commands from voice or text input during playback

## Authentication

Most API endpoints require a session cookie obtained from `POST /api/auth/login`. The journey ingest endpoint (`POST /api/decks/{deckId}/ingest`) additionally accepts a Bearer JWT in the `Authorization` header for server-to-server callers that don't run in a browser session. Presentation playback endpoints (`/api/qa`, `/api/narration/*`) also accept a `presentationId` for unauthenticated viewer access. Appointment, event tracking, and presentation content endpoints use an HMAC-signed presentation token passed via the `x-presentation-token` header.

For portal integrations, AI Presentations supports SSO via `GET /api/auth/sso?code={authCode}`. The portal redirects users with a short-lived authorization code that is exchanged for an access token server-side. Pass `embedded=1` when running inside an iframe. Pass an optional `theme` parameter (`light` or `dark`) to match the portal appearance on first render. In production, set the `APP_URL` environment variable to the public base URL so that SSO redirects resolve correctly behind a load balancer.

Portal admins with the `DIQAdmin` or `Admin` role can carry a company impersonation into AI Presentations by appending `&spoof={companyId}` to the SSO URL. AI Presentations calls Core's `POST /auth/loginAs/{companyId}` and treats a 200 as the authorization grant. On rejection the user is redirected to `/no-access` rather than the standard SSO error page, so the portal does not retry a request Core will always deny. The deck-picker exchange endpoint (`POST /api/auth/sso/exchange`) accepts the same optional `spoof` field in its JSON body.

When an embedded `DIQAdmin` session opens a deck page that belongs to a different company, such as a portal deep link that carries no company, AI Presentations asks the portal to switch companies instead of rendering the page. It posts a `PRESENTATIONS_SPOOF_REQUIRED` message with the owning company's id to the portal and shows a loading spinner. The portal then re-primes the iframe with `&spoof={companyId}` and the same redirect path, so the second load lands on the same URL scoped to the correct company. This handoff applies only to the `DIQAdmin` role; all other sessions still receive the 404 response from `GET /api/decks/{deckId}`.

## Get started

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/ai-presentations/quickstart">
    Create your first template and presentation in minutes
  </Card>

  <Card title="Guides" icon="book" href="/ai-presentations/guides/deck-types">
    Learn about template types, branding, FAQs, and narration
  </Card>
</CardGroup>
