> ## Documentation Index
> Fetch the complete documentation index at: https://docs-slidekit.theduomi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Slide Input

> Understand the JSON structure for single-slide generation, full-deck generation, slide_data, columns, and content blocks.

# Slide Input

Slide input has two layers:

* The **request wrapper** tells the API which template slide or slides to use.
* `slide_data` tells the renderer what content to place into each selected template slide.

Use this page to understand the shape of those objects. For block-specific fields, use the dedicated guides for [Text Blocks](/guides/text-blocks), [Table Blocks](/guides/table-blocks), and [Chart Blocks](/guides/chart-blocks).

## Single-Slide Request

`POST /api/v1/presentations/generate` starts an async job for one logical slide.

```json theme={"dark"}
{
  "template_slide_id": "slide_customer_summary",
  "slide_data": {
    "title": "Customer Health Summary",
    "content": {
      "blocks": [
        {
          "type": "text",
          "text": {
            "bullets": [
              "Revenue beat plan",
              "Gross retention improved"
            ]
          }
        }
      ]
    }
  },
  "options": {
    "auto_paginate_tables": false,
    "textbox_min_font_size": 8
  }
}
```

| Field               | Required | What it does                                                                        |
| ------------------- | -------- | ----------------------------------------------------------------------------------- |
| `template_slide_id` | Yes      | The analyzed template slide to clone and populate                                   |
| `slide_data`        | Yes      | Content and formatting for that slide                                               |
| `options`           | No       | Generation options for this request                                                 |
| `org_name`          | No       | Optional organization override; must match the API key's organization when provided |

## Full-Deck Request

`POST /api/v1/presentations/generate-deck` renders multiple logical slides asynchronously.

```json theme={"dark"}
{
  "slides": [
    {
      "template_slide_id": "slide_cover",
      "slide_data": {
        "title": "Q2 2026 Portfolio Review",
        "subtitle": "Investment Committee Draft"
      }
    },
    {
      "template_slide_id": "slide_customer_table",
      "slide_data": {
        "title": "Customer Health Summary",
        "content": {
          "blocks": [
            {
              "type": "table",
              "table": {
                "table": {
                  "rows": [
                    {
                      "is_header": true,
                      "cells": [
                        { "value": "Customer" },
                        { "value": "Health" }
                      ]
                    },
                    {
                      "cells": [
                        { "value": "Acme Corp" },
                        { "value": "Healthy" }
                      ]
                    }
                  ]
                }
              }
            },
            {
              "type": "text",
              "text": {
                "header": "Commentary",
                "bullets": [
                  "Expansion-ready accounts should move into pipeline review"
                ]
              }
            }
          ]
        }
      },
      "options": {
        "auto_paginate_tables": false,
        "table_min_font_size": 8,
        "textbox_min_font_size": 8
      }
    },
    {
      "template_slide_id": "slide_chart",
      "slide_data": {
        "title": "Renewal Outlook",
        "content": {
          "blocks": [
            {
              "type": "chart",
              "chart": {
                "chart_type": "stacked_column",
                "categories": ["Q2", "Q3", "Q4"],
                "series": [
                  { "name": "Committed", "values": [18.2, 21.4, 24.1] },
                  { "name": "At risk", "values": [2.1, 3.4, 2.8] }
                ]
              }
            }
          ]
        }
      }
    }
  ],
  "options": {
    "show_slide_numbers": true,
    "footer_text": "Confidential",
    "table_min_font_size": 8,
    "textbox_min_font_size": 8
  }
}
```

| Field                        | Required | What it does                                                                        |
| ---------------------------- | -------- | ----------------------------------------------------------------------------------- |
| `slides`                     | Yes      | Ordered list of logical slides to generate                                          |
| `slides[].template_slide_id` | Yes      | Template slide for that logical slide                                               |
| `slides[].slide_data`        | Yes      | Content and formatting for that logical slide                                       |
| `slides[].options`           | No       | Per-slide rendering options for pagination and fitting                              |
| `options`                    | No       | Deck-level defaults, plus deck-wide footer and slide-number settings                |
| `org_name`                   | No       | Optional organization override; must match the API key's organization when provided |

Slides appear in the generated deck in the same order as the `slides` array. A logical slide can still create more than one output slide when table-only pagination is enabled.

<Note>
  For rendering controls such as `auto_paginate_tables`, `allow_textbox_reposition`, `table_min_font_size`, and `textbox_min_font_size`, a slide-level `options` object replaces the deck-level rendering options for that slide. Omitted fields fall back to `GenerationOptions` defaults, not deck-level values. Footer and slide-number settings are applied deck-wide from top-level `options`.
</Note>

## `slide_data` Shape

`slide_data` is the reusable object used inside both single-slide and deck requests.

```json theme={"dark"}
{
  "title": "Slide title",
  "subtitle": "Optional subtitle",
  "footer": "Optional footer",
  "footnote": "Optional source note",
  "content": {
    "blocks": []
  },
  "slide_format": {}
}
```

| Field          | Required | What it populates                                                                                 |
| -------------- | -------- | ------------------------------------------------------------------------------------------------- |
| `title`        | No       | Main slide title placeholder                                                                      |
| `subtitle`     | No       | Subtitle placeholder; can fall back to a body placeholder on content slides                       |
| `header`       | No       | Accepted by the schema for header-area text; not routed to a placeholder by the standard renderer |
| `footer`       | No       | Footer-area text when the template has a matching region                                          |
| `footnote`     | No       | A textbox containing `footnote_placeholder` or `footnote` marker text                             |
| `content`      | No       | Main content blocks for the slide                                                                 |
| `slide_format` | No       | Formatting overrides for title, subtitle, body, and textbox text                                  |

