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

# Text Blocks

> Author slide text, textbox sections, paragraphs, bullets, and text-block formatting for generated PowerPoint slides.

# Text Blocks

Use a text block when the template slide contains a textbox region and your request needs to fill it with a heading, paragraph, bullet list, or a combination of those elements. The template supplies placement and default styling. The payload supplies the text content and optional text-block formatting.

## Text Surfaces

There are three places text can appear in a generation request.

| Surface          | Payload location                                    | Use                                                   |
| ---------------- | --------------------------------------------------- | ----------------------------------------------------- |
| Slide-level text | `title`, `subtitle`, `header`, `footer`, `footnote` | Populate standard slide placeholders                  |
| Text blocks      | `content.blocks[].text`                             | Populate textbox regions with section text or bullets |
| Table-cell text  | `content.blocks[].table.table.rows[].cells[].value` | Put text, paragraphs, or bullets inside table cells   |

Table-cell text is part of a [Table Block](/guides/table-blocks). It is not a `type: "text"` block, even when a table cell contains multiple paragraphs or bullets.

## Basic Shape

Inside `slide_data.content.blocks`, a text block looks like this:

```json theme={"dark"}
{
  "type": "text",
  "text": {
    "header": "Management Focus",
    "text": "The renewal plan is stable, but the team should prioritize accounts with sponsor gaps.",
    "bullets": [
      "Confirm executive sponsors before renewal conversations",
      "Pull forward adoption reviews for at-risk accounts",
      "Use expansion-ready accounts for Q2 pipeline creation"
    ]
  }
}
```

A text block can use any combination of `header`, `text`, and `bullets`.

| Shape                         | Result             |
| ----------------------------- | ------------------ |
| `header` only                 | Section heading    |
| `text` only                   | Paragraph          |
| `bullets` only                | Bullet list        |
| `header` + `bullets`          | Titled bullet list |
| `header` + `text` + `bullets` | Full text section  |

Text renders in this order: `header`, then `text`, then `bullets`.

## Bullets

`bullets` is an array of strings. Each string renders as one bullet paragraph in the matching textbox region.

```json theme={"dark"}
{
  "type": "text",
  "text": {
    "bullets": [
      "Revenue beat plan",
      "Gross retention improved",
      "Expansion pipeline increased"
    ]
  }
}
```

