Pluslide LogoPluslide
Call APIEndpoints

Generate Presentation

Generate presentations (PPTX, PDF, or Google Slides) using the Pluslide API. Supports both synchronous and asynchronous modes.

Endpoint

POST /v1/project/export
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY

Request Body

Parameters

ParameterTypeRequiredDescription
projectIdstringYesProject ID
presentationobjectYesPresentation content
presentation.slideListarrayYesList of slides
presentation.slideList[].templateKeystringYesTemplate identifier
presentation.slideList[].contentobjectYesField 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[].attributesobjectNoSlide attributes
presentation.slideList[].attributes.speakerNotestringNoSpeaker notes
presentation.slideList[].attributes.hiddenbooleanNoWhether to hide this slide
presentation.slideList[].attributes.slideNumberobject or booleanNoSlide number settings
presentation.attributesobjectNoPresentation attributes
presentation.attributes.titlestringNoPresentation title
presentation.attributes.authorstringNoAuthor name
presentation.attributes.companystringNoCompany name
presentation.attributes.subjectstringNoPresentation subject
optionsobjectNoExport options
options.formatstringNoExport format: pptx (default), pdf, or google-slides
options.compressImagesbooleanNoWhether to compress images (default: true)
options.embedFontsbooleanNoWhether to embed fonts for consistent rendering across devices (default: true)
options.asyncbooleanNoEnable async mode to return immediately with task ID (default: false). See Export Options for details.
options.devbooleanNoEnable development mode for testing without consuming quota (default: false). See Development Mode for details.

Slide Number Settings

If slideNumber is an object, it supports the following properties:

PropertyTypeRequiredDescription
xnumberYesX-position (0.0 to 1.0)
ynumberYesY-position (0.0 to 1.0)
colorstringNoText color (e.g., "#333333")
fontSizenumberNoFont size in points

Example

If you are unsure about what to include in the slideList, you can go to the Playground page to test it out.

{
  "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

Synchronous Mode (default)

A successful request returns a JSON object with the URL:

{
  "url": "https://storage.example.com/presentations/presentation-123456.pptx"
}
FieldTypeDescription
urlstringFor PPTX/PDF: Direct download URL. For Google Slides: Edit URL of the file.

Google Slides

When using google-slides format:

  • The returned url is an edit link — anyone with the link can edit the presentation
  • The file is stored in Pluslide's Google Drive and will be automatically deleted based on your plan's retention policy (same as PPTX/PDF)
  • Important: Copy the presentation to your own Google Drive before the expiration to keep it permanently

Async Mode

When options.async is true, the response contains only the task ID:

{
  "id": 12345
}
FieldTypeDescription
idnumberTask ID. Use GET /v1/presentation/:id to check the status and get the result.

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',
          },
        },
      ],
    },
  }),
});

// Handle HTTP errors (4xx/5xx)
if (!response.ok) {
  const error = await response.json();
  throw new Error(`${error.error}: ${error.message} (requestId: ${error.requestId})`);
}

const { url } = await response.json();
// url is the direct download link to the PPTX file

Error Responses

StatusCodeDescription
400INVALID_REQUESTMissing or invalid request body
401UNAUTHORIZEDInvalid or missing API key
403INSUFFICIENT_CREDITSNot enough credits
404PROJECT_NOT_FOUNDProject ID doesn't exist
404TEMPLATE_NOT_FOUNDTemplate key doesn't exist
429RATE_LIMIT_EXCEEDEDToo many requests

On this page