Call APIEndpoints
Generate Presentation
Generate a PPTX presentation using the Pluslide API with a single synchronous request.
Endpoint
POST /v1/project/export
Content-Type: application/json
Authorization: Bearer YOUR_API_KEYRequest Body
Basic Example
{
"projectId": "your_project_id",
"presentation": {
"slideList": [
{
"templateKey": "your_template_key",
"content": {
"your_field_key": "value1",
"your_field_key2": "value2"
}
}
]
}
}If you are unsure about what to include in the slideList, you can go to the Playground page to test it out.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Project ID |
presentation | object | Yes | Presentation content |
presentation.slideList | array | Yes | List of slides |
presentation.slideList[].templateKey | string | Yes | Template identifier |
presentation.slideList[].content | object | Yes | Field data in key-value format. The structure depends on the fields defined in the selected template. These fields are customizable and controlled by the user |
presentation.slideList[].attributes | object | No | Slide attributes |
presentation.slideList[].attributes.speakerNote | string | No | Speaker notes |
presentation.slideList[].attributes.hidden | boolean | No | Whether to hide this slide |
presentation.slideList[].attributes.slideNumber | object or boolean | No | Slide number settings |
presentation.attributes | object | No | Presentation attributes |
presentation.attributes.title | string | No | Presentation title |
presentation.attributes.author | string | No | Author name |
presentation.attributes.company | string | No | Company name |
presentation.attributes.subject | string | No | Presentation subject |
options | object | No | Export options |
options.compressImages | boolean | No | Whether to compress images in the PPTX (default: true) |
options.embedFonts | boolean | No | Whether to embed fonts in the PPTX for consistent rendering across devices (default: true) |
Slide Number Settings
If slideNumber is an object, it supports the following properties:
| Property | Type | Required | Description |
|---|---|---|---|
x | number | Yes | X-position (0.0 to 1.0) |
y | number | Yes | Y-position (0.0 to 1.0) |
color | string | No | Text color (e.g., "#333333") |
fontSize | number | No | Font size in points |
Full Example
{
"projectId": "proj_123456",
"presentation": {
"slideList": [
{
"templateKey": "title-slide",
"content": {
"title": "Annual Report 2025",
"subtitle": "Financial Performance Overview"
},
"attributes": {
"speakerNote": "Welcome everyone to our annual report presentation."
}
},
{
"templateKey": "bullet-list",
"content": {
"title": "Key Achievements",
"bullets": [
"Increased revenue by 25%",
"Expanded to 3 new markets",
"Launched 5 new products"
]
},
"attributes": {
"slideNumber": {
"x": 0.95,
"y": 0.95,
"color": "#333333",
"fontSize": 12
}
}
},
{
"templateKey": "chart-slide",
"content": {
"title": "Revenue Growth",
"chartData": {
"labels": ["Q1", "Q2", "Q3", "Q4"],
"values": [1.2, 1.8, 2.3, 2.9]
}
},
"attributes": {
"hidden": false
}
}
],
"attributes": {
"title": "Annual Report 2025",
"author": "Finance Team",
"company": "Acme Corporation",
"subject": "Financial Performance"
}
}
}Response
A successful request returns a JSON object with the download URL:
{
"url": "https://storage.example.com/presentations/presentation-123456-2025-01-15T10:30:00.000Z.pptx"
}Response Fields
| Field | Type | Description |
|---|---|---|
url | string | Direct download URL for the generated presentation |
Code Examples
cURL
curl -X POST "https://api.pluslide.com/v1/project/export" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"projectId": "proj_123456",
"presentation": {
"slideList": [
{
"templateKey": "title-slide",
"content": {
"title": "Annual Report 2025",
"subtitle": "Financial Overview"
}
}
]
}
}'JavaScript
const response = await fetch('https://api.pluslide.com/v1/project/export', {
method: 'POST',
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
projectId: 'proj_123456',
presentation: {
slideList: [
{
templateKey: 'title-slide',
content: {
title: 'Annual Report 2025',
subtitle: 'Financial Overview',
},
},
],
},
}),
});
const { url } = await response.json();
// url is the direct download link to the PPTX fileError Responses
| Status | Code | Description |
|---|---|---|
400 | INVALID_REQUEST | Missing or invalid request body |
401 | UNAUTHORIZED | Invalid or missing API key |
403 | INSUFFICIENT_CREDITS | Not enough credits |
404 | PROJECT_NOT_FOUND | Project ID doesn't exist |
404 | TEMPLATE_NOT_FOUND | Template key doesn't exist |
429 | RATE_LIMIT_EXCEEDED | Too many requests |
