# Demand IQ Docs - [Introduction](https://developer.demand-iq.com/ai-presentations/introduction.md): AI Presentations is an AI-powered presentation platform with narrated slides, live Q&A, and template management. - [Quickstart](https://developer.demand-iq.com/ai-presentations/quickstart.md): Go from zero to a live, personalized AI presentation in minutes. - [API Quickstart](https://developer.demand-iq.com/ai-presentations/api-quickstart.md): Create and send a personalized presentation to a homeowner using the REST API. - [Setting up your first template](https://developer.demand-iq.com/ai-presentations/guides/deck-types.md): Upload your slide images and let AI Presentations build a narrated presentation from them. - [Get a Presentation URL via API](https://developer.demand-iq.com/ai-presentations/guides/presentation-url-api.md): Send a prospect ID or prospect details to the API and get back a personalized presentation link — from your own code or a no-code tool like Zapier. - [Branding](https://developer.demand-iq.com/ai-presentations/guides/branding.md): Make presentations look like they came from you — your colors, logo, and messaging throughout. - [FAQs](https://developer.demand-iq.com/ai-presentations/guides/faqs.md): Pre-build answers to common questions so homeowners always get a consistent, on-brand response. - [Narration & Voices](https://developer.demand-iq.com/ai-presentations/guides/narration.md): Choose the voice for your presentations and keep narration up to date as you edit slides. - [Contracts & e-signature](https://developer.demand-iq.com/ai-presentations/guides/contracts.md): Import contract templates, configure signing requirements, and collect typed signatures during presentations. - [Notifications](https://developer.demand-iq.com/ai-presentations/guides/notifications.md): Subscribe to presentation events via webhooks or email, send presentation emails to homeowners, and track opens in real time. - [Knowledge base](https://developer.demand-iq.com/ai-presentations/guides/knowledge-base.md): Upload company documents and configure your AI profile to improve how AI Presentations answers customer questions. - [List recent activity](https://developer.demand-iq.com/api-reference/activity/list-recent-activity.md): Returns the 10 most recent presentation events for your organization, enriched with the homeowner name, address, and template ID for deep-linking. - [List decks](https://developer.demand-iq.com/api-reference/decks/list-decks.md): Returns all decks for the authenticated organization, ordered by most recently created. - [Create a deck](https://developer.demand-iq.com/api-reference/decks/create-a-deck.md) - [Import a presentation as a deck](https://developer.demand-iq.com/api-reference/decks/import-a-presentation-as-a-deck.md): Imports a slide presentation and creates a fully persisted image-based deck from it. Each slide is rendered to a PNG image, and speaker notes become the editable narration script for that slide (the original notes are retained separately). The original source file and rendered slide images are store… - [Get a deck](https://developer.demand-iq.com/api-reference/decks/get-a-deck.md): Returns the full deck including slides, FAQs, branding, and Q&A settings. - [Update a deck](https://developer.demand-iq.com/api-reference/decks/update-a-deck.md) - [Delete a deck](https://developer.demand-iq.com/api-reference/decks/delete-a-deck.md): Permanently deletes a deck and all associated slides, FAQs, and branding. For decks created via `POST /api/decks/import`, the stored source file and rendered slide images are removed as well. - [Get intro page config](https://developer.demand-iq.com/api-reference/decks/get-intro-page-config.md): Returns the intro page configuration for a deck, including the background image, headline, and CTA button label. - [Upsert intro page config](https://developer.demand-iq.com/api-reference/decks/upsert-intro-page-config.md): Creates or updates the intro page for a deck. Enabling an intro page switches the deck to lazy generation mode. - [Delete intro page config](https://developer.demand-iq.com/api-reference/decks/delete-intro-page-config.md) - [Poll generation status for every deck](https://developer.demand-iq.com/api-reference/generation/poll-generation-status-for-every-deck.md): The latest unsettled generation job for every deck in the organization, keyed by deck id. Completed jobs are omitted, so a deck absent from the map has nothing running. Cheap enough to poll while a template is being built — unlike `GET /api/decks`, it carries no preview URLs. - [Start AI generation from images](https://developer.demand-iq.com/api-reference/generation/start-ai-generation-from-images.md): Accepts uploaded slide images, runs them through GPT-4o Vision to extract content, generates narration scripts, and synthesizes audio. Returns a job ID — poll `/api/decks/{deckId}/generate/status` for progress. - [Poll generation status](https://developer.demand-iq.com/api-reference/generation/poll-generation-status.md) - [Analyze a slide image and generate content](https://developer.demand-iq.com/api-reference/generation/analyze-a-slide-image-and-generate-content.md): Uses AI vision to analyze a slide image and generate a narration script with key points. Optionally uses deck context and slide-specific context to improve the output. - [Generate preview audio](https://developer.demand-iq.com/api-reference/generation/generate-preview-audio.md): Generates preview audio for all slides in a deck that have narration scripts but no audio yet. Useful for previewing a deck before sending presentations. - [Check preview audio status](https://developer.demand-iq.com/api-reference/generation/check-preview-audio-status.md): Returns the current preview audio generation status for a deck, including how many slides need preview generation. - [List slides](https://developer.demand-iq.com/api-reference/slides/list-slides.md) - [Create a slide](https://developer.demand-iq.com/api-reference/slides/create-a-slide.md) - [Reorder slides](https://developer.demand-iq.com/api-reference/slides/reorder-slides.md) - [Update a slide](https://developer.demand-iq.com/api-reference/slides/update-a-slide.md) - [Delete a slide](https://developer.demand-iq.com/api-reference/slides/delete-a-slide.md) - [Get product pricing data](https://developer.demand-iq.com/api-reference/slides/get-product-pricing-data.md): Returns the good/better/best product pricing tiers for a product pricing slide. - [Upsert product pricing data](https://developer.demand-iq.com/api-reference/slides/upsert-product-pricing-data.md): Sets product pricing tiers for a slide. The slide type is automatically set to `product_pricing_v1`. - [Remove product pricing data](https://developer.demand-iq.com/api-reference/slides/remove-product-pricing-data.md): Removes product data and resets the slide type to `standard`. - [List FAQs](https://developer.demand-iq.com/api-reference/faqs/list-faqs.md) - [Create a FAQ](https://developer.demand-iq.com/api-reference/faqs/create-a-faq.md): Creates a FAQ and automatically generates TTS audio for the answer. - [Update a FAQ](https://developer.demand-iq.com/api-reference/faqs/update-a-faq.md) - [Delete a FAQ](https://developer.demand-iq.com/api-reference/faqs/delete-a-faq.md) - [Get branding](https://developer.demand-iq.com/api-reference/branding/get-branding.md) - [Upsert branding](https://developer.demand-iq.com/api-reference/branding/upsert-branding.md): Creates or replaces the branding configuration for a deck. - [Get Q&A settings](https://developer.demand-iq.com/api-reference/q&a/get-q&a-settings.md): Returns the customizable resume and transition prompts for the deck's Q&A experience. - [Update Q&A settings](https://developer.demand-iq.com/api-reference/q&a/update-q&a-settings.md) - [Answer a question](https://developer.demand-iq.com/api-reference/q&a/answer-a-question.md): Answers a viewer question. Checks FAQs first (exact then semantic match at >= 0.6 confidence), falls back to GPT-4o with slide context. Returns answer text plus synthesized audio. - [Classify viewer intent after Q&A](https://developer.demand-iq.com/api-reference/q&a/classify-viewer-intent-after-q&a.md): Uses AI (with regex fallback) to classify a viewer's natural-language response during a Q&A pause. Returns whether the viewer wants to continue the presentation, go back to the previous slide, or ask another question. - [List presentations](https://developer.demand-iq.com/api-reference/presentations/list-presentations.md): Returns all non-deleted presentations created from this deck. - [Create a presentation](https://developer.demand-iq.com/api-reference/presentations/create-a-presentation.md): Creates a personalized presentation. Provide `homeowner`, `prospect_id`, or both — at least one is required. With only `homeowner`, a new prospect is created from it. With only `prospect_id`, homeowner data is fetched from that prospect's journey. With both, the supplied homeowner data is used as-is… - [Delete a presentation](https://developer.demand-iq.com/api-reference/presentations/delete-a-presentation.md): Soft-deletes a presentation (sets `deletedAt`). The shareable URL stops working immediately. - [Update a presentation](https://developer.demand-iq.com/api-reference/presentations/update-a-presentation.md): Partial update for homeowner data, voice settings, language, or price inputs. - [Get presentation status](https://developer.demand-iq.com/api-reference/presentations/get-presentation-status.md): Returns the current processing status and slide readiness. - [Start a presentation](https://developer.demand-iq.com/api-reference/presentations/start-a-presentation.md): Triggers lazy generation when a viewer clicks the CTA on the intro page. Safe to call multiple times — duplicate generation requests are ignored. - [Get presentation slides and Q&A settings](https://developer.demand-iq.com/api-reference/presentations/get-presentation-slides-and-q&a-settings.md): Returns the slide payload and Q&A settings for a presentation. The presentation viewer fetches this behind the intro or loading screen so the initial page load stays small. Requires an `x-presentation-token` scoped to this presentation. Expired tokens are rejected with `401` — reload the presentatio… - [Get product selections](https://developer.demand-iq.com/api-reference/presentations/get-product-selections.md): Returns all product tier selections the viewer has made during the presentation. - [Save a product selection](https://developer.demand-iq.com/api-reference/presentations/save-a-product-selection.md): Saves a product tier selection for a specific slide during the presentation. - [Record a presentation event](https://developer.demand-iq.com/api-reference/presentations/record-a-presentation-event.md): Ingests interaction events from the presentation viewer (opens, slide views, CTA clicks). Authenticated via an HMAC token in the request body. Every slide exit is recorded: `slide_viewed` accepts an optional `skipped` flag for views under the 2-second skip threshold, and `slide_viewed_batch` submits… - [Refresh an events token](https://developer.demand-iq.com/api-reference/presentations/refresh-an-events-token.md): Exchanges an existing presentation token (which may be expired up to 7 days) for a fresh HMAC token. Used by the presentation viewer to maintain event tracking authentication. Rate-limited to 10 requests per minute per presentation. - [Synthesize narration for one slide](https://developer.demand-iq.com/api-reference/narration/synthesize-narration-for-one-slide.md): Generates TTS audio for a slide script. Results are cached per session. - [Synthesize narration for multiple slides](https://developer.demand-iq.com/api-reference/narration/synthesize-narration-for-multiple-slides.md): Batch TTS generation. Per-slide failures return a fallback audio URL rather than failing the whole batch. - [Synthesize resume narration](https://developer.demand-iq.com/api-reference/narration/synthesize-resume-narration.md): Generates the spoken bridge from Q&A back into the presentation, using the deck's configured transition prompt. - [Synthesize narration for a slide](https://developer.demand-iq.com/api-reference/narration/synthesize-narration-for-a-slide.md): Generates TTS audio for a single slide script. Requires an authenticated session. Use `/api/narration/single` for session-based caching or `/api/narration/batch` for multiple slides. - [Synthesize Q&A prompt audio](https://developer.demand-iq.com/api-reference/narration/synthesize-q&a-prompt-audio.md): Generates TTS audio for Q&A transition or resume prompts. Uses the deck's configured voice and prompt settings. - [Generate a Q&A resume prompt](https://developer.demand-iq.com/api-reference/narration/generate-a-q&a-resume-prompt.md): Returns the configured resume prompt text for a deck, along with pre-generated audio if available. Falls back to a default prompt when no deck-specific settings exist. - [List images](https://developer.demand-iq.com/api-reference/images/list-images.md): Returns all uploaded images for the authenticated organization. - [Upload an image](https://developer.demand-iq.com/api-reference/images/upload-an-image.md): Uploads and optimizes an image (Sharp: max 1920px width; JPEG quality 85, or WebP quality 80 when `format=webp`). Returns the S3 key and a presigned URL. - [Delete an image](https://developer.demand-iq.com/api-reference/images/delete-an-image.md): Permanently removes the image, its thumbnail rendition and its database row. Refused with 409 while any deck or presentation still references the key; clear the reference first. - [List available voices](https://developer.demand-iq.com/api-reference/voices/list-available-voices.md): Returns a curated list of voices suitable for sales presentations. - [Health check](https://developer.demand-iq.com/api-reference/utility/health-check.md): Returns `{ ok: true }` if the service is running. - [Validate an address](https://developer.demand-iq.com/api-reference/utility/validate-an-address.md): Validates a physical address using geocoding. Returns formatted address, coordinates, and normalized components. - [Log in](https://developer.demand-iq.com/api-reference/authentication/log-in.md): Authenticates with email and password. Returns user and organization info and sets a session cookie. Rate-limited to prevent brute-force attacks. - [Log out](https://developer.demand-iq.com/api-reference/authentication/log-out.md): Revokes the current session and clears the session cookie. - [Get current user](https://developer.demand-iq.com/api-reference/authentication/get-current-user.md): Returns the authenticated user's identity and organization. - [Portal SSO via auth code exchange](https://developer.demand-iq.com/api-reference/authentication/portal-sso-via-auth-code-exchange.md): Exchanges a short-lived authorization code for an access token via the Core API, creates a new session, and redirects to the requested path. Used by the portal to embed AI Presentations in an iframe. - [Portal SSO token-bearer exchange](https://developer.demand-iq.com/api-reference/authentication/portal-sso-token-bearer-exchange.md): Token-bearer variant of the SSO flow for cross-origin clients (for example, the portal calling AI Presentations APIs from the browser). - [CORS preflight for the SSO exchange](https://developer.demand-iq.com/api-reference/authentication/cors-preflight-for-the-sso-exchange.md): Returns `204 No Content` with CORS headers when the `Origin` is allowed, or `403 Forbidden` when it is not. - [Get company contact info](https://developer.demand-iq.com/api-reference/company/get-company-contact-info.md): Returns the organization's contact details used in contracts and branding. - [Update company contact info](https://developer.demand-iq.com/api-reference/company/update-company-contact-info.md) - [Mark the welcome wizard as seen](https://developer.demand-iq.com/api-reference/company/mark-the-welcome-wizard-as-seen.md): Records that this organization deliberately exited the first-time welcome wizard by saving or explicitly skipping the confirm-info step. Idempotent — the timestamp is written only on the first successful call (subsequent calls preserve the original value via `COALESCE`). Merely viewing the welcome s… - [Get knowledge base profile](https://developer.demand-iq.com/api-reference/company/get-knowledge-base-profile.md): Returns the company's knowledge base profile that guides how the AI answers customer questions. - [Update knowledge base profile](https://developer.demand-iq.com/api-reference/company/update-knowledge-base-profile.md): Updates the company tagline, about text, trust signals, service coverage, and answer style used by the AI. - [List knowledge base documents](https://developer.demand-iq.com/api-reference/company/list-knowledge-base-documents.md): Returns all uploaded knowledge base documents for the organization, with usage metadata. - [Initiate document upload](https://developer.demand-iq.com/api-reference/company/initiate-document-upload.md): Validates the file and returns a presigned S3 URL for direct upload. Call `/api/company/kb/documents/complete` after the upload finishes. - [Complete document upload](https://developer.demand-iq.com/api-reference/company/complete-document-upload.md): Marks a document as uploaded after the client finishes uploading to S3. Triggers background processing (text extraction, chunking, and embedding). - [Get a knowledge base document](https://developer.demand-iq.com/api-reference/company/get-a-knowledge-base-document.md) - [Delete a knowledge base document](https://developer.demand-iq.com/api-reference/company/delete-a-knowledge-base-document.md): Removes the document from S3 and the database. Associated chunks are deleted automatically. - [Import a contract document](https://developer.demand-iq.com/api-reference/contracts/import-a-contract-document.md): Uploads a contract document (PDF or Word) and uses AI to analyze the full document for template conversion. Legacy Word files (.doc) are converted to .docx automatically before analysis. Returns a markdown template with variable placeholders, the list of detected variables, and a one-sentence summar… - [List action configs](https://developer.demand-iq.com/api-reference/contracts/list-action-configs.md): Returns all action configurations (contract templates) for a deck. - [Create an action config](https://developer.demand-iq.com/api-reference/contracts/create-an-action-config.md): Creates a new contract template or action configuration for a deck. - [Get an action config](https://developer.demand-iq.com/api-reference/contracts/get-an-action-config.md) - [Update an action config](https://developer.demand-iq.com/api-reference/contracts/update-an-action-config.md) - [Delete an action config](https://developer.demand-iq.com/api-reference/contracts/delete-an-action-config.md) - [Get contract for signing](https://developer.demand-iq.com/api-reference/contracts/get-contract-for-signing.md): Returns the contract template, company branding, and product data needed to render the signing view. Requires an `x-presentation-token` scoped to this presentation, matching the sibling `events` and `appointment` routes. Obtain the token from `POST /api/presentations/{presentationId}/events-token`. - [Sign a contract](https://developer.demand-iq.com/api-reference/contracts/sign-a-contract.md): Submits a contract signature. Validates the typed signature against the customer name, resolves the template with variables, and creates an audit-trailed signed document. Requires an `x-presentation-token` scoped to this presentation, matching the sibling `events` and `appointment` routes. Obtain th… - [List notification subscriptions](https://developer.demand-iq.com/api-reference/notifications/list-notification-subscriptions.md): Returns all notification subscriptions for the organization. - [Create a notification subscription](https://developer.demand-iq.com/api-reference/notifications/create-a-notification-subscription.md): Subscribes to an event type via a delivery channel (webhook, email, or console). - [Get a notification subscription](https://developer.demand-iq.com/api-reference/notifications/get-a-notification-subscription.md) - [Update a notification subscription](https://developer.demand-iq.com/api-reference/notifications/update-a-notification-subscription.md) - [Delete a notification subscription](https://developer.demand-iq.com/api-reference/notifications/delete-a-notification-subscription.md) - [List event log](https://developer.demand-iq.com/api-reference/notifications/list-event-log.md): Returns a paginated, filterable log of all events for the organization. `email.sent` entries include a top-level `recipientEmail` field resolved from the delivery attempt; event payloads themselves carry identifiers only, never email addresses. Entries older than 90 days stay in the log with `archiv… - [List available fonts](https://developer.demand-iq.com/api-reference/fonts/list-available-fonts.md): Returns a list of available Google Fonts for use in deck branding. Results are cached for 24 hours. - [Get available appointment slots](https://developer.demand-iq.com/api-reference/appointments/get-available-appointment-slots.md): Returns available appointment time slots grouped by date, along with any existing appointment for the presentation. Authenticated via a presentation token. Rate-limited to 30 requests per minute. - [Book an appointment](https://developer.demand-iq.com/api-reference/appointments/book-an-appointment.md): Books an appointment for a presentation viewer. Validates the time slot is still available and creates the appointment. Rate-limited to 10 requests per minute. - [Request roof measurements](https://developer.demand-iq.com/api-reference/roof-measurements/request-roof-measurements.md): Initiates an automated roof measurement request for a homeowner address. The address is validated before submission. Poll `/api/roof-measurements/{requestId}/status` for results. - [Get roof measurement status](https://developer.demand-iq.com/api-reference/roof-measurements/get-roof-measurement-status.md): Returns the current status and results of a roof measurement request. Poll this endpoint until the status reaches a terminal state (`completed`, `failed`, `timed_out`, `cancelled`, or `skipped`). - [Cancel a roof measurement request](https://developer.demand-iq.com/api-reference/roof-measurements/cancel-a-roof-measurement-request.md): Cancels or skips an in-progress roof measurement request. Use `cancel` to abort entirely or `skip` to mark it as skipped and proceed without measurements. - [Detect a voice or text command](https://developer.demand-iq.com/api-reference/actions/detect-a-voice-or-text-command.md): Parses natural-language input (from voice or text) to detect presentation control commands such as navigation, audio control, and CTA actions. Rate-limited to 10 requests per minute per IP and presentation. - [Record a presentations onboarding completion or dismissal](https://developer.demand-iq.com/api-reference/onboarding/record-a-presentations-onboarding-completion-or-dismissal.md): Records that the current user completed or dismissed the presentations onboarding modal (ENG-641; versioned in ENG-636). The server records the acknowledged content version (`CURRENT_ONBOARDING_VERSION`, currently `2`) on the user's row and returns the full updated `TourState` so callers can write i… ## OpenAPI Specs - [openapi](/ai-presentations/openapi.json) - [openapi](/openapi.json)