---
title: "Predict the deck plan (engines + cost) without rendering"
method: POST
path: "/v1/deck/outline"
tags: ["deck"]
---

# Predict the deck plan (engines + cost) without rendering

`POST /v1/deck/outline`

## Request

- Base URL: `https://api.slideforge.dev`
- URL: `https://api.slideforge.dev/v1/deck/outline`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Free preview of a deck render. Returns per-slide engine and cost: every slide goes through the SSG intent engine at a flat $0.05/slide. Thin briefs carry a `brief_hint` coaching nudge. No render, no wallet charge.

## Request body

- DeckRequest: POST /v1/deck request body.
  - `slides` SlideSpec[]
    - `generate` GenerateSpec: Per-slide brief config within a deck (new explicit format).
      - `brief` string, required
      - `chrome` Chrome: Slide chrome — the frame rendered by render_chrome(). All fields optional. Resolution order: 1. Explicit chrome on request (highest priority) 2. LLM-extracted chrome from brief 3. Deck-level chrome defaults 4. Theme chrome defaults 5. Not rendered (if still None)
        - `title` string, nullable
        - `subtitle` string, nullable
        - `kicker` string, nullable
        - `footer` string, nullable
        - `source` string, nullable
        - `page_number` integer, nullable
        - `classification` string, nullable
      - `name` string, nullable
    - `brief` string
    - `chrome` Chrome: Slide chrome — the frame rendered by render_chrome(). All fields optional. Resolution order: 1. Explicit chrome on request (highest priority) 2. LLM-extracted chrome from brief 3. Deck-level chrome defaults 4. Theme chrome defaults 5. Not rendered (if still None)
      - `title` string, nullable
      - `subtitle` string, nullable
      - `kicker` string, nullable
      - `footer` string, nullable
      - `source` string, nullable
      - `page_number` integer, nullable
      - `classification` string, nullable
    - `name` string, nullable
    - `slide_number` integer, nullable
  - `prompt` string, nullable
  - `slide_count` integer, nullable
  - `audience` string, nullable
  - `focus_area` string, nullable
  - `visual_style` string, nullable
  - `theme_id` string, nullable
  - `mode` string, nullable
  - `enrich` boolean
  - `chrome` Chrome: Slide chrome — the frame rendered by render_chrome(). All fields optional. Resolution order: 1. Explicit chrome on request (highest priority) 2. LLM-extracted chrome from brief 3. Deck-level chrome defaults 4. Theme chrome defaults 5. Not rendered (if still None)
    - `title` string, nullable
    - `subtitle` string, nullable
    - `kicker` string, nullable
    - `footer` string, nullable
    - `source` string, nullable
    - `page_number` integer, nullable
    - `classification` string, nullable
  - `language` string, nullable
  - `name` string, nullable
  - `title` string, nullable
  - `author` string, nullable
  - `model` string, nullable
  - `max_parallel` integer, nullable

## Response `200`

Outline + cost estimate

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/slideforge/apis/slideforge-api.md) · [All operations](https://skmtc.dev/slideforge/apis/slideforge-api/llms.txt) · [OpenAPI document](https://skmtc.dev/slideforge/apis/slideforge-api/revisions/ae698e3d3c00?raw)
