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

# Setting up your first template

> Upload your slide images and let AI Presentations build a narrated presentation from them.

A template is the starting point for everything in AI Presentations. It holds your slides, narration, FAQs, and branding. Once a template is set up, you can generate as many personalized presentations from it as you need — one per homeowner.

## Create a template

From the dashboard, click **New Template** in the top right corner.

A dialog will open with the following fields:

* **Template Name** — give it a clear name you'll recognize, like "Spring Roofing Pitch" or "Solar Q4 2025"
* **Description** — optional, for your own reference
* **Template Context** — describe who this template is for and what it covers. This helps AI Presentations write better narration. For example: *"Residential roofing replacement for storm-damage leads. Audience: homeowners aged 40–65 in the Southeast US."* The more specific, the better.
* **Use Premium Voice AI** — toggle this on if you want higher quality voice generation

## Upload your slide images

Below the template details, you'll see an upload area. Drag your slide images in, or click to browse. PNG, JPG, WebP, and SVG are accepted, up to 10 MB per image.

The order you upload them is the order they'll appear in the presentation — so make sure your slides are in the right sequence before uploading. The number of uploaded slides is shown as you add them.

Once you've added at least one image and filled in the template name, the **Create & Generate** button becomes active. Click it to start.

## While it's generating

AI Presentations will analyze each image, write a narration script, and generate spoken audio. This runs in the background, and you can follow the progress everywhere the template appears:

* **In the editor**, each slide appears in the rail as it finishes — the slide being written shows *Generating…* and the ones behind it show *Queued*. You can review and edit slides as soon as they land, without waiting for the whole template.
* **On the Templates page**, the template card shows generation progress until the job finishes.
* **In the FAQs tab**, AI Presentations writes suggested FAQs from your slides after the last slide completes, and the tab says so while that's running.

A template can't be used to create presentations until generation finishes — a presentation is a permanent snapshot of the template at the moment it's created, so one made from a half-built template would be permanently missing slides. The template picker keeps a generating template disabled and explains why; the API returns a `409` with code `DECK_GENERATING` for the same reason.

If progress stops updating for longer than expected, refresh the page to check again — a quiet stretch usually just means this page stopped hearing about the job, not that it failed.

## Review your slides

The **Slides** tab shows each slide with its generated title, narration script, and audio. Click the edit button on any slide to:

* Update the **Slide Title**
* Edit the **Narration Script** — or use **Use AI to Generate Script** to regenerate it from the image
* Change the **Hero Image** (the background image for that slide)
* Add **Slide Context** to give the AI more guidance for that specific slide
* Click **Regenerate Audio from Script** after making edits to update the spoken audio

Slides can be reordered by dragging them into the order you want.

## Preview your template

Click **Preview** in the editor toolbar to open the template in a new tab and watch it the way a homeowner would. If the narration audio is out of date, AI Presentations regenerates it first and opens the preview once it's ready.

The **Preview** button stays disabled with an *Add a slide to preview* hint until the template has at least one slide. If you open a preview link for a template with no slides, the page tells you to add at least one slide in the editor and open the preview again.

## Add a slide manually

Click **Add Slide** in the deck editor to insert a blank slide. AI Presentations creates the slide immediately with the placeholder title *Untitled slide* and no narration script, so navigating away or switching tabs won't discard it.

Blank slides are surfaced two ways in the editor so they're easy to spot:

* Each rail entry shows a **Needs narration** marker until you save a narration script for that slide.
* A running count of slides needing narration appears beneath the rail.

The marker also applies to product pricing slides added this way. Its narration is derived when you save the slide, so a freshly added product slide starts out silent and clears the marker on the next save.

## Narrating bulk-uploaded slides

Slide images added through the upload area land un-narrated by default. After a bulk upload, the editor opens a wizard that walks the batch one slide at a time, showing the image preview alongside the narration script field and the **Use AI to Generate Script** action.

You can skip any slide in the wizard. The **Needs narration** markers stay on the rail until each script is saved, so skipping the wizard doesn't hide anything.

## Start from a template

Instead of building a deck from scratch, you can start from a published template or duplicate one of your existing decks:

* **Browse the library** — `GET /api/templates/library` returns the catalog of free and premium templates, each with a thumbnail and tier.
* **Preview before you commit** — `GET /api/templates/{deckId}/preview` returns the slide list, sample FAQs, and counts so you can review the contents.
* **Instantiate** — `POST /api/templates/{deckId}/use` deep-copies the template into your organization. The new deck is fully independent — edits to the source template do not propagate. Premium templates require an active subscription.
* **Duplicate one of your decks** — `POST /api/decks/{deckId}/duplicate` copies a deck you already own, including all slides, FAQs, branding, and uploaded images. The duplicate is private and never inherits the source's published or library state.

