Pluslide LogoPluslide

Quick Start

Generate your first PPTX presentation in 5 minutes. Step-by-step guide to set up API authentication, create templates, and make your first API call.

This guide walks you through creating your first presentation with Pluslide in under 5 minutes.

Prerequisites

  • A Pluslide account (free tier available)
  • Any way to call APIs (your application code, curl, Postman, etc.)

Step 1: Create an Account

Visit pluslide.com and sign up. If you're already logged in, you're ready to go.

When you create a new account, you'll be guided through the entire setup process. However, if you prefer to set things up manually, you can skip the onboarding and follow the steps below.

Step 2: Create a Project and Template

2.1 Create a New Project

  1. Navigate to the Projects page
  2. Click "New Project"
  3. Enter a project name (e.g., "My First Project")
  4. Note your Project ID - you'll need this for API calls

For your first project, we recommend choosing Smart Generator. It will automatically complete the template setup (steps 2.2-2.4). You can always create a blank project later to build templates from scratch.

2.2 Create a Template

  1. Open your new project
  2. Click "New Template"
  3. Set the Template Key (e.g., title-slide)
  4. The editor will open with a blank slide

2.3 Add Fields

  1. Click "Add Field" in the editor
  2. Select "Text" as the field type
  3. Set the Field Key to title
  4. Position and style the text field
  5. Repeat to add a subtitle field

2.4 Save Your Template

Click "Save" to save your template. Your template is now ready for API calls.

Step 3: Generate an API Key

  1. Go to API Tokens
  2. Click "Add Token"
  3. Enter a name (e.g., "Development")
  4. Copy the token secret immediately - it's only shown once

Store your API key securely. Never commit it to version control.

Step 4: Make Your First API Call

Replace YOUR_API_KEY with your API key and YOUR_PROJECT_ID with your project ID. Update the slides array with your own content - each slide should reference a template key and provide values for the fields you defined.

curl -X POST "https://api.pluslide.com/v1/project/export" \  -H "Authorization: Bearer YOUR_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "projectId": "YOUR_PROJECT_ID",    "presentation": {      "slideList": [        {          "templateKey": "title-slide",          "content": {            "title": "Hello, Pluslide!",            "subtitle": "My first presentation"          }        }      ]    }  }'
const response = await fetch('https://api.pluslide.com/v1/project/export', {  method: 'POST',  headers: {    'Authorization': 'Bearer YOUR_API_KEY',    'Content-Type': 'application/json',  },  body: JSON.stringify({    projectId: 'YOUR_PROJECT_ID',    presentation: {      slideList: [        {          templateKey: 'title-slide',          content: {            title: 'Hello, Pluslide!',            subtitle: 'My first presentation'          }        }      ]    }  })});const { url } = await response.json();console.log('Download URL:', url);
import requestsresponse = requests.post(    'https://api.pluslide.com/v1/project/export',    headers={        'Authorization': 'Bearer YOUR_API_KEY',        'Content-Type': 'application/json',    },    json={        'projectId': 'YOUR_PROJECT_ID',        'presentation': {            'slideList': [                {                    'templateKey': 'title-slide',                    'content': {                        'title': 'Hello, Pluslide!',                        'subtitle': 'My first presentation'                    }                }            ]        }    })data = response.json()print('Download URL:', data['url'])
<?php$ch = curl_init('https://api.pluslide.com/v1/project/export');curl_setopt_array($ch, [    CURLOPT_RETURNTRANSFER => true,    CURLOPT_POST => true,    CURLOPT_HTTPHEADER => [        'Authorization: Bearer YOUR_API_KEY',        'Content-Type: application/json',    ],    CURLOPT_POSTFIELDS => json_encode([        'projectId' => 'YOUR_PROJECT_ID',        'presentation' => [            'slideList' => [                [                    'templateKey' => 'title-slide',                    'content' => [                        'title' => 'Hello, Pluslide!',                        'subtitle' => 'My first presentation'                    ]                ]            ]        ]    ])]);$response = curl_exec($ch);curl_close($ch);$data = json_decode($response, true);echo 'Download URL: ' . $data['url'];
package mainimport (    "bytes"    "encoding/json"    "fmt"    "net/http")func main() {    payload := map[string]interface{}{        "projectId": "YOUR_PROJECT_ID",        "presentation": map[string]interface{}{            "slideList": []map[string]interface{}{                {                    "templateKey": "title-slide",                    "content": map[string]string{                        "title":    "Hello, Pluslide!",                        "subtitle": "My first presentation",                    },                },            },        },    }    body, _ := json.Marshal(payload)    req, _ := http.NewRequest("POST", "https://api.pluslide.com/v1/project/export", bytes.NewBuffer(body))    req.Header.Set("Authorization", "Bearer YOUR_API_KEY")    req.Header.Set("Content-Type", "application/json")    client := &http.Client{}    resp, _ := client.Do(req)    defer resp.Body.Close()    var result map[string]interface{}    json.NewDecoder(resp.Body).Decode(&result)    fmt.Println("Download URL:", result["url"])}
require 'net/http'require 'json'require 'uri'uri = URI('https://api.pluslide.com/v1/project/export')http = Net::HTTP.new(uri.host, uri.port)http.use_ssl = truerequest = Net::HTTP::Post.new(uri)request['Authorization'] = 'Bearer YOUR_API_KEY'request['Content-Type'] = 'application/json'request.body = {  projectId: 'YOUR_PROJECT_ID',  presentation: {    slideList: [      {        templateKey: 'title-slide',        content: {          title: 'Hello, Pluslide!',          subtitle: 'My first presentation'        }      }    ]  }}.to_jsonresponse = http.request(request)data = JSON.parse(response.body)puts "Download URL: #{data['url']}"
import java.net.http.*;import java.net.URI;public class Main {    public static void main(String[] args) throws Exception {        String json = """            {                "projectId": "YOUR_PROJECT_ID",                "presentation": {                    "slideList": [                        {                            "templateKey": "title-slide",                            "content": {                                "title": "Hello, Pluslide!",                                "subtitle": "My first presentation"                            }                        }                    ]                }            }            """;        HttpClient client = HttpClient.newHttpClient();        HttpRequest request = HttpRequest.newBuilder()            .uri(URI.create("https://api.pluslide.com/v1/project/export"))            .header("Authorization", "Bearer YOUR_API_KEY")            .header("Content-Type", "application/json")            .POST(HttpRequest.BodyPublishers.ofString(json))            .build();        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());        System.out.println("Response: " + response.body());    }}

Step 5: Download Your Presentation

The API response contains a direct download URL:

{
  "url": "https://assets.pluslide.com/presentations/abc123.pptx"
}

Open this URL in a browser or use it in your application to download the PPTX file.

Testing with the Playground

Not sure about your field keys or content structure? Use the Playground to:

  • Select any template from your projects
  • Preview with sample data
  • Generate test presentations
  • Copy the exact request body for API calls

On this page