
Generate PowerPoint Presentations Programmatically: Poesius REST API Guide
Poesius's REST API enables teams to embed consulting-grade presentation generation into their own applications, data pipelines, and automated workflows. If your use case requires generating PPTX files programmatically—from a CRM, a reporting system, a data pipeline, or a custom application—the Poesius API provides the generation capability without requiring a human in the loop.
API Overview
Base URL: https://poe.poesius.com/api/v1
Authentication: Bearer token (API key from https://app.poesius.com)
Output format: .pptx (Microsoft PowerPoint)
Processing model: Asynchronous (submit → poll status → download)
The API accepts text documents, structured content, and data tables as input. It generates fully formatted, brand-compliant PowerPoint presentations using your configured templates.
Full reference: https://docs.poesius.com/
Authentication
All API calls require an Authorization header with your Poesius API key:
Authorization: Bearer your-api-key-here
Content-Type: application/json
Obtain your API key from https://app.poesius.com → Settings → API Keys.
Core Endpoints
POST /generate
Submit a document for presentation generation.
Request:
{
"content": "string (document text, markdown, or structured outline)",
"template_id": "string (from GET /templates)",
"slide_count": 15,
"narrative_style": "pyramid_principle",
"options": {
"include_executive_summary": true,
"action_titles": true,
"language": "en"
}
}
Response:
{
"job_id": "job_abc123",
"status": "processing",
"estimated_completion_seconds": 45
}
GET /status/{job_id}
Poll generation status.
Response:
{
"job_id": "job_abc123",
"status": "complete",
"slide_count": 15,
"created_at": "2026-04-18T10:00:00Z",
"completed_at": "2026-04-18T10:00:47Z"
}
Status values: queued, processing, complete, error
GET /download/{job_id}
Download the completed PPTX file. Returns a signed URL with 24-hour expiry.
Response:
{
"download_url": "https://poe.poesius.com/files/job_abc123.pptx?token=...",
"expires_at": "2026-04-19T10:00:47Z",
"file_size_bytes": 2847392
}
GET /templates
List available templates for the authenticated account.
Response:
{
"templates": [
{
"id": "consulting-standard",
"name": "Consulting Standard",
"description": "McKinsey-style consulting template",
"slide_masters": 12
}
]
}
Code Examples
Python (simple generation)
import requests
import time
API_KEY = "your-api-key"
BASE_URL = "https://poe.poesius.com/api/v1"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# 1. Submit generation job
content = """
Company X Market Entry Analysis
Key recommendation: Enter the APAC market in Q3 2026, starting with Singapore and Australia.
Supporting analysis:
1. Market opportunity: APAC B2B SaaS market growing 28% CAGR through 2028; Company X addressable market is $2.3B
2. Competitive window: Major competitors have limited APAC presence; 12-18 month advantage available
3. Financial model: Payback period of 2.8 years at conservative assumptions; IRR of 34%
Recommended entry approach: Partnership model with local resellers in Singapore and Sydney.
"""
response = requests.post(
f"{BASE_URL}/generate",
headers=headers,
json={
"content": content,
"template_id": "consulting-standard",
"slide_count": 12,
"narrative_style": "pyramid_principle"
}
)
job_id = response.json()["job_id"]
# 2. Poll for completion
while True:
status_response = requests.get(
f"{BASE_URL}/status/{job_id}",
headers=headers
)
status = status_response.json()["status"]
if status == "complete":
break
elif status == "error":
raise Exception("Generation failed")
time.sleep(5)
# 3. Get download URL
download_response = requests.get(
f"{BASE_URL}/download/{job_id}",
headers=headers
)
download_url = download_response.json()["download_url"]
# 4. Download the file
pptx_response = requests.get(download_url)
with open("presentation.pptx", "wb") as f:
f.write(pptx_response.content)
print("Presentation downloaded: presentation.pptx")
JavaScript/Node.js
Get Poesius for Free
Create professional presentations 5x faster than manual formatting
Get custom-designed slides built from the ground up, not templates
Start free with no credit card required
const fetch = require('node-fetch');
const fs = require('fs');
const API_KEY = process.env.POESIUS_API_KEY;
const BASE_URL = 'https://poe.poesius.com/api/v1';
const headers = {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
};
async function generatePresentation(content, templateId = 'consulting-standard') {
// Submit
const submitRes = await fetch(`${BASE_URL}/generate`, {
method: 'POST',
headers,
body: JSON.stringify({ content, template_id: templateId, slide_count: 12 })
});
const { job_id } = await submitRes.json();
// Poll
while (true) {
await new Promise(r => setTimeout(r, 5000));
const statusRes = await fetch(`${BASE_URL}/status/${job_id}`, { headers });
const { status } = await statusRes.json();
if (status === 'complete') break;
if (status === 'error') throw new Error('Generation failed');
}
// Download
const downloadRes = await fetch(`${BASE_URL}/download/${job_id}`, { headers });
const { download_url } = await downloadRes.json();
const fileRes = await fetch(download_url);
const buffer = await fileRes.buffer();
fs.writeFileSync('presentation.pptx', buffer);
return 'presentation.pptx';
}
generatePresentation(yourContent).then(path => console.log(`Saved: ${path}`));
Common Integration Patterns
Pattern 1: CRM-triggered presentation generation
When a deal reaches a specific stage in Salesforce/HubSpot, automatically generate a tailored proposal deck:
- CRM webhook fires on deal stage change
- Your automation fetches deal context (company, pain points, pricing)
- Calls Poesius API with deal context as content input
- Generated PPTX uploaded to CRM or sent to sales rep
Pattern 2: Scheduled reporting
Weekly or monthly performance reports generated automatically:
- Cron job pulls metrics from analytics platforms
- Formats metrics as structured content with narrative context
- Calls Poesius API to generate presentation
- Emails report to stakeholders or uploads to shared drive
Pattern 3: AI agent workflow
AI agent (Claude, GPT-4, Gemini) uses Poesius as a tool:
- Agent receives user request: "Create a competitive analysis presentation for ACME Corp"
- Agent gathers data (web search, internal knowledge base)
- Agent calls Poesius API with synthesized research
- Agent returns download link to user
(For AI agent integrations, the MCP integration is often more convenient than direct REST API calls.)
Pattern 4: Document-to-presentation conversion
Convert existing documents (PDF, Word, markdown) to presentations:
- Extract text from source document
- Submit to Poesius API with appropriate template and narrative style
- Download generated PPTX
Error Handling
Common error codes:
| Code | Meaning | Resolution | |------|---------|-----------| | 401 | Invalid API key | Check API key in account settings | | 400 | Invalid request | Verify request body schema | | 404 | Template not found | Use GET /templates to list valid template IDs | | 429 | Rate limit exceeded | Implement exponential backoff; contact for limit increase | | 500 | Generation error | Retry; contact support if persistent |
Rate Limits
Rate limits depend on your Poesius plan:
- Individual: 10 generations/hour
- Team: 50 generations/hour
- Enterprise: Custom limits
Implement exponential backoff for 429 responses: wait 2^retry_count seconds between retries (max 32 seconds).
Frequently Asked Questions
Can I specify the exact slide titles and content for each slide?
The API accepts both fully structured input (specifying each slide's content) and unstructured input (a document that Poesius structures into slides automatically). For fully structured input, format your content as a slide outline with headings for each slide.
How do I include charts with specific data?
Include data tables in your content input, formatted as markdown tables or JSON. Specify the desired chart type in the narrative (e.g., "The following data should be shown as a waterfall chart: [data table]"). Poesius interprets the chart type specification and data.
Is there a maximum content length?
The API accepts documents up to 100,000 characters (~20,000 words). For larger documents, consider extracting the most relevant sections before submission.
Can I pass a binary PowerPoint file as the template?
Templates are managed in your Poesius account at app.poesius.com. Upload your PowerPoint template file through the web interface; it becomes available as a template_id in the API.
Related Resources
Get Poesius for Free
Create professional presentations 5x faster than manual formatting
Get custom-designed slides built from the ground up, not templates
Start free with no credit card required