For bullets inside a table cell, use the table-cell value shape documented in [Table Blocks](/guides/table-blocks#cell-values).

## Text Blocks With Tables

Some template layouts contain both a table placeholder and a textbox placeholder. In that case, send one `table` block and one `text` block in the same `content.blocks` array.

```json theme={"dark"}
{
  "content": {
    "blocks": [
      {
        "type": "table",
        "table": {
          "table": {
            "rows": []
          }
        }
      },
      {
        "type": "text",
        "text": {
          "header": "Commentary",
          "bullets": [
            "At-risk accounts need sponsor alignment",
            "Expansion-ready accounts should move into pipeline review"
          ]
        }
      }
    ]
  }
}
```

The table block owns the row and cell content. The text block owns the separate textbox content.

## Slide-Level Text

Top-level text fields populate matching slide placeholders.

```json theme={"dark"}
{
  "title": "Q2 2026 Portfolio Review",
  "subtitle": "Investment Committee Draft",
  "header": "Internal",
  "footer": "Confidential",
  "footnote": "Source: CRM export, April 2026"
}
```

| Field      | Typical use                             |
| ---------- | --------------------------------------- |
| `title`    | Main slide title                        |
| `subtitle` | Subtitle or supporting title-slide text |
| `header`   | Header area text                        |
| `footer`   | Footer area text                        |
| `footnote` | Source, caveat, or footnote text        |

## Text Block Formatting

Use block-level formatting when one text block should differ from the rest of the slide.

```json theme={"dark"}
{
  "type": "text",
  "text": {
    "header": "Management Actions",
    "text": "The team should focus on accounts with renewal risk.",
    "bullets": [
      "Schedule renewal risk review",
      "Pull forward adoption readout",
      "Confirm executive sponsor"
    ],
    "header_format": {
      "font_name": "Arial",
      "font_size": 12,
      "bold": true
    },
    "text_format": {
      "font_name": "Arial",
      "font_size": 10
    },
    "bullets_format": {
      "font_name": "Arial",
      "font_size": 10
    }
  }
}
```

For text blocks, use `header_format`, `text_format`, and `bullets_format`. The current text-block renderer applies `font_name`, `font_size`, and `bold` overrides. Unspecified values inherit from the template textbox where available.

Use `slide_format.textbox` to set defaults for all text blocks on the slide.

```json theme={"dark"}
{
  "slide_format": {
    "textbox": {
      "header": {
        "font_name": "Arial",
        "font_size": 12,
        "bold": true
      },
      "text": {
        "font_name": "Arial",
        "font_size": 10
      },
      "bullets": {
        "font_name": "Arial",
        "font_size": 10
      }
    }
  }
}
```

For richer table-cell text styling, including per-cell and per-paragraph format templates, use [Table Blocks](/guides/table-blocks#format-templates).

## Layouts

For a single-column layout, `content` is one column object:

```json theme={"dark"}
{
  "title": "Executive Summary",
  "content": {
    "blocks": [
      {
        "type": "text",
        "text": {
          "header": "Key Findings",
          "bullets": [
            "Revenue beat plan",
            "Gross retention improved",
            "Expansion pipeline increased"
          ]
        }
      }
    ]
  }
}
```

For a two-column layout, `content` is an array. Each object is one column. The optional column `header` renders only when the template has matching `LHS_header` and `RHS_header` marker textboxes. `LHS` means left-hand side; `RHS` means right-hand side.

```json theme={"dark"}
{
  "title": "Management Priorities",
  "content": [
    {
      "header": "Near term",
      "blocks": [
        {
          "type": "text",
          "text": {
            "bullets": [
              "Close Q2 renewal plan",
              "Escalate at-risk accounts"
            ]
          }
        }
      ]
    },
    {
      "header": "Next quarter",
      "blocks": [
        {
          "type": "text",
          "text": {
            "bullets": [
              "Expand sponsor mapping",
              "Refresh adoption reporting"
            ]
          }
        }
      ]
    }
  ]
}
```

## Fitting

Generation can shrink textbox fonts when text is too long for the available space.

```json theme={"dark"}
{
  "options": {
    "textbox_min_font_size": 8,
    "auto_paginate_tables": false
  }
}
```

`textbox_min_font_size` sets the smallest allowed font size during fit optimization.

Set `auto_paginate_tables: false` for layouts that combine a table block and a text block. Table auto-pagination is only for table-only layouts.

## Complete Example

<Accordion title="Text block request example">
  ```json theme={"dark"}
  {
    "title": "Customer Health Summary",
    "footnote": "Source: CRM export, April 2026",
    "slide_format": {
      "textbox": {
        "header": {
          "font_name": "Arial",
          "font_size": 12,
          "bold": true
        },
        "text": {
          "font_name": "Arial",
          "font_size": 10
        },
        "bullets": {
          "font_name": "Arial",
          "font_size": 10
        }
      }
    },
    "content": {
      "blocks": [
        {
          "type": "table",
          "table": {
            "table": {
              "table_format": {
                "default": {
                  "text": {
                    "font_name": "Arial",
                    "font_size": 10,
                    "color": "#111827"
                  }
                },
                "header_row": {
                  "text": {
                    "font_name": "Arial",
                    "font_size": 10,
                    "bold": true,
                    "color": "#FFFFFF"
                  },
                  "cell": {
                    "background_color": "#DC0000"
                  }
                }
              },
              "rows": [
                {
                  "is_header": true,
                  "cells": [
                    { "value": "Customer" },
                    { "value": "Health" },
                    { "value": "Signal" },
                    { "value": "Action" }
                  ]
                },
                {
                  "cells": [
                    { "value": "Acme Corp" },
                    { "value": "Healthy" },
                    { "value": "Expansion-ready" },
                    { "value": "Send proposal" }
                  ]
                },
                {
                  "cells": [
                    { "value": "TechFlow Inc" },
                    { "value": "Neutral" },
                    { "value": "Sponsor gap" },
                    { "value": "Schedule review" }
                  ]
                },
                {
                  "cells": [
                    { "value": "DataSync Ltd" },
                    { "value": "At risk" },
                    { "value": "Usage down" },
                    { "value": "Escalate owner" }
                  ]
                },
                {
                  "cells": [
                    { "value": "CloudFirst" },
                    { "value": "Healthy" },
                    { "value": "New champion" },
                    { "value": "Expand use case" }
                  ]
                },
                {
                  "cells": [
                    { "value": "Innovate Labs" },
                    { "value": "Healthy" },
                    { "value": "High adoption" },
                    { "value": "Confirm expansion" }
                  ]
                },
                {
                  "cells": [
                    { "value": "SecureNet" },
                    { "value": "Neutral" },
                    { "value": "Procurement delay" },
                    { "value": "Align timeline" }
                  ]
                },
                {
                  "cells": [
                    { "value": "GrowthMetrics" },
                    { "value": "At risk" },
                    { "value": "Low engagement" },
                    { "value": "Create rescue plan" }
                  ]
                },
                {
                  "cells": [
                    { "value": "Nexus Digital" },
                    { "value": "Healthy" },
                    { "value": "Expansion-ready" },
                    { "value": "Send proposal" }
                  ]
                },
                {
                  "cells": [
                    { "value": "Velocity Systems" },
                    { "value": "Neutral" },
                    { "value": "Security review" },
                    { "value": "Unblock buyer" }
                  ]
                },
                {
                  "cells": [
                    { "value": "PrimeStack" },
                    { "value": "At risk" },
                    { "value": "Champion left" },
                    { "value": "Map sponsor" }
                  ]
                },
                {
                  "cells": [
                    { "value": "Quantum Analytics" },
                    { "value": "Healthy" },
                    { "value": "Usage growth" },
                    { "value": "Scope add-on" }
                  ]
                },
                {
                  "cells": [
                    { "value": "BlueWave Tech" },
                    { "value": "Neutral" },
                    { "value": "Budget review" },
                    { "value": "Confirm timing" }
                  ]
                },
                {
                  "cells": [
                    { "value": "Apex Solutions" },
                    { "value": "Healthy" },
                    { "value": "New team rollout" },
                    { "value": "Track adoption" }
                  ]
                }
              ]
            }
          }
        },
        {
          "type": "text",
          "text": {
            "header": "Management Focus",
            "text": "The renewal plan is stable, but the team should prioritize accounts with sponsor gaps or declining usage.",
            "bullets": [
              "Confirm executive sponsors before renewal conversations",
              "Pull forward adoption reviews for at-risk accounts",
              "Use expansion-ready accounts for Q2 pipeline creation"
            ],
            "header_format": {
              "font_name": "Arial",
              "font_size": 12,
              "bold": true
            },
            "text_format": {
              "font_name": "Arial",
              "font_size": 10
            },
            "bullets_format": {
              "font_name": "Arial",
              "font_size": 10
            }
          }
        }
      ]
    }
  }
  ```
</Accordion>

The visual example below is generated from the complete payload above. It shows a table block filling the table region and a separate text block filling the bottom textbox region.

<Columns cols={2}>
  <Frame caption="Template slide">
    <img src="https://mintcdn.com/duomi/0eYM0n6_9GystnoS/images/presentation-generation/text-blocks-template.png?fit=max&auto=format&n=0eYM0n6_9GystnoS&q=85&s=c85f60683045d4598e2184ea484fd2fa" alt="Template slide with a table placeholder and a bullet placeholder below it." width="2880" height="1620" data-path="images/presentation-generation/text-blocks-template.png" />
  </Frame>

  <Frame caption="Generated slide">
    <img src="https://mintcdn.com/duomi/0eYM0n6_9GystnoS/images/presentation-generation/text-blocks-generated.png?fit=max&auto=format&n=0eYM0n6_9GystnoS&q=85&s=a6f918e0e004ec4c9d05d2d80dfa9c17" alt="Generated customer health slide with a table and a Management Focus text block with bullets below it." width="2880" height="1620" data-path="images/presentation-generation/text-blocks-generated.png" />
  </Frame>
</Columns>

## 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-cell text, rows, formatting, and pagination.
  </Card>

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