Present API Documentation
The Present API enables dynamic generation of PowerPoint presentations and PDFs from templates.
Base URL
Production: https://apim-public-api.azure-api.net/api/v2/present
Test: https://apim-public-api-test.azure-api.net/api/v2/present
Authentication
All API requests require OAuth2 authentication using Azure AD:
Authorization: Bearer <access_token>
Ocp-Apim-Subscription-Key: <subscription_key>
Endpoints
Slides
Create Slide Deck
Create a new PowerPoint presentation.
POST /slides
Request Body:
{
"template": "template-name",
"slides": [
{
"slideId": "slide-1",
"data": {
"title": "Meeting Overview",
"content": "Dynamic content"
}
}
]
}
Response: PowerPoint file download
Generate Slide Content
Generate slide content with dynamic data.
POST /slides/generate
Request Body:
{
"template": "template-name",
"data": {
"customerName": "Company Name",
"meetingDate": "2025-08-20",
"advisorName": "John Doe"
}
}
Response: Content response with generated data
Convert to PDF
Convert slides to PDF format. Supports both JSON and file upload.
JSON Request:
POST /slides/pdf
Content-Type: application/json
{
"slideLocation": "path-to-slides",
"options": {
"handoutMode": false,
"notesPages": false
}
}
File Upload:
POST /slides/pdf
Content-Type: multipart/form-data
Response: PDF file or download URL
Templates
List All Templates
Retrieve all available presentation templates.
GET /templates
Response: Array of SlideTemplate objects
Get Template Details
Get details for a specific template.
GET /templates/{name}
Response: SlideTemplateDetails object
Upload Template
Upload a new presentation template. Supports both JSON and file upload.
JSON Upload:
POST /templates
Content-Type: application/json
{
"contentId": "template-content-id",
"name": "Template Name",
"category": "Business"
}
File Upload:
POST /templates
Content-Type: multipart/form-data
Form fields:
file: Template file (PowerPoint)name: Template namecategory: Template category
Response: SlideTemplateDetails object
Delete Template
Delete a template.
DELETE /templates/{name}
Response: 200 OK on success
Validate Template
Validate template structure and tags. Supports both JSON and file upload.
JSON Validation:
POST /templates/validation
Content-Type: application/json
{
"contentId": "template-content-id"
}
File Validation:
POST /templates/validation
Content-Type: multipart/form-data
Form field:
file: Template file to validate
Response: Array of ValidationResult objects
Get Template Slides
Get all slides from a template as images.
GET /templates/{name}/slides
Response: SlideImagesResponse with slide images
Get Specific Template Slide
Get a specific slide from a template.
GET /templates/{templateName}/slides/{slideName}
Response: Image URL for the specific slide
Data Models
SlideTemplate
{
"uri": "template-uri",
"name": "Template Name",
"customerType": "Business",
"tenantId": "tenant-uuid",
"ownerId": "owner-uuid"
}
SlideTemplateDetails
{
"uri": "template-uri",
"name": "Template Name",
"customerType": "Business",
"tenantId": "tenant-uuid",
"ownerId": "owner-uuid",
"tags": [
{
"name": "customer_name",
"description": "Customer company name"
}
],
"sections": [
{
"name": "Introduction",
"slides": ["slide-1", "slide-2"]
}
]
}
ValidationResult
{
"type": "Error|Warning|Info",
"message": "Validation message",
"location": "slide-1",
"details": {}
}
Code Examples
JavaScript/Node.js
const ACCESS_TOKEN = 'your-access-token';
const SUBSCRIPTION_KEY = 'your-subscription-key';
const BASE_URL = 'https://apim-public-api.azure-api.net/api/v2/present';
// Create presentation
async function createPresentation(templateData) {
const response = await fetch(`${BASE_URL}/slides`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${ACCESS_TOKEN}`,
'Ocp-Apim-Subscription-Key': SUBSCRIPTION_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify(templateData)
});
return response.blob(); // PowerPoint file
}
// List templates
async function listTemplates() {
const response = await fetch(`${BASE_URL}/templates`, {
headers: {
'Authorization': `Bearer ${ACCESS_TOKEN}`,
'Ocp-Apim-Subscription-Key': SUBSCRIPTION_KEY
}
});
return response.json();
}
cURL
# List templates
curl -X GET "https://apim-public-api.azure-api.net/api/v2/present/templates" \
-H "Authorization: Bearer your-access-token" \
-H "Ocp-Apim-Subscription-Key: your-subscription-key"
# Upload template (file)
curl -X POST "https://apim-public-api.azure-api.net/api/v2/present/templates" \
-H "Authorization: Bearer your-access-token" \
-H "Ocp-Apim-Subscription-Key: your-subscription-key" \
-H "Content-Type: multipart/form-data" \
-F "file=@template.pptx" \
-F "name=Business Template" \
-F "category=Business"
# Generate slides
curl -X POST "https://apim-public-api.azure-api.net/api/v2/present/slides/generate" \
-H "Authorization: Bearer your-access-token" \
-H "Ocp-Apim-Subscription-Key: your-subscription-key" \
-H "Content-Type: application/json" \
-d '{
"template": "business-template",
"data": {
"customerName": "Acme Corp",
"meetingDate": "2025-09-15"
}
}'
Full API Specification
For the complete API specification including all endpoints, parameters, and response schemas: