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.
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.
| Endpoint | Body | What it does |
|---|---|---|
/api/powerpoint/generate | JSON: markup or template, theme?, brand?, font? | Create a .pptx from markup or a structured template |
/api/powerpoint/replace | multipart: file, replacements (JSON), replaceMode?, image:<shape>? | Replace {{placeholders}} or shape text/images in your deck — formatting preserved |
/api/powerpoint/edit | multipart: file, operations (JSON) | Duplicate / delete / move slides (1-based, sequential) |
/api/powerpoint/merge | multipart: 2–5 repeated files | Merge decks; each keeps its own design |
/api/powerpoint/pdf | multipart: file | Convert .pptx to PDF (server-side render) |
/api/powerpoint/translate | multipart: file, targetLang | Translate 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
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/mcpgenerate_presentation/generate_from_template— create decksreplace_text— fill {{placeholders}} in an existing deckedit_slides— duplicate / delete / move slidesmerge_presentations— combine 2–5 decksconvert_to_pdf— .pptx → PDFtranslate_presentation— translate in placeget_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
| Status | Meaning |
|---|---|
400 | Validation error — the error field says what is wrong (bad markup, wrong file type, invalid operations) |
5xx | Server 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.