Overview
The pptx.dev API lets you generate .pptx files programmatically with a single HTTP request. This guide walks you through making your first API call and building a complete presentation.
Prerequisites
- A pptx.dev API key (get one free)
- Any HTTP client (
curl,fetch, Pythonrequests, etc.)
Step 1: Authenticate
All API requests require a Bearer token in the Authorization header:
Authorization: Bearer YOUR_API_KEY
Step 2: Pick Your Building Blocks
Every presentation is composed of building blocks from the pptx.gallery:
| Block | What it controls |
|---|---|
| Layout | Slide structure and content zones |
| Color scheme | Brand colors across all slides |
| Font scheme | Heading and body typefaces |
| Narrative | Story arc (intro → insight → call-to-action) |
| Theme | Combined color + font preset |
Browse the gallery to find the slugs you need before writing your request body.
Step 3: Make Your First API Call
curl -X POST https://api.pptx.dev/v1/presentations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Q1 Business Review",
"colorScheme": "cobalt",
"fontScheme": "inter-plus-merriweather",
"narrative": "problem-solution",
"slides": [
{
"layout": "title-hero",
"content": {
"heading": "Q1 Business Review",
"subheading": "January – March 2026"
}
},
{
"layout": "two-column-text",
"content": {
"heading": "Key Highlights",
"left": "Revenue up 24% YoY",
"right": "NPS score: 72"
}
}
]
}'
The response returns a download URL for the generated .pptx file.
Step 4: Download the File
curl -o presentation.pptx "https://files.pptx.dev/..."
Open it in PowerPoint or Google Slides — fully editable, no watermarks.
Step 5: Integrate into Your App
Here is the same call using the Node.js fetch API:
const response = await fetch("https://api.pptx.dev/v1/presentations", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PPTX_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "My Presentation",
colorScheme: "cobalt",
fontScheme: "inter-plus-merriweather",
slides: [
{
layout: "title-hero",
content: { heading: "Hello World" },
},
],
}),
});
const { downloadUrl } = await response.json();
Next Steps
- Browse all layouts to find the right slide structures
- Explore color schemes for brand matching
- Check narratives for structured story arcs