PowerPoint Engine API documentation

Generate native .pptx from markup, edit your own decks without breaking their formatting, merge, translate, and convert to PDF — one REST call each.

REST API
Remote MCP server
Python · Node · PHP SDKs

Get Started

One POST creates a finished deck. A single # line becomes the deck title and cover slide, every ## starts a slide, - lines are bullets:

curl -s https://powerpointengine.io/api/powerpoint/generate \
  -H "Content-Type: application/json" \
  -d '{"markup":"# Q3 Review\n## Revenue\n- Up 24%\n- Churn down\n## Outlook\n- Expand EU","theme":"corporate"}' \
  | jq -r '.result.downloadUrl'

The response contains a signed result.downloadUrl, valid for 24 hours. Anonymous calls work and return a watermarked file — pass your account id (see below) to use your plan.

Authentication

Tie calls to your account by adding sessionId — your account id from the dashboard — to the JSON body (or as a multipart field on upload endpoints):

{ "markup": "# Deck\n## Slide\n- point", "sessionId": "YOUR_ACCOUNT_ID" }
  • Without sessionId: the call works, the file is watermarked.
  • Free plan: 5 credits/month (watermarked). Pro ($9/mo): 200 credits, no watermark.
  • 1 credit = up to 10 slides per generated file.

API Reference

Base URL: https://powerpointengine.io. All endpoints are POST and return JSON with result.downloadUrl.

EndpointBodyWhat it does
/api/powerpoint/generateJSON: markup or template, theme?, brand?, font?Create a .pptx from markup or a structured template
/api/powerpoint/replacemultipart: file, replacements (JSON), replaceMode?, image:<shape>?Replace {{placeholders}} or shape text/images in your deck — formatting preserved
/api/powerpoint/editmultipart: file, operations (JSON)Duplicate / delete / move slides (1-based, sequential)
/api/powerpoint/mergemultipart: 2–5 repeated filesMerge decks; each keeps its own design
/api/powerpoint/pdfmultipart: fileConvert .pptx to PDF (server-side render)
/api/powerpoint/translatemultipart: file, targetLangTranslate all text in place, layout untouched

Edit operations example:

curl -s https://powerpointengine.io/api/powerpoint/edit \
  -F 'file=@deck.pptx' \
  -F 'operations=[{"op":"duplicate","slide":2},{"op":"delete","slide":5},{"op":"move","slide":3,"to":1}]'

Brand colors and font on any generate call (hex without # also accepted):

{ "markup": "...", "brand": { "primary": "#E4002B", "secondary": "#111827" }, "font": "Georgia" }

Markup, Charts & Tables

  • One # Title = deck title, rendered as the cover slide.
  • Each ## Heading = a new slide; ### and deeper become sub-headings.
  • - / * lines = bullets. Links, bold and inline code are cleaned up.
  • A slide with only a heading becomes a section divider; 2–4 short numeric bullets become stat cards; long lists split into two columns — automatically.

Native editable charts — a fenced ```chart block under a slide heading:

## Revenue vs Margin
```chart
type: combo
categories: Q1, Q2, Q3
Revenue: 120, 150, 170
Margin % (line, secondary): 10, 12, 14
```

type: col, bar, line, pie or combo. Markdown tables become real PowerPoint tables with a styled header and banded rows:

## Quarterly Numbers
| Region | Q1 | Q2 |
|--------|----|----|
| EU     | 10 | 12 |
| US     | 20 | 24 |

Official SDKs

Python

pip install powerpoint-engine-api
GitHub →

Node.js

npm install powerpoint-engine-api
GitHub →

PHP

composer require powerpoint-engine-api/powerpoint-engine-php
GitHub →

Same shape in every language — Python shown:

from powerpoint_engine import PowerPointEngine

engine = PowerPointEngine(session_id="YOUR_ACCOUNT_ID")
result = engine.generate("# Q3 Review\n## Revenue\n- Up 24%")
engine.download(result, "review.pptx")

pdf = engine.to_pdf("review.pptx")
engine.download(pdf, "review.pdf")

MCP for AI Agents

The same engine is a remote MCP server — connect once, authorize in the browser (OAuth 2.1), and your agent gets 8 tools:

claude mcp add --transport http powerpoint-engine https://powerpointengine.io/api/mcp/mcp
  • generate_presentation / generate_from_template — create decks
  • replace_text — fill {{placeholders}} in an existing deck
  • edit_slides — duplicate / delete / move slides
  • merge_presentations — combine 2–5 decks
  • convert_to_pdf — .pptx → PDF
  • translate_presentation — translate in place
  • get_account_status — plan, credits, recent errors

File-taking tools accept a URL — pass the downloadUrl from a previous call, so tools chain: generate → replace → convert_to_pdf. There is also an installable agent skill and llms.txt.

Errors & Limits

StatusMeaning
400Validation error — the error field says what is wrong (bad markup, wrong file type, invalid operations)
5xxServer error — safe to retry once
  • Upload limit ~20 MB per .pptx; merge takes 2–5 files.
  • Download URLs expire after 24 hours — fetch and store the file on your side.
  • Check status.powerpointengine.io for live service health.