<Note>
  Use `title`, `subtitle`, `footer`, `footnote`, or a `text` block for text you need rendered. Top-level `header` is accepted by `SlideDataInput`, but current standard generation does not populate it into a template placeholder.
</Note>

## Content Columns

For standard single-column layouts, `content` is one column object.

```json theme={"dark"}
{
  "content": {
    "blocks": [
      { "type": "text", "text": { "bullets": ["Point 1", "Point 2"] } }
    ]
  }
}
```

For supported two-column table layouts, `content` is an array of two column objects.

```json theme={"dark"}
{
  "content": [
    {
      "header": "Left side",
      "blocks": [
        { "type": "table", "table": { "table": { "rows": [] } } }
      ]
    },
    {
      "header": "Right side",
      "blocks": [
        { "type": "chart", "chart": { "categories": [], "series": [] } }
      ]
    }
  ]
}
```

Each column must have a non-empty `blocks` array. The optional column `header` is used by two-column templates with textboxes marked `LHS_header` and `RHS_header`; `LHS` means left-hand side and `RHS` means right-hand side.

For the supported block combinations, see [Presentation Generation](/guides/presentation-generation#1-supported-layouts).

## Content Blocks

Each block has a `type` and a matching payload field.

| `type`   | Required matching field | Details                                                |
| -------- | ----------------------- | ------------------------------------------------------ |
| `text`   | `text`                  | [Text Blocks](/guides/text-blocks)                     |
| `table`  | `table`                 | [Table Blocks](/guides/table-blocks)                   |
| `chart`  | `chart`                 | [Chart Blocks](/guides/chart-blocks)                   |
| `agenda` | `agenda`                | [Agenda Blocks](#agenda-blocks)                        |
| `image`  | `image`                 | Reserved in the schema; not implemented for generation |

The block `type` must match the payload field. For example, `type: "table"` requires a `table` field.

```json theme={"dark"}
{
  "type": "table",
  "table": {
    "table": {
      "rows": []
    }
  }
}
```

The nested `table.table.rows` path is intentional: the outer `table` is the content block payload, and the inner `table` is the actual table data.

## Agenda Blocks

Agenda blocks populate an agenda template slide from a list of section labels and an optional active section.

```json theme={"dark"}
{
  "type": "agenda",
  "agenda": {
    "sections": [
      "Portfolio snapshot",
      "Customer health",
      "Renewal outlook",
      "Action plan"
    ],
    "active_index": 1,
    "active_font_color": "#FFFFFF",
    "active_bold": true,
    "active_underline": true
  }
}
```

| Field               | Required | What it does                                                         |
| ------------------- | -------- | -------------------------------------------------------------------- |
| `sections`          | Yes      | Agenda labels; must contain at least one item                        |
| `active_index`      | No       | Zero-based index of the active section; omit for no active highlight |
| `active_font_color` | No       | Hex color for the active section text                                |
| `active_bold`       | No       | Whether the active section text is bold; defaults to `true`          |
| `active_underline`  | No       | Whether the active section text is underlined; defaults to `true`    |

Use agenda blocks with agenda template slides that contain the expected agenda table and numbered oval shapes.

## Formatting

`slide_format` applies slide-level text formatting overrides.

```json theme={"dark"}
{
  "slide_format": {
    "title": { "font_name": "Arial", "font_size": 28, "bold": true },
    "subtitle": { "font_size": 18, "italic": true },
    "body": { "font_size": 14 },
    "textbox": {
      "header": { "font_size": 12, "bold": true },
      "text": { "font_size": 10 },
      "bullets": { "font_size": 10 }
    }
  }
}
```

Formatting support varies by surface. For block-specific formatting behavior, use the dedicated block pages.

## Common Gotchas

* Run template analysis first so you have valid `template_slide_id` values.
* `content.blocks` must be non-empty when `content` is provided.
* A block's `type` must have the matching payload field.
* Table-cell text is not a `text` block; it belongs inside table cell `value`.
* Chart blocks support bar and column chart types only.
* If table-only pagination creates continuation slides, later output slide indexes can shift for chart updates.

## Related Guides

<CardGroup cols={3}>
  <Card title="Presentation Generation" icon="file-powerpoint" href="/guides/presentation-generation">
    Generate one slide or a full deck.
  </Card>

  <Card title="Table Blocks" icon="table" href="/guides/table-blocks">
    Author table rows, cells, formatting, and pagination.
  </Card>

  <Card title="Chart Blocks" icon="chart-column" href="/guides/chart-blocks">
    Author bar and column charts.
  </Card>

  <Card title="Text Blocks" icon="text" href="/guides/text-blocks">
    Author textbox sections, paragraphs, and bullets.
  </Card>

  <Card title="Layout & Rendering Controls" icon="sliders" href="/guides/generation-options">
    Choose compatible layouts and configure pagination, fitting, footers, and slide numbers.
  </Card>

  <Card title="Chart Updates" icon="refresh-cw" href="/guides/chart-updates">
    Refresh chart data in existing decks.
  </Card>
</CardGroup>
