Skip to main content

Endpoints

Direct Download

GET /presentations/{presentation_id}/download
Download the complete presentation as a PPTX file. The presentation must be in completed status. Requires authentication. Important: This endpoint performs presentation consolidation, which combines all individual slides into a single PPTX file. The consolidation process may take time depending on:
  • Presentation complexity: Number of slides, amount of content per slide
  • Presentation size: Total file size and number of embedded assets
  • Template complexity: Complexity of the template layouts and styling
If a consolidated version has been previously generated and cached, it will be served immediately. Otherwise, the system will consolidate the presentation on-demand, which may take several seconds to minutes for large presentations.
GET /presentations/{presentation_id}/download-link
Get a shareable signed URL for downloading the consolidated presentation. This endpoint returns a URL that can be used without authentication headers (useful for sharing or embedding). How it works: The returned URL points to a shared download endpoint that:
  • If cached: Serves the consolidated presentation immediately (fast)
  • If not cached: Performs consolidation on-demand (may take time based on presentation complexity and size)
The direct link shares the same consolidation logic as the direct download endpoint. The main difference is that the link can be used without authentication headers, making it suitable for sharing or embedding in web applications. Response:
{
  "download_url": "https://poe.poesius.com/api/v1/presentations/{presentation_id}/download/shared?token=...",
  "expires_in_seconds": 86400
}
The download link expires after 24 hours (86400 seconds) by default. Example:
# Get download link
curl -X GET "https://poe.poesius.com/api/v1/presentations/{presentation_id}/download-link" \
  -H "X-API-Key: pk_your_api_key"

# Use the returned URL (no auth required)
curl -X GET "{download_url}" -o presentation.pptx

Request

curl -X GET "https://poe.poesius.com/api/v1/presentations/{presentation_id}/download" \
  -H "X-API-Key: pk_your_api_key" \
  -o presentation.pptx

Response

Returns the PPTX file as a binary download. The Content-Type header will be application/vnd.openxmlformats-officedocument.presentationml.presentation.

Complete Workflow

Here’s a complete example that generates, polls, and downloads a presentation:
#!/bin/bash

API_KEY="pk_your_api_key_here"
BASE_URL="https://poe.poesius.com/api/v1"
DOCUMENT_PATH="/path/to/document.pdf"
NUM_SLIDES=20

# Step 1: Generate slides
RESPONSE=$(curl -s -X POST "${BASE_URL}/slides/generate-from-doc" \
  -H "X-API-Key: ${API_KEY}" \
  -F "document=@${DOCUMENT_PATH}" \
  -F "instructions=Create a professional presentation" \
  -F "num_slides=${NUM_SLIDES}")

PRESENTATION_ID=$(echo $RESPONSE | jq -r '.presentation_id')
echo "Presentation ID: ${PRESENTATION_ID}"

# Step 2: Poll for completion
while true; do
  STATUS=$(curl -s -X GET "${BASE_URL}/presentations/${PRESENTATION_ID}" \
    -H "X-API-Key: ${API_KEY}" | jq -r '.status')
  
  echo "Status: ${STATUS}"
  
  if [ "$STATUS" = "completed" ]; then
    break
  elif [ "$STATUS" = "failed" ]; then
    echo "Generation failed!"
    exit 1
  fi
  
  sleep 5
done

# Step 3: Download
curl -X GET "${BASE_URL}/presentations/${PRESENTATION_ID}/download" \
  -H "X-API-Key: ${API_KEY}" \
  -o presentation.pptx

echo "Downloaded: presentation.pptx"

Python Example

import requests
import time

API_KEY = "pk_your_api_key_here"
BASE_URL = "https://poe.poesius.com/api/v1"

# Step 1: Generate
with open("document.pdf", "rb") as f:
    response = requests.post(
        f"{BASE_URL}/slides/generate-from-doc",
        headers={"X-API-Key": API_KEY},
        files={"document": f},
        data={
            "instructions": "Create a professional presentation",
            "num_slides": 20
        }
    )
    data = response.json()
    presentation_id = data["presentation_id"]

# Step 2: Poll
while True:
    response = requests.get(
        f"{BASE_URL}/presentations/{presentation_id}",
        headers={"X-API-Key": API_KEY}
    )
    data = response.json()
    
    if data["status"] == "completed":
        break
    elif data["status"] == "failed":
        raise Exception("Generation failed")
    
    time.sleep(5)

# Step 3: Download
response = requests.get(
    f"{BASE_URL}/presentations/{presentation_id}/download",
    headers={"X-API-Key": API_KEY}
)

with open("presentation.pptx", "wb") as f:
    f.write(response.content)

print("Downloaded: presentation.pptx")

File Format

Presentations are downloaded as PPTX (PowerPoint) files, compatible with:
  • Microsoft PowerPoint
  • Google Slides (upload)
  • Apple Keynote (import)
  • LibreOffice Impress

Download Methods Comparison

MethodEndpointAuthenticationUse Case
Direct Download/presentations/{id}/downloadRequired (API Key or Bearer token)Programmatic downloads, automation
Shareable Link/presentations/{id}/download-linkRequired to generate linkSharing with others, embedding in web pages
The shareable link method is useful when you need to:
  • Share download links with users who don’t have API access
  • Embed download buttons in web applications
  • Generate temporary access URLs for presentations

Presentation Consolidation

Both download methods use the same consolidation process:
  1. Check Cache: First checks if a consolidated version exists in cache
  2. Serve Cached (if available): Returns immediately with the cached consolidated presentation
  3. Consolidate (if not cached): Combines all individual slides into a single PPTX file
    • This process may take time depending on presentation complexity and size
    • The consolidated file is then cached for future requests
  4. Return: Streams the consolidated PPTX file to the client
Performance Tips:
  • First download may take longer as consolidation happens on-demand
  • Subsequent downloads are faster as they use the cached consolidated version
  • Cache is invalidated when the presentation is updated
  • For large presentations, consider the first download as a “warm-up” that prepares the cached version

Check Status

Learn how to check presentation status

Examples

See more complete examples