Skip to main content

Documentation Index

Fetch the complete documentation index at: https://duomi.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

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, Table Blocks, and Chart Blocks.

Single-Slide Request

POST /api/v1/presentations/generate starts an async job for one logical slide.
{
  "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
  }
}
FieldRequiredWhat it does
template_slide_idYesThe analyzed template slide to clone and populate
slide_dataYesContent and formatting for that slide
optionsNoGeneration options for this request
org_nameNoOptional 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.
{
  "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
  }
}
FieldRequiredWhat it does
slidesYesOrdered list of logical slides to generate
slides[].template_slide_idYesTemplate slide for that logical slide
slides[].slide_dataYesContent and formatting for that logical slide
slides[].optionsNoPer-slide rendering options for pagination and fitting
optionsNoDeck-level defaults, plus deck-wide footer and slide-number settings
org_nameNoOptional 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.
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.

slide_data Shape

slide_data is the reusable object used inside both single-slide and deck requests.
{
  "title": "Slide title",
  "subtitle": "Optional subtitle",
  "footer": "Optional footer",
  "footnote": "Optional source note",
  "content": {
    "blocks": []
  },
  "slide_format": {}
}
FieldRequiredWhat it populates
titleNoMain slide title placeholder
subtitleNoSubtitle placeholder; can fall back to a body placeholder on content slides
headerNoAccepted by the schema for header-area text; not routed to a placeholder by the standard renderer
footerNoFooter-area text when the template has a matching region
footnoteNoA textbox containing footnote_placeholder or footnote marker text
contentNoMain content blocks for the slide
slide_formatNoFormatting overrides for title, subtitle, body, and textbox text
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.

Content Columns

For standard single-column layouts, content is one column object.
{
  "content": {
    "blocks": [
      { "type": "text", "text": { "bullets": ["Point 1", "Point 2"] } }
    ]
  }
}
For supported two-column table layouts, content is an array of two column objects.
{
  "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.

Content Blocks

Each block has a type and a matching payload field.
typeRequired matching fieldDetails
texttextText Blocks
tabletableTable Blocks
chartchartChart Blocks
agendaagendaAgenda Blocks
imageimageReserved in the schema; not implemented for generation
The block type must match the payload field. For example, type: "table" requires a table field.
{
  "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.
{
  "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
  }
}
FieldRequiredWhat it does
sectionsYesAgenda labels; must contain at least one item
active_indexNoZero-based index of the active section; omit for no active highlight
active_font_colorNoHex color for the active section text
active_boldNoWhether the active section text is bold; defaults to true
active_underlineNoWhether 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.
{
  "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.

Presentation Generation

Generate one slide or a full deck.

Table Blocks

Author table rows, cells, formatting, and pagination.

Chart Blocks

Author bar and column charts.

Text Blocks

Author textbox sections, paragraphs, and bullets.

Layout & Rendering Controls

Choose compatible layouts and configure pagination, fitting, footers, and slide numbers.

Chart Updates

Refresh chart data in existing decks.