Both endpoints accept an optional `name` in the request body to override the default copy name. If a name collision occurs, the new deck is auto-renamed (for example, `Spring Pitch (Copy 2)`).

## Import a PowerPoint presentation

If your deck already exists as a PowerPoint file, you can import it in one API call instead of exporting and uploading slide images yourself. `POST /api/decks/import?source=pptx` accepts a `.pptx` file as multipart form data along with a `name` and optional `description`, and returns the created deck with a `201`.

The import creates a ready-to-edit image-based deck:

* Each slide is rendered to a PNG image and becomes a slide in the new deck, in the original order.
* Speaker notes become each slide's editable narration script. The original notes are kept separately, so you can always see what the script started from.
* The response includes an `import.warnings` array for non-fatal issues, such as slides with no speaker notes (`missing_speaker_notes`).

PowerPoint files are limited to 25 MB and 50 slides. Imports are all-or-nothing: if anything fails, no deck is created and the error response tells you why.

The uploaded file and rendered slide images are stored with the deck. Deleting the deck (`DELETE /api/decks/{deckId}`) removes them too — see the API Reference for full request and response shapes.

## Personalization tokens

Narration scripts support tokens that get replaced with the homeowner's real information when a presentation is created. Type `{` in any script field to insert one:

| Token            | Replaced with          |
| ---------------- | ---------------------- |
| `{{first_name}}` | Homeowner's first name |
| `{{last_name}}`  | Homeowner's last name  |
| `{{city}}`       | City                   |
| `{{address}}`    | Street address         |

For example: `"Hi {{first_name}}, I'm reaching out about your home at {{address}}..."`

## Product card pricing

When a product slide's **Content Source** is **Custom**, each product card has its own pricing controls in the **Total Cost** section of the card editor.

* **Price Type** — choose **Single** for one price or **Range** to show a price band. With **Range**, set a **Range %** to expand the price above and below the base amount. For example, a $1,000 price with a 10% range renders as *$900 – \$1,100\*.
* **Pricing Number or Formula** — a static price or a pricing formula. Range and Pay Over Time math is applied after the base price resolves, so both work with formulas too.
* **Pay Over Time Price** — toggle this on to show a monthly payment on the card, calculated from the total price, the dealer's fee, the term in months, and the annual interest rate (APR). When the card is range-typed, the monthly payment renders as a range as well.

Range bounds are rounded to whole dollars and formatted in the deck's currency. The card renders the same everywhere it appears: the editor's live preview, the deck preview link, and homeowner presentations.

If a formula variable has no configured default, previews substitute a placeholder value so a range card still previews in its range format. Presentations created for real homeowners never substitute placeholders; a formula that depends on a roof measurement stays deferred until the measurement arrives, and the range is computed from the resolved price at that point.

These controls only apply to custom cards. When a slide's content source is **Journeys**, the range comes from the journey's configured price range instead, and any manual range settings on the hidden cards are ignored.

## Journey-backed product slides

Product pricing slides can pull their content from a Demand IQ journey so product names, prices, monthly payments, highlights, and images come directly from the live journey instead of being maintained manually. In the product slide editor, set **Content Source** to **Journeys** (the default is **Custom**). AI Presentations detects the product type automatically — there is no profile to pick.

While a slide is set to Journeys, the **Product Cards** section is hidden entirely: journey data fills each product's name, price, description, highlights, and image when the presentation is created, so there is nothing to configure per card. Each card's tier badge (for example, *"Good"* or *"Recommended"*) comes from the label configured on the journey option; options without a configured label show no badge. Switch back to **Custom** to edit the product cards manually again. Fields outside the product cards (narration, CTA copy, supporting imagery) remain editable either way.

The journey block must return at least three product options. The first three map positionally onto the `good`, `better`, and `best` tiers, exactly as the deck-editor preview shows. If the journey returns more than three, the extras render after the tiers in a horizontally scrollable row (with a scrollable pill row on portrait mobile), and homeowners can select any of them — including an extra — as the product carried through to narration, the confirmation modal, and the contract. Only `{{product.good|better|best.*}}` narration tokens are available for the first three tiers; extras are selectable but not individually addressable by tier token. Use `{{product.selected.*}}` to reference whichever card the homeowner picks.

Product data for a slide is available via `GET /api/slides/{slideId}/product-data` and updated via `PUT /api/slides/{slideId}/product-data`. See the API Reference for full request and response shapes.

## Next steps

With your slides in place, set up your branding and FAQs before creating presentations:

* [Branding](/ai-presentations/guides/branding) — your colors, logo, and the landing page homeowners see first
* [FAQs](/ai-presentations/guides/faqs) — pre-built answers to common questions
* [Notifications](/ai-presentations/guides/notifications) — configure automated email delivery and subscribe to presentation events
