What it does

generate_powerpoint takes a simple JSON payload describing slides and their elements and turns it into a downloadable .pptx file—fully in the cloud, no template needed. Use it for pitch decks, reports, dashboards, or any slide-based content.

Key features

  • Works with blank PowerPoint—no pre-made template necessary
  • Supports common element types: text, bullet lists, tables, charts, images
  • Choose among four built-in layouts (TITLE_SLIDE, TITLE_AND_CONTENT, SECTION_HEADER, CUSTOM_LAYOUT)
  • Fine-tune placement with optional placeholder_type (BODY, SUBTITLE, PICTURE, CHART, TABLE)
  • Stores the finished deck in your org’s R2 bucket and returns a presigned download link

Parameters

ParameterTypeRequiredDescription
slidesarray<Slide>YesOrdered list of slides to create

Slide object

FieldTypeRequiredDescription
slide_numberintegerYes1-based position in the deck
layoutstringYesOne of TITLE_SLIDE, TITLE_AND_CONTENT, SECTION_HEADER, CUSTOM_LAYOUT
titlestringYesSlide title text
descriptionstringNoInternal note for agents (not rendered)
elementsarray<Element>NoContent blocks to render (order matters)

Element object

FieldTypeRequiredDescription
typestringYestext, bullet_list, table, chart, image
placeholder_typestringNoTarget placeholder (BODY, SUBTITLE, PICTURE, CHART, TABLE). Defaults to BODY/fallback
Texttextstringreq for type textPlain text content
Bulletsitemsarray<>req for bullet_listBullet items, level 0-4
Tableheadersstring[]req for tableHeader row
Tablerowsstring[][]req for tableTable body rows
Chartchart_typestringreq for chartCOLUMN_CLUSTERED, LINE, PIE, BAR_CLUSTERED
Chartchart_titlestringNoTitle above the chart
Chartcategoriesstring[]reqCategory labels
Chartseriesarray of series objectsreqEach series: { name, values:number[] }
Imagesrcstringreq for imagePath or URL to an image

Minimal example

{
  "slides": [
    {
      "slide_number": 1,
      "layout": "TITLE_SLIDE",
      "title": "Acme Corp Quarterly Update"
    },
    {
      "slide_number": 2,
      "layout": "TITLE_AND_CONTENT",
      "title": "Agenda",
      "elements": [
        {
          "type": "bullet_list",
          "items": [
            { "text": "Company overview", "level": 0 },
            { "text": "Financial performance", "level": 0 },
            { "text": "Next steps", "level": 0 }
          ]
        }
      ]
    }
  ]
}

What you get back

On success the tool returns:

{
  "status": "success",
  "content": {
    "r2_path": "r2://aster-agents/<org_id>/generate_powerpoint/Acme_Presentation_20250612_104530.pptx"
  }
}

The front-end converts this into a “Download Presentation” button.

Common use cases

  • Auto-generate investor or client update decks
  • Produce onboarding presentations with personalized user data
  • Build KPI dashboards with tables & charts on a schedule
  • Summarize meeting notes into slides via an agent workflow

Best practices

  • Always supply slide_number in ascending order—missing numbers will be filled sequentially, but duplicates are overwritten by the last occurrence.
  • Keep image src publicly accessible or an R2 path the backend can reach.
  • When using chart elements ensure all series arrays match the length of categories.
  • Omit placeholder_type unless you need precise control—the backend falls back intelligently.

Troubleshooting

IssueLikely cause / fix
”Unknown layout”layout not in the allowed set. Use one of the four built-ins.
”No slides data provided”slides array missing or empty.
Error generating chartSeries lengths mismatch or invalid numbers.
Image skipped with warningProvided layout doesn’t have a PICTURE placeholder—switch layout or use BODY/OBJECT.