# PowerPoint Generator API

Automate PowerPoint Generation

Welcome to PowerPointGeneratorAPI.&#x20;

PowerPointGeneratorAPI enables you to create, edit and fill PowerPoint presentations through simple API requests.

<figure><img src="/files/XQmCceuiGr8UjBdKxrT0" alt=""><figcaption></figcaption></figure>

### Quick start

Learn how to make a successful API request in 3 easy steps.


# Quick start

Get started in 3 easy steps

## Objective <a href="#prereqs" id="prereqs"></a>

Generate a fresh presentation by utilizing a PowerPoint template and JSON data via a request to the PowerPoint-Generator-API service.&#x20;

Watch the step-by-step overview before diving in.

{% embed url="<https://youtu.be/Yb-UqZFeIJ8>" %}

## Step 1. Create an account

Sign up to PowerPoint-Generator-API [here](https://powerpointgeneratorapi.com/). Make a note of your email address, password and API key. You will need these to create an authentication token.

{% hint style="info" %}
API key will be emailed to you.&#x20;
{% endhint %}

## Step 2. Create an authentication token

All API calls require authentication. You can create an authentication token manually using the [Web Console](https://powerpointgeneratorapi.com/managebearertoken) or programmatically using the POST below.&#x20;

## Create authentication token

<mark style="color:green;">`POST`</mark> `https://auth.powerpointgeneratorapi.com/v1.0/token/create`

This endpoint enables you to create an authentication token. You will need this for all requests to the API. \
\
**Your  authentication token is only valid for 24 hours.** Once your token has expired you will need to request a new token.&#x20;

#### Headers

| Name                                           | Type   | Description         |
| ---------------------------------------------- | ------ | ------------------- |
| Content-Type<mark style="color:red;">\*</mark> | String | multipart/form-data |

#### Request Body

| Name                                       | Type   | Description           |
| ------------------------------------------ | ------ | --------------------- |
| username<mark style="color:red;">\*</mark> | String | your email address    |
| password<mark style="color:red;">\*</mark> | String | your account password |
| key<mark style="color:red;">\*</mark>      | String | your API key          |

{% tabs %}
{% tab title="200" %}

```
Success
```

{% endtab %}

{% tab title="400" %}

```
Bad Request 
```

{% endtab %}
{% endtabs %}

### Example Requests

{% tabs %}
{% tab title="cURL" %}

```bash
curl -d "username=<your_username>&password=<your_password>&key=<your_security_key>" \
     -X POST https://auth.powerpointgeneratorapi.com/v1.0/token/create
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

# API endpoint for token creation
url = "https://auth.powerpointgeneratorapi.com/v1.0/token/create"

# Your credentials and security key
credentials = {
    'username': '<your_username>',
    'password': '<your_password>',
    'key': '<your_security_key>'
}

# Headers for the HTTP request
headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
}

# Send a POST request to the API endpoint with credentials
response = requests.post(url, headers=headers, data=credentials)

# Print the response from the API
print(response.text)

```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
// Create a new FormData object to handle the form data
const formData = new FormData();
formData.append("username", "<your_username>");
formData.append("password", "<your_password>");
formData.append("key", "<your_security_key>");

// Define the options for the fetch request
const requestOptions = {
  method: 'POST',
  body: formData,          // Set the body of the request to the FormData object
  redirect: 'follow'       // Specify the redirect behavior
};

// Make a POST request to the authentication endpoint
fetch("https://auth.powerpointgeneratorapi.com/v1.0/token/create", requestOptions)
  .then(response => response.text())    // Parse the response as text
  .then(result => console.log(result)) // Log the result to the console
  .catch(error => console.error('Error:', error)); // Log any errors that occur

```

{% endtab %}

{% tab title="Postman" %}

1. Post: <https://auth.powerpointgeneratorapi.com/v1.0/token/create>
2. Select `form-data` in the `Body` tab
3. Populate the `KEY` and `VALUE` with your username, password and key
4. Hit `Send` to get your Token

<figure><img src="/files/zWk3oIcjWg8Iq0kVNVUY" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

## Step 3: Make a request to PowerPointGeneratorAPI

Download the ZIP folder below and extract its contents. Then, use Postman or any API client to send the `.pptx` template file and the JSON data file to the `generator/create` endpoint to generate your presentation.

{% file src="/files/RLsyTIWRs8VboUrUxrou" %}

## Create presentation

<mark style="color:green;">`POST`</mark> `https://gen.powerpointgeneratorapi.com/v1.0/generator/create`

#### Headers

| Name                                            | Type   | Description                 |
| ----------------------------------------------- | ------ | --------------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | String | multipart/form-data         |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer authentication token |

#### Request Body

| Name                                       | Type   | Description         |
| ------------------------------------------ | ------ | ------------------- |
| files<mark style="color:red;">\*</mark>    | Object | .pptx template file |
| jsonData<mark style="color:red;">\*</mark> | String | JSON payload        |

{% tabs %}
{% tab title="200 " %}

```
Success
```

{% endtab %}

{% tab title="400" %}

```javascript
Bad Request
```

{% endtab %}

{% tab title="401 " %}

```javascript
Unauthorized
```

{% endtab %}
{% endtabs %}

### Example Requests

{% tabs %}
{% tab title="cURL" %}

```csharp
curl --location --request POST 'https://gen.powerpointgeneratorapi.com/v1.0/generator/create' \
-H 'Content-Type: multipart/form-data' \
-H 'Authorization: Bearer <add_your_token_here>' \
-F 'files=@title_slide_template.pptx' \
-F 'jsonData={"presentation":{"template":"title_slide_template.pptx","export_version":"Pptx2010","resultFileName":"quick_start_example","slides":[{"type":"slide","slide_index":0,"shapes":[{"name":"Title 1","content":"Your generated PowerPoint presentation"},{"name":"Subtitle 2","content":"Create,fill and manage PowerPoint documents through simple API requests."}]}]}}'
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

auth_token = 'your_actual_token_here'

payload = {
    "jsonData": '''{
        "presentation": {
            "template": "title_slide_template.pptx",
            "export_version": "Pptx2013",
            "slides": [
                {
                    "type": "slide",
                    "slide_index": 0,
                    "shapes": [
                        {
                            "name": "Title 1",
                            "content": "Your generated PowerPoint presentation"
                        },
                        {
                            "name": "Subtitle 2",
                            "content": "Create, fill and manage PowerPoint documents through simple API requests."
                        }
                    ]
                }
            ]
        }
    }'''
}

with open("./title_slide_template.pptx", "rb") as pptx_file:
    files = [
        ('files', ('title_slide_template.pptx', pptx_file, 'application/vnd.openxmlformats-officedocument.presentationml.presentation'))
    ]
    
    try:
        print("⏳ Sending request...")
        response = requests.post(
            'https://gen.powerpointgeneratorapi.com/v1.0/generator/create',
            data=payload,
            files=files,
            headers={'Authorization': f'Bearer {auth_token}'},
            timeout=360
        )
        
        print("🚀 Response received!")
        
        # Validate response before saving
        if response.status_code == 200:
            with open("./generated.pptx", "wb") as output_file:
                output_file.write(response.content)
            print("✅ PowerPoint file generated successfully!")
        else:
            print(f"❌ Error: {response.status_code} - {response.text}")
    
    except requests.exceptions.RequestException as e:
        print(f"⚠️ Request failed: {e}")

```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const formData = new FormData();

  formData.append("jsonData", JSON.stringify('{"presentation":{"template":"url of title_slide_template.pptx","export_version":"Pptx2010","resultFileName":"quick_start_example","slides":[{"type":"slide","slide_index":0,"shapes":[{"name":"Title 1","content":"YourgeneratedPowerPointpresentation"},{"name":"Subtitle 2","content":"Create,fillandmanagePowerPointdocumentsthroughsimpleAPIrequests."}]}]}}'));

  const request = new XMLHttpRequest();
  request.open(
    "POST",
    "https://gen.powerpointgeneratorapi.com/v1.0/generator/create",
    true
  );
  request.setRequestHeader(
    "Authorization",
    "Bearer <add_your_token_here>"
  );

  request.responseType = "blob";

  request.onload = function () {
    if (request.readyState === request.DONE && request.status === 200) {
      var blob = new Blob([request.response], {
      type: "application/vnd.openxmlformats-officedocument.presentationml.presentation",
      });
      var link = document.createElement("a");
      link.href = window.URL.createObjectURL(blob);
      link.download = "generated.pptx";
      link.click();      
    }
  };

  request.send(formData);
```

{% endtab %}

{% tab title="Postman" %}

1. Select the `Authorization` tab,  enter your `Token` .

<figure><img src="/files/HxYtsXf5dpRrh6H4zXpk" alt=""><figcaption></figcaption></figure>

2. Select the `Body` tab, select `form-data` , add the two key-value parameters below:

<table><thead><tr><th width="116">KEY</th><th>VALUE</th></tr></thead><tbody><tr><td><code>files</code></td><td>upload/ attach the <code>.pptx</code> file from the <code>quick-start.zip</code> folder above</td></tr><tr><td><code>jsonData</code></td><td>Copy and paste the data from the <code>.json</code> file in the <code>quick-start.zip</code> folder above.</td></tr></tbody></table>

<figure><img src="/files/hBmd4IBlaScX8DCmwQbC" alt=""><figcaption></figcaption></figure>

3. Click the down arrow next to `Send` then select `Send and Download` . Once the result is successfully received, save the output as `.pptx`.

![](/files/jYPHKFy2jCkrtz6ajqFu)
{% endtab %}
{% endtabs %}

### Output .pptx file

You will receive a byte array that can be converted to a PowerPoint presentation. Your PowerPoint will contain a single slide that looks like this:

![](/files/KBfK5IqBqaX9e6Lul2lL)


# POST /token/create

Obtain an authentication token

All API calls require authentication. To obtain an authentication token you will require a `username`, `password` and your `security key` (this was emailed to you & accessible in the ).

## token/create

<mark style="color:green;">`POST`</mark> `https://auth.powerpointgeneratorapi.com/v1.0/token/create`

#### Headers

| Name                                           | Type   | Description         |
| ---------------------------------------------- | ------ | ------------------- |
| Content-Type<mark style="color:red;">\*</mark> | string | multipart/form-data |

#### Request Body

| Name                                       | Type   | Description                         |
| ------------------------------------------ | ------ | ----------------------------------- |
| username<mark style="color:red;">\*</mark> | string | Your account username/email address |
| password<mark style="color:red;">\*</mark> | string | Your account password               |
| key<mark style="color:red;">\*</mark>      | string | Your security key                   |

{% tabs %}
{% tab title="200: OK" %}

```json
{
  "isSuccess": true,
  "Message": null,
  "Result": {
    "Access_Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "Username": "example@domain.com",
    "hasSubscription": true
  }
}
```

{% endtab %}

{% tab title="400: Bad Request" %}

```json
{
  "isSuccess": false,
  "Message": "Missing required form fields: username or password.",
  "Result": {}
}
```

{% endtab %}

{% tab title="401: Unauthorized" %}

```json
{
  "isSuccess": false,
  "Message": "Invalid email / password combination.",
  "Result": {}
}
```

{% endtab %}

{% tab title="500: Internal Server Error" %}

```json
{
  "isSuccess": false,
  "Message": "Internal Server Error",
  "Result": {}
}
```

{% endtab %}
{% endtabs %}

### Example request

{% tabs %}
{% tab title="cURL" %}

```bash
curl -d "username=<your_username>&password=<your_password>&key=<your_security_key>" \
     -X POST https://auth.powerpointgeneratorapi.com/v1.0/token/create
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://auth.powerpointgeneratorapi.com/v1.0/token/create"
payload={'username': '<your_username>', 'password': '<your_password>', 'key': '<your_security_key>'}
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var formdata = new FormData();
formdata.append("username", "<your_username>");
formdata.append("password", "<your_password>");
formdata.append("key", "<your_security_key>");

var requestOptions = {
  method: 'POST',
  body: formdata,
  redirect: 'follow'
};

fetch("https://auth.powerpointgeneratorapi.com/v1.0/token/create", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

{% endtab %}

{% tab title="Postman" %}

1. Post: <https://auth.powerpointgeneratorapi.com/v1.0/token/create>
2. Select `form-data` in the `Body` tab
3. Populate the `KEY` and `VALUE` with your username, password and key
4. Hit `Send` to get your Bearer Token&#x20;

<figure><img src="/files/8GdsWjwWv6XZ4kSxj4G4" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}


# POST /generator/create

Use this endpoint to create a new presentation from a .pptx template file and JSON data . The call is **synchronous** — the connection stays open while the presentation is built, and the finished file comes back in the same response.

{% hint style="info" %}
**Synchronous or asynchronous?**

Both endpoints take exactly the same `files` and `jsonData` payload, use the same [token](https://docs.powerpointgeneratorapi.com/api-reference/token-create), and count towards the same [usage allowance](https://docs.powerpointgeneratorapi.com/api-reference/usage). If this endpoint is timing out on a large presentation, switch to [`generator/create-async`](broken://pages/d580027332a1bd0ad7f4c3bc9fd966aa86c2132d) — the request itself is unchanged, you only add the polling step.
{% endhint %}

|                      | <p><strong><code>generator/create</code></strong> </p><p><strong>(v1.0)</strong></p> | <p><a href="/pages/d24effcf91ad0a1ac104ec24125044f33ea45efb"><strong><code>generator/create-async</code></strong></a> </p><p><strong>(v2.0)</strong></p> |
| -------------------- | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Style                | Synchronous — one request                                                            | Asynchronous — submit, then poll                                                                                                                         |
| Response             | The `.pptx` file as a binary stream                                                  | JSON containing a job ID                                                                                                                                 |
| Connection held open | For the whole generation                                                             | Only long enough to upload the template and JSON                                                                                                         |
| Best for             | Small and medium decks, quick interactive calls                                      | Large decks — many slides, large tables, charts and images                                                                                               |
| Risk                 | Client, proxy or gateway timeouts on long jobs                                       | None — generation time is decoupled from the request                                                                                                     |

## generator/create

<mark style="color:green;">`POST`</mark> `https://gen.powerpointgeneratorapi.com/v1.0/generator/create`

#### Headers

| Name                                            | Type   | Description                 |
| ----------------------------------------------- | ------ | --------------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | String | multipart/form-data         |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer authentication token |

#### Request Body

| Name                                       | Type                   | Description                                  |
| ------------------------------------------ | ---------------------- | -------------------------------------------- |
| files<mark style="color:red;">\*</mark>    | File or array of files | .pptx template file(s), plus any image files |
| jsonData<mark style="color:red;">\*</mark> | String                 | JSON data                                    |

{% tabs %}
{% tab title="200: OK" %}
On success, the API returns the generated file as a binary stream (not JSON).

| Header              | Description                         |
| ------------------- | ----------------------------------- |
| Content-Type        | Matches the requested output format |
| Content-Disposition | Attachment; filename={filename}     |

Save the response body directly to a file to get the presentation.
{% endtab %}

{% tab title="400: Bad Request" %}
Returns a JSON error object describing what was invalid.

```json
{
    "statusCode": 400,
    "message": "Invalid input parameters",
    "details": "{more information}",
}
```

{% endtab %}

{% tab title="401: Unauthorized" %}

```json
{
  "statusCode": 401,
  "message": "Unauthorized",
  "detail": "The bearer token is missing, expired, or invalid."
}
```

{% endtab %}

{% tab title="429: Too Many Requests" %}

```json
{
  "statusCode": 429,
  "message": "Too Many Requests - usage or rate limit exceeded",
  "detail": "Too many requests: monthly slide limit exceeded."
}
```

{% endtab %}

{% tab title="500: Internal Server Error" %}

```json
{
  "statusCode": 500,
  "title": "Error",
  "detail": "An error occurred while generating the presentation. See server logs for details."
}
```

{% endtab %}
{% endtabs %}

### Example request

Dummy PowerPoint template used in examples below:

{% file src="/files/OoWw4SZNOWuE77CHRXjB" %}

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://gen.powerpointgeneratorapi.com/v1.0/generator/create' \
  -H 'Authorization: Bearer {add_your_token_here}' \
  -F 'files=@title_slide_template.pptx' \
  -F 'jsonData={"presentation":{"template":"title_slide_template.pptx","export_version":"Pptx2019","resultFileName":"quick_start_example","slides":[{"type":"slide","slide_index":0,"shapes":[{"name":"Title 1","content":"Your generated PowerPoint presentation"},{"name":"Subtitle 2","content":"Create, fill and manage PowerPoint documents through simple API requests."}]}]}}' \
  --output generated.pptx
```

{% endtab %}

{% tab title="Python" %}

```python
import json
import requests

TEMPLATE_PATH = './title_slide_template.pptx'   # where the file lives on disk
TEMPLATE_NAME = 'title_slide_template.pptx'     # upload name, same as jsonData "template"
API_TOKEN = 'eyJ...'                            # your bearer token

payload = {
    'jsonData': json.dumps({
        "presentation": {
            "template": TEMPLATE_NAME,
            "export_version": "Pptx2019",
            "resultFileName": "quick_start_example",
            "slides": [
                {
                    "type": "slide",
                    "slide_index": 0,
                    "shapes": [
                        {"name": "Title 1", "content": "Your generated PowerPoint presentation"},
                        {"name": "Subtitle 2", "content": "Create, fill and manage PowerPoint documents through simple API requests."},
                    ],
                }
            ],
        }
    })
}

with open(TEMPLATE_PATH, 'rb') as f:
    files = [
        ('files', (TEMPLATE_NAME, f,
                   'application/vnd.openxmlformats-officedocument.presentationml.presentation'))
    ]
    response = requests.post(
        'https://gen.powerpointgeneratorapi.com/v1.0/generator/create',
        data=payload,
        files=files,
        headers={'Authorization': f'Bearer {API_TOKEN}'},
        timeout=360,
    )

print(response.status_code, response.headers.get('Content-Type'))

if response.ok:
    with open("./generated.pptx", "wb") as out:
        out.write(response.content)
    print("saved generated.pptx", len(response.content), "bytes")
else:
    print(response.text)
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const TEMPLATE_NAME = "title_slide_template.pptx"; // upload name + JSON "template" (must match)
const API_TOKEN = "add_your_token_here";

const jsonData = {
  presentation: {
    template: TEMPLATE_NAME,
    export_version: "Pptx2019",
    resultFileName: "quick_start_example",
    slides: [
      {
        type: "slide",
        slide_index: 0,
        shapes: [
          { name: "Title 1", content: "Your generated PowerPoint presentation" },
          { name: "Subtitle 2", content: "Create, fill and manage PowerPoint documents through simple API requests." },
        ],
      },
    ],
  },
};

// templateFile is a File/Blob, e.g. from <input type="file" id="template">:
// const templateFile = document.getElementById("template").files[0];

async function generate(templateFile) {
  const formData = new FormData();
  formData.append("jsonData", JSON.stringify(jsonData));
  formData.append("files", templateFile, TEMPLATE_NAME);

  const response = await fetch(
    "https://gen.powerpointgeneratorapi.com/v1.0/generator/create",
    {
      method: "POST",
      headers: { Authorization: `Bearer ${API_TOKEN}` },
      body: formData,
    }
  );

  if (!response.ok) {
    console.error(response.status, await response.text());
    return;
  }

  const blob = await response.blob();
  const link = document.createElement("a");
  link.href = URL.createObjectURL(blob);
  link.download = "generated.pptx";
  link.click();
  URL.revokeObjectURL(link.href);
}
```

{% endtab %}

{% tab title="Postman" %}
{% stepper %}
{% step %}

## Select Authorization

Select the `Authorization` tab, enter your `Token`.
{% endstep %}

{% step %}

## Configure the request body

Select the `Body` tab, select `form-data`, and add the two key-value parameters below:

<table><thead><tr><th width="116">KEY</th><th>VALUE</th></tr></thead><tbody><tr><td><code>files</code></td><td>upload/ attach your <code>.pptx</code> file</td></tr><tr><td><code>jsonData</code></td><td>copy and paste the data from your <code>.json</code> payload</td></tr></tbody></table>
{% endstep %}

{% step %}

## Send and download

Click the down arrow next to `Send`, then select `Send and Download`. Once the result is successfully received, save the output as `.pptx`.
{% endstep %}
{% endstepper %}
{% endtab %}
{% endtabs %}


# POST /generator/create-async

Use this endpoint to create a presentation from a .pptx template file and JSON data **without waiting for the file on the same connection**. The API accepts your request, returns a job ID immediately, and builds the presentation in the background. You then poll `jobs/{jobId}/status` until the job finishes and download the result from the link it returns.

{% hint style="info" %}
**Synchronous or asynchronous?**

Both endpoints take exactly the same `files` and `jsonData` payload, use the same [token](https://docs.powerpointgeneratorapi.com/api-reference/token-create), and count towards the same [usage allowance](https://docs.powerpointgeneratorapi.com/api-reference/usage). If a synchronous call is timing out, moving to the asynchronous endpoint is a drop-in change on the request side — you only add the polling step.
{% endhint %}

|                      | <p><a href="/pages/9af2e3608391b0c73a067947cbdf5bdb2900bd43"><strong><code>generator/create</code></strong></a> </p><p><strong>(v1.0)</strong></p> | <p><strong><code>generator/create-async</code></strong></p><p><strong>(v2.0)</strong></p> |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| Style                | Synchronous — one request                                                                                                                          | Asynchronous — submit, then poll                                                          |
| Response             | The `.pptx` file as a binary stream                                                                                                                | JSON containing a job ID                                                                  |
| Connection held open | For the whole generation                                                                                                                           | Only long enough to upload the template and JSON                                          |
| Best for             | Small and medium decks, quick interactive calls                                                                                                    | Large decks — many slides, large tables, charts and images                                |
| Risk                 | Client, proxy or gateway timeouts on long jobs                                                                                                     | None — generation time is decoupled from the request                                      |

{% stepper %}
{% step %}

## Submit the job

### generator/create-async

<mark style="color:green;">`POST`</mark> `https://gen.powerpointgeneratorapi.com/v2.0/generator/create-async`

#### Headers

| Name                                            | Type   | Description                 |
| ----------------------------------------------- | ------ | --------------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | String | multipart/form-data         |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer authentication token |

#### Request Body

| Name                                       | Type                   | Description                                  |
| ------------------------------------------ | ---------------------- | -------------------------------------------- |
| files<mark style="color:red;">\*</mark>    | File or array of files | .pptx template file(s), plus any image files |
| jsonData<mark style="color:red;">\*</mark> | String                 | JSON data                                    |

{% tabs %}
{% tab title="202: Accepted" %}
The job has been queued. Keep the `job_id` — you need it to check the status and collect the file.

```json
{
  "job_id": "3f9c1a72-58d4-4f0e-9a7b-2c6d0b1e84af",
  "status": "QUEUED"
}
```

A successful submission may be returned as either `200 OK` or `202 Accepted`. Treat both as success.
{% endtab %}

{% tab title="400: Bad Request" %}
Returns a JSON error object describing what was invalid.

```json
{
    "statusCode": 400,
    "message": "Invalid input parameters",
    "details": "{more information}",
}
```

{% endtab %}

{% tab title="401: Unauthorized" %}

```json
{
  "statusCode": 401,
  "message": "Unauthorized",
  "detail": "The bearer token is missing, expired, or invalid."
}
```

{% endtab %}

{% tab title="429: Too Many Requests" %}

```json
{
  "statusCode": 429,
  "message": "Too Many Requests - usage or rate limit exceeded",
  "detail": "Too many requests: monthly slide limit exceeded."
}
```

{% endtab %}

{% tab title="500: Internal Server Error" %}

```json
{
  "statusCode": 500,
  "title": "Error",
  "detail": "An error occurred while queuing the presentation. See server logs for details."
}
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
A success response here means the job was **accepted**, not that the presentation was built successfully. Problems with your template or JSON payload surface later, on the status endpoint, as a `FAILED` job.
{% endhint %}
{% endstep %}

{% step %}

## Check the job status

### jobs/{jobId}/status

<mark style="color:green;">`GET`</mark> `https://gen.powerpointgeneratorapi.com/v2.0/jobs/{jobId}/status`

#### Path Parameters

| Name                                    | Type   | Description                                       |
| --------------------------------------- | ------ | ------------------------------------------------- |
| jobId<mark style="color:red;">\*</mark> | String | The `job_id` returned by `generator/create-async` |

#### Headers

| Name                                            | Type   | Description                 |
| ----------------------------------------------- | ------ | --------------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer authentication token |

{% tabs %}
{% tab title="200: OK" %}
A job moves through `QUEUED` → `PROCESSING` → `SUCCEEDED` or `FAILED`.

| Status       | Meaning                                                        |
| ------------ | -------------------------------------------------------------- |
| `QUEUED`     | Accepted and waiting to be picked up. Keep polling.            |
| `PROCESSING` | The presentation is being generated. Keep polling.             |
| `SUCCEEDED`  | The presentation is ready to download. Stop polling.           |
| `FAILED`     | Generation failed. `error_message` explains why. Stop polling. |

**While the job is running**

```json
{
  "status": "PROCESSING",
  "error_message": null,
  "file_url": null
}
```

**When the job has succeeded**

```json
{
  "status": "SUCCEEDED",
  "error_message": null,
  "file_url": "https://pptx-gen-async.s3.eu-west-1.amazonaws.com/jobs/3f9c1a72-58d4-4f0e-9a7b-2c6d0b1e84af/result/quick_start_example.pptx?X-Amz-Expires=900&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...&X-Amz-Date=20260829T131247Z&X-Amz-SignedHeaders=host&X-Amz-Signature=..."
}
```

Download the presentation from `file_url`. It is a pre-signed link generated by the API — use it exactly as returned rather than constructing it yourself. The file is named after the `resultFileName` in your `jsonData`.

**When the job has failed**

```json
{
  "status": "FAILED",
  "error_message": "{reason the presentation could not be generated}",
  "file_url": null
}
```

{% endtab %}

{% tab title="401: Unauthorized" %}

```json
{
  "statusCode": 401,
  "message": "Unauthorized",
  "detail": "The bearer token is missing, expired, or invalid."
}
```

{% endtab %}

{% tab title="404: Not Found" %}

```json
{
  "statusCode": 404,
  "message": "Not Found",
  "detail": "No job exists with the supplied jobId, or the job has expired."
}
```

{% endtab %}

{% tab title="500: Internal Server Error" %}

```json
{
  "statusCode": 500,
  "title": "Error",
  "detail": "An error occurred while retrieving the job status. See server logs for details."
}
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
`file_url` is a pre-signed link that expires **15 minutes** after the status response is issued. Download the file promptly; if the link has expired, call the status endpoint again to get a fresh one.

Because the link is already signed, do **not** send your `Authorization` header with the download request — supplying two authentication mechanisms causes the download to be rejected.
{% endhint %}

{% hint style="info" %}
Poll every few seconds rather than in a tight loop — every 2 to 5 seconds is plenty. Always cap your polling with an overall timeout so a stuck job cannot block your application indefinitely.
{% endhint %}
{% endstep %}
{% endstepper %}

## Example request

Dummy PowerPoint template used in examples below:

{% file src="/files/3pxG0xHbIXVqbWKmgasX" %}

{% tabs %}
{% tab title="cURL" %}

```bash
# 1. Submit the job
curl --location --request POST 'https://gen.powerpointgeneratorapi.com/v2.0/generator/create-async' \
  -H 'Authorization: Bearer {add_your_token_here}' \
  -F 'files=@title_slide_template.pptx' \
  -F 'jsonData={"presentation":{"template":"title_slide_template.pptx","export_version":"Pptx2019","resultFileName":"quick_start_example","slides":[{"type":"slide","slide_index":0,"shapes":[{"name":"Title 1","content":"Your generated PowerPoint presentation"},{"name":"Subtitle 2","content":"Create, fill and manage PowerPoint documents through simple API requests."}]}]}}'

# {"job_id":"3f9c1a72-58d4-4f0e-9a7b-2c6d0b1e84af","status":"QUEUED"}

# 2. Poll the status until it reports SUCCEEDED
curl --location 'https://gen.powerpointgeneratorapi.com/v2.0/jobs/3f9c1a72-58d4-4f0e-9a7b-2c6d0b1e84af/status' \
  -H 'Authorization: Bearer {add_your_token_here}'

# {"status":"SUCCEEDED","error_message":null,"file_url":"https://pptx-gen-async.s3.eu-west-1.amazonaws.com/..."}

# 3. Download the finished presentation from the file_url returned in step 2.
#    It is a pre-signed link, so do not send the Authorization header.
curl --location '{file_url_from_step_2}' --output generated.pptx
```

{% endtab %}

{% tab title="Python" %}

```python
import json
import time
import requests

TEMPLATE_PATH = './title_slide_template.pptx'   # where the file lives on disk
TEMPLATE_NAME = 'title_slide_template.pptx'     # upload name, same as jsonData "template"
API_TOKEN = 'eyJ...'                            # your bearer token

ASYNC_URL = 'https://gen.powerpointgeneratorapi.com/v2.0/generator/create-async'
STATUS_URL = 'https://gen.powerpointgeneratorapi.com/v2.0/jobs/{jobId}/status'
HEADERS = {'Authorization': f'Bearer {API_TOKEN}'}

payload = {
    'jsonData': json.dumps({
        "presentation": {
            "template": TEMPLATE_NAME,
            "export_version": "Pptx2019",
            "resultFileName": "quick_start_example",
            "slides": [
                {
                    "type": "slide",
                    "slide_index": 0,
                    "shapes": [
                        {"name": "Title 1", "content": "Your generated PowerPoint presentation"},
                        {"name": "Subtitle 2", "content": "Create, fill and manage PowerPoint documents through simple API requests."},
                    ],
                }
            ],
        }
    })
}


def submit_async_job():
    """Submit the job and return its job ID."""
    with open(TEMPLATE_PATH, 'rb') as f:
        files = [
            ('files', (TEMPLATE_NAME, f,
                       'application/vnd.openxmlformats-officedocument.presentationml.presentation'))
        ]
        response = requests.post(
            ASYNC_URL,
            data=payload,
            files=files,
            headers=HEADERS,
            timeout=500,
        )

    # A successful submission is returned as either 200 or 202
    if response.status_code not in (200, 202):
        print(f"Error submitting async job: {response.status_code} - {response.text}")
        return None

    result = response.json()
    print(f"Async job submitted. Job ID: {result['job_id']}, initial status: {result['status']}")
    return result['job_id']


def get_job_status(job_id):
    """Retrieve the current status of an async job."""
    response = requests.get(
        STATUS_URL.format(jobId=job_id),
        headers=HEADERS,
        timeout=30,
    )
    if response.status_code != 200:
        print(f"Error fetching job status: {response.status_code} - {response.text}")
        return None
    return response.json()


def wait_for_job(job_id, poll_seconds=5, timeout_seconds=1800):
    """Poll until the job finishes, or give up after timeout_seconds."""
    deadline = time.time() + timeout_seconds

    while time.time() < deadline:
        job = get_job_status(job_id)
        if job is None:
            return None

        status = job.get("status")
        print(f"Job {job_id}: {status}")

        if status == "SUCCEEDED":
            return job
        if status == "FAILED":
            print(f"Generation failed: {job.get('error_message')}")
            return None

        time.sleep(poll_seconds)

    print(f"Timed out after {timeout_seconds}s waiting for job {job_id}")
    return None


job_id = submit_async_job()

if job_id:
    job = wait_for_job(job_id)
    if job:
        # file_url is pre-signed - do not send the Authorization header.
        # Stream the response so large presentations are not held in memory.
        with requests.get(job["file_url"], stream=True, timeout=360) as download:
            download.raise_for_status()
            with open("./generated.pptx", "wb") as out:
                for chunk in download.iter_content(chunk_size=8192):
                    out.write(chunk)
        print("saved generated.pptx")
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const TEMPLATE_NAME = "title_slide_template.pptx"; // upload name + JSON "template" (must match)
const API_TOKEN = "add_your_token_here";

const ASYNC_URL = "https://gen.powerpointgeneratorapi.com/v2.0/generator/create-async";
const STATUS_URL = (jobId) => `https://gen.powerpointgeneratorapi.com/v2.0/jobs/${jobId}/status`;
const HEADERS = { Authorization: `Bearer ${API_TOKEN}` };

const jsonData = {
  presentation: {
    template: TEMPLATE_NAME,
    export_version: "Pptx2019",
    resultFileName: "quick_start_example",
    slides: [
      {
        type: "slide",
        slide_index: 0,
        shapes: [
          { name: "Title 1", content: "Your generated PowerPoint presentation" },
          { name: "Subtitle 2", content: "Create, fill and manage PowerPoint documents through simple API requests." },
        ],
      },
    ],
  },
};

const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

// templateFile is a File/Blob, e.g. from <input type="file" id="template">:
// const templateFile = document.getElementById("template").files[0];

async function submitAsyncJob(templateFile) {
  const formData = new FormData();
  formData.append("jsonData", JSON.stringify(jsonData));
  formData.append("files", templateFile, TEMPLATE_NAME);

  const response = await fetch(ASYNC_URL, {
    method: "POST",
    headers: HEADERS,
    body: formData,
  });

  // A successful submission is returned as either 200 or 202
  if (response.status !== 200 && response.status !== 202) {
    console.error(response.status, await response.text());
    return null;
  }

  const result = await response.json();
  console.log(`Async job submitted. Job ID: ${result.job_id}, initial status: ${result.status}`);
  return result.job_id;
}

async function waitForJob(jobId, pollMs = 5000, timeoutMs = 1800000) {
  const deadline = Date.now() + timeoutMs;

  while (Date.now() < deadline) {
    const response = await fetch(STATUS_URL(jobId), { headers: HEADERS });
    if (!response.ok) {
      console.error(response.status, await response.text());
      return null;
    }

    const job = await response.json();
    console.log(`Job ${jobId}: ${job.status}`);

    if (job.status === "SUCCEEDED") return job;
    if (job.status === "FAILED") {
      console.error(`Generation failed: ${job.error_message}`);
      return null;
    }

    await sleep(pollMs);
  }

  console.error(`Timed out waiting for job ${jobId}`);
  return null;
}

async function generate(templateFile) {
  const jobId = await submitAsyncJob(templateFile);
  if (!jobId) return;

  const job = await waitForJob(jobId);
  if (!job) return;

  // file_url is pre-signed - do not send the Authorization header
  const download = await fetch(job.file_url);
  const blob = await download.blob();
  const link = document.createElement("a");
  link.href = URL.createObjectURL(blob);
  link.download = "generated.pptx";
  link.click();
  URL.revokeObjectURL(link.href);
}
```

{% endtab %}

{% tab title="Postman" %}
{% stepper %}
{% step %}
Select the `Authorization` tab, enter your `Token`.
{% endstep %}

{% step %}
Select the `Body` tab, select `form-data`, add the two key-value parameters below:

| KEY           | VALUE                                             |
| ------------- | ------------------------------------------------- |
| `files`       | upload/ attach your `.pptx` file                  |
| `jsonData`    | copy and paste the data from your `.json` payload |
| {% endstep %} |                                                   |

{% step %}
`POST` to <https://gen.powerpointgeneratorapi.com/v2.0/generator/create-async> and copy the `job_id` from the response.
{% endstep %}

{% step %}
Open a new request, `GET` `https://gen.powerpointgeneratorapi.com/v2.0/jobs/{jobId}/status` with the same `Authorization` token, and hit `Send` every few seconds until `status` is `SUCCEEDED`.
{% endstep %}

{% step %}
Open a third request, `GET` the `file_url` from the status response with **no** `Authorization` header, then click the down arrow next to `Send` and select `Send and Download` to save the output as `.pptx`.
{% endstep %}
{% endstepper %}
{% endtab %}
{% endtabs %}


# POST /usage

Check your plan and usage data

Use this endpoint to learn about your usage data.

## /usage

<mark style="color:green;">`GET`</mark> `https://gen.powerpointgeneratorapi.com/v1.0/usage`

#### Headers

| Name                                            | Type   | Description     |
| ----------------------------------------------- | ------ | --------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer \<token> |

{% tabs %}
{% tab title="200: OK" %}

```json
{
  "result": {
    "usedSlideCount": 0,
    "plan": "small_business",
    "allowedSlideCount": 1500,
    "subscriptions": [],
    "resetDate": "22 August 2026",
    "totalApiCallCount": 0,
    "successfulApiCallCount": 0,
    "failedApiCallCount": 0,
    "previousMonthUsedSlideCount": 156,
    "subscriptionStartDate": "datetime"
  },
  "isSuccess": true,
  "message": null,
  "fileName": null,
  "fileNameFullPath": null,
  "isValidJson": false,
  "resultType": 0
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```json
{
    "statusCode": 400,
    "message": "Invalid input parameters",
    "details": "{more information}",
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```json
{
  "statusCode": 401,
  "message": "Unauthorized",
  "detail": "The bearer token is missing, expired, or invalid."
}
```

{% endtab %}

{% tab title="429:  Too Many Requests" %}

```json
{
  "statusCode": 429,
  "message": "Too Many Requests - usage or rate limit exceeded",
  "detail": "Too many requests: monthly slide limit exceeded."
}
```

{% endtab %}

{% tab title="500: Internal Server Error" %}

```json
{
  "statusCode": 429,
  "title": "Error",
  "detail": "An error occurred while generating the presentation. See server logs for details."
}
```

{% endtab %}
{% endtabs %}

### Example request

{% tabs %}
{% tab title="cURL" %}

```http
curl --location 'https://gen.powerpointgeneratorapi.com/v1/usage'
--header 'Accept: application/json'
--header 'Authorization: Bearer {add_your_token_here}'
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

response = requests.get(
    "https://gen.powerpointgeneratorapi.com/v1/usage",
    headers={
        "Accept": "application/json",
        "Authorization": "Bearer {add_your_token_here}",
    },
)

print(response.json())
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const response = await fetch("https://gen.powerpointgeneratorapi.com/v1/usage", {
  method: "GET",
  headers: {
    "Accept": "application/json",
    "Authorization": "Bearer {add_your_token_here}",
  },
});

const data = await response.json();
console.log(data);
```

{% endtab %}
{% endtabs %}


# Key concepts

In this page you’ll find basic concepts you need to successfully use PowerPointGeneratorAPI.

## Presentations

The outermost container in PowerPointGeneratorAPI is called a Presentation.

A presentation contains a list of pages. Each page contains a list of shapes.<br>

## Pages

There are 3 types of pages.

| Page Type     | Description                                                                                                                                                                                                                                                                                   |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Slide Masters | <p>Slide Masters define the default text styles, background, and page elements that appear in all of the slides that use this master. Shapes that must appear on all slides should be added to the master.<br></p><p>Most presentations have one Slide Master, but some may have several.</p> |
| Slide Layouts | Slide Layouts serve as a template for how shapes will be arranged by default on slides using a layout. Each layout is associated with a Slide Master.                                                                                                                                         |
| Slides        | <p>These pages contain the content you are presenting to your audience.</p><p><br>Most slides are based on a Slide Master and a Slide Layout. You can specify which layout to use for each slide when it is created.</p>                                                                      |

## Shapes

Everything on a page is a shape. There are different types of shapes, each one with its own set of behaviors.

| Shape Type | Description                                                                                                                                                                                                                                                       |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Textbox    | A Text box shape is designed to display text content.                                                                                                                                                                                                             |
| Picture    | A Picture shape is a graphic, like a drawing, a photo or any kind of image that has been imported into your PowerPoint presentation.                                                                                                                              |
| Table      | A Table shape is an array of rows and columns (cells) to contain data you want to show in your presentation.                                                                                                                                                      |
| Chart      | <p>A Chart shape is a visual representation of data.</p><p></p><p>You’ll find a few examples of different charts in the Charts section in this documentation. That’s a limited list, PowerPoint Generator API supports almost any chart you can come up with.</p> |


# Templating your presentation

Using template PowerPoint with slides enables you to style and layout your API generated presentation exactly how you want it.

There are two methods for including your template PowerPoint file for an API request.&#x20;

&#x20;    [Option 1. Include a URL link to your .pptx template file in your API request.](#option-1-include-your-template-file-using-a-url-link)\
&#x20;    [Option 2. Attach the .pptx template file in your API request. ](#option-2-attach-your-template-file-directly)

## Option 1: Include your template file using a URL link

If your template PowerPoint file is large, it may be optimal to use a downloadable URL link to your template presentation.&#x20;

Here's how to share your template PowerPoint file with the API, via a link:

1\. Save your template PowerPoint presentation somewhere you can create an open download link. Here's how to do it with Google Drive:&#x20;

&#x20;    1.1. Upload your template PowerPoint file to Google Drive.

&#x20;    1.2. Right Click on your file and select ‘Get Link’.

&#x20;    1.3. In the Get link window, make sure the section General access is "Anyone with the link".

&#x20;    1.4. Click the ‘Copy Link’.

&#x20;    1.5. Convert your link from a 'Sharing' link to a 'Download' link using this free tool: <https://sites.google.com/site/gdocs2direct/>

![](/files/syCE687hzTNA2Qg13eqi)

2\. Include the download URL link to your template PowerPoint file in your JSON payload:

```javascript
{
  "presentation": {
    "template": "https://drive.google.com/uc?export=download&id=1-9mrTXvFaVSwJTU7F_3eKJzRY3TUR_tE",
    "export_version": "Pptx2019",
      ....
```

Using this method you will only need to refer to the download link, without needing to send the template file.&#x20;

### Creating your first presentation

<mark style="color:green;">`POST`</mark> `https://gen.powerpointgeneratorapi.com/v1.0/generator/create`

#### Headers

<table><thead><tr><th width="238">Name</th><th width="125">Type</th><th>Description</th></tr></thead><tbody><tr><td>Content-Type<mark style="color:red;">*</mark></td><td>string</td><td>application/x-www-form-urlencoded</td></tr><tr><td>Authorization<mark style="color:red;">*</mark></td><td>string</td><td>Bearer authorization token</td></tr></tbody></table>

#### Request Body

<table><thead><tr><th width="243">Name</th><th width="129">Type</th><th>Description</th></tr></thead><tbody><tr><td>jsonData<mark style="color:red;">*</mark></td><td>string</td><td>JSON payload which contains the presentation definition </td></tr></tbody></table>

{% tabs %}
{% tab title="200 " %}

```
Success!
```

{% endtab %}

{% tab title="404" %}

```
Not found!
```

{% endtab %}
{% endtabs %}

## Option 2: Attach your template file directly

If your template PowerPoint file is small, or you have concerns over creating an unrestricted download link to your template presentation, you can opt to send it along with every request to the API:&#x20;

1. Include your template PowerPoint file as a "file" with your POST request to the API.&#x20;
2. Include a reference to your template file by name in the JSON payload:

```javascript
{
  "presentation": {
    "template": "slides_as_template.pptx",
    "export_version": "Pptx2019",
    ....
```

### Creating your first presentation

<mark style="color:green;">`POST`</mark> `https://gen.powerpointgeneratorapi.com/v1.0/generator/create`

#### Headers

| Name                                             | Type   | Description                 |
| ------------------------------------------------ | ------ | --------------------------- |
| Content-Type<mark style="color:red;">\*</mark>   | string | multipart/form-data         |
| Authentication<mark style="color:red;">\*</mark> | string | Bearer authentication token |

#### Request Body

| Name                                       | Type   | Description                                             |
| ------------------------------------------ | ------ | ------------------------------------------------------- |
| files                                      | object | PPTX file used as styling and layout template           |
| jsonData<mark style="color:red;">\*</mark> | string | JSON payload which contains the presentation definition |

{% tabs %}
{% tab title="200 " %}

```
Success 
```

{% endtab %}

{% tab title="404" %}

```
Not found!
```

{% endtab %}
{% endtabs %}


# Building your JSON payload

and configuring your presentation.

Here we outline the component parts of the JSON payload necessary for creating a presentation.&#x20;

### Referencing your template PowerPoint file

First you must tell the API where to retrieve the PowerPoint file that contains the slides you intend to use as templates for your presentation. You will either refer to the template PowerPoint file by its name, or the link where it can be downloaded.&#x20;

In this case we are sending the template PowerPoint file directly with the POST request:

```javascript
{
  "presentation": {
    "template": "slides_as_template.pptx",
    "export_version": "Pptx2019",
    ....
```

Refer to [Templating your presentation](https://app.gitbook.com/@adambaker/s/json-to-pptx/~/drafts/-Mkb5A8tT0R978I1ByGW/creatine-a-new-presentation/slide-as-template) for more on sharing template PowerPoint files.&#x20;

### Defining your slides:

For each slide you want to create, you will need to build an object in the "slides" array:

```json
....
  "slides": [
    {
      ...shape objects...
    }
  ]
....
```

### Template type and which slide to use:

For each slide object you are required to specify the type of slide you want to use as template. In this case we are using a **slide** from our template PowerPoint file.

Additionally you are required to choose which template slide to use as template for your new slide (zero-based):

```bash
....
  "type": "slide",
  "slide_index": 0,
....
```

### Updating your shapes

Within your slide object you can refer to an array of shape objects.&#x20;

Everything on a slide is a shape. Each shape object has a name. To select and populate a specific shape, you must reference it by **name**. To find a specific shape by name see [here](https://docs.powerpointgeneratorapi.com/creatine-a-new-presentation/finding-shape-names-slides-as-template). Then you can specify the content you want placed into that shape on your slide. In this case we are adding a string to a text shape:

```bash
....
  "shapes": [
    {
      "name": "Title 1",
      "content": "Automate PowerPoint Generation"
    }
  ]
....
```

## Complete example payload

Payload below will generate a PowerPoint presentation with two slides, populating a textbox on slide one and a chart on slide two whilst retaining the styling of the two slides from the template PowerPoint file:

Template Presentation

{% file src="/files/-Mj4nNSqMXRJcPx-vlBq" %}

JSON Payload

```javascript
{
   "presentation":{
      "template":"slides_as_template.pptx",
      "export_version":"Pptx2010",
      "slides":[
         {
            "type":"slide",
            "slide_index":0,
            "shapes":[
               {
                  "name":"Title 1",
                  "text":"Automate PowerPoint Generation"
               }
            ]
         },
         {
            "type":"slide",
            "slide_index":1,
            "shapes":[
               {
                  "name":"Chart 14",
                  "title":"Average Annual Precipitations",
                  "data":[
                     [
                        "North",
                        "South",
                        "East",
                        "West"
                     ],
                     [
                        "January",
                        "February",
                        "March"
                     ],
                     [
                        11,
                        15,
                        4,
                        7
                     ],
                     [
                        25,
                        60,
                        77,
                        30
                     ],
                     [
                        40,
                        50,
                        65,
                        44
                     ]
                  ]
               }
            ]
         }
      ]
   }
}
```

## Using above payload, create a presentation using slide as template

<mark style="color:green;">`POST`</mark> `https://gen.powerpointgeneratorapi.com/v1.0/generator/create`

#### Headers

| Name                                            | Type   | Description                |
| ----------------------------------------------- | ------ | -------------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | string | multipart/form-data        |
| Authorization<mark style="color:red;">\*</mark> | string | Bearer authorization token |

#### Request Body

| Name                                       | Type   | Description                                              |
| ------------------------------------------ | ------ | -------------------------------------------------------- |
| files                                      | object | PPTX file used as styling and layout template            |
| jsonData<mark style="color:red;">\*</mark> | string | JSON payload which contains  the presentation definition |

{% tabs %}
{% tab title="200 " %}

```
Success
```

{% endtab %}
{% endtabs %}


# Finding shape names

To update the shapes in your PowerPoint template, you'll need to find their names first.

1. Open your template presentation in PowerPoint.
2. In the `Home` tab, find `Arrange` and select `Selection Pane`.

![](/files/-Mj96kjuQ73yq1ih8yOi)

3\. The panel on the right will highlight the name of the shapes. Copy the shape names you wanted to populate and customise.&#x20;

![](/files/-Mj970qgqL1QSVRASqOY)

{% hint style="warning" %}

## PowerPoint allows duplicate shape names, which can cause errors—rename the shapes yourself to make each one unique and fix the problem.

{% endhint %}

## Example payload

We've taken the shape name "Title 1" from our template slide and used it in our payload:

```javascript
{
  "presentation": {
    "template": "slides_as_template.pptx",
    "export_version": "Pptx2019",
    "slides": [
     {
        "type": "slide",
        "slide_index": 0,
        "shapes": [
           {
             "name": "Title 1",
             "text": "Automate PowerPoint Generation"
           }
        ]
      }
    ]
  }
}
```


# presentation

Hierarchy: presentation

The **`presentation`** object is the root object. Below are the parameters and objects within it:

<table><thead><tr><th width="174">Parameter</th><th width="93">Type</th><th width="138">Input</th><th>Description</th></tr></thead><tbody><tr><td>template </td><td>String</td><td></td><td><p><mark style="color:red;">[required]</mark> Specifies the base presentation template. This can be either:</p><p></p><ol><li>A filename (e.g., "my_template.pptx"): In this case, the request Content-Type must be multipart/form-data, and the actual template file must be uploaded as part of the request. The value of this template field in the JSON payload should be the name of the uploaded file.</li><li>A downloadable URL (e.g., "https://.../template.pptx"): The API server will attempt to download the template from this URL. The request Content-Type should be application/json.</li></ol></td></tr><tr><td>export_version</td><td>String (Enum)</td><td><p><code>Pptx2007</code>,</p><p><code>Pptx2010</code>,</p><p><code>Pptx2013</code>,</p><p><code>Pptx2016</code>,</p><p><code>Pptx2019</code>,</p><p><code>PDF</code></p></td><td><mark style="color:yellow;">[optional]</mark> File format the output presentation should use.</td></tr><tr><td>resultFileName</td><td>String</td><td></td><td><mark style="color:yellow;">[optional]</mark> Name of output presentation.</td></tr><tr><td>slides </td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> An array of <a href="/pages/tc4HtIVVIQg1HoOvuopF"><mark style="color:blue;"><strong>slide objects</strong></mark></a>.</td></tr></tbody></table>

JSON Payload&#x20;

{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template_name.pptx",
    "export_version": "Pptx2019",
    "resultFileName": "string",
    "slides": []
  }
}
```

{% endcode %}


# slides

Hierarchy: presentation > slides

Each **`slide`** object will result in a single slide in the output presentation. Multiple **`slide`** objects may point to the same template slide number, in which case that template slide will be reused multiple times.

<table><thead><tr><th width="184.5">Parameter</th><th width="129">Type</th><th width="140.25">Input</th><th>Description</th></tr></thead><tbody><tr><td>slide_index</td><td>Integer</td><td>int </td><td><mark style="color:red;">[required if <code>slide_id</code> not provided]</mark> Slide template number to use. Zero-based.</td></tr><tr><td>slide_id</td><td>Integer</td><td>int</td><td><mark style="color:red;">[required if <code>slide_index</code>  not provided]</mark> A unique identifier of a given slide. This ID is not displayed in the document, it's hidden in the xml. </td></tr><tr><td>shapes</td><td><mark style="color:blue;">Object</mark></td><td></td><td><p><mark style="color:yellow;">[optional]</mark> An array of shape objects. </p><p>See <a href="/pages/RQKYKA3C8xfTVOiq0Yh1"><mark style="color:blue;"><strong>textbox</strong></mark></a>, <a href="/pages/f28OcryVOrnvy1yeJqpK"><mark style="color:blue;"><strong>table</strong></mark></a>, <a href="/pages/O3a7Yxqh09TeG2XF2YNg"><mark style="color:blue;"><strong>chart</strong></mark></a>, <a href="/pages/5JXj57BdJ3HruF6Oyj3c"><mark style="color:blue;"><strong>image</strong></mark></a><mark style="color:blue;"><strong>.</strong></mark></p></td></tr><tr><td>slide_background_fill</td><td>String </td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set slide background color.</td></tr><tr><td>notes</td><td>String or <mark style="color:blue;">Object</mark></td><td></td><td><p><mark style="color:yellow;">[optional]</mark> Represents slide notes. </p><p></p><p>- <strong>String</strong>: A simple way to display plain text in the slide notes.</p><p></p><p>- <strong>Object</strong>: Use for advanced formatting by defining text chunks. See the <a href="#text-object"><mark style="color:blue;"><strong>text object</strong></mark></a> structure.</p></td></tr><tr><td>tags </td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> An array of <a href="/pages/E8wt2pQGFogkAF68Rbcr"><mark style="color:blue;"><strong>tag objects</strong></mark></a><mark style="color:blue;"><strong>.</strong></mark> Shorthand way of updating keys (text) with values on a slide level. </td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"slides": [
 {
   "slide_index": int,
   "shapes": [],
   "slide_background_fill": "#000000",
   "notes": string,
   "tags": []
 },
 {
   "slide_id": int,
   "shapes": [],
   "slide_background_fill": "0,0,0",
   "notes": [],
   "tags": []
 }
]
```

{% endcode %}


# shapes

Hierarchy: presentation > slides > shapes

Everything on a slide is a **`shape`** object. There are several different types of shapes (table shape, chart shape). Each shape type comes with its own set of unique properties. Below are parameters which can be used on any type of shape.

To access a shape, you must connect to it using the shape's `name`.&#x20;

<table><thead><tr><th width="155">Parameter</th><th width="98">Type</th><th width="124">Input</th><th>Description</th></tr></thead><tbody><tr><td>name</td><td>String</td><td></td><td><mark style="color:red;">[required if <code>shape_id</code> not provided]</mark> Name of shape to update/manipulate. Find shape names <a href="https://docs.powerpointgeneratorapi.com/knowledge-base/finding-shape-names">here</a>.</td></tr><tr><td>shape_id</td><td>int</td><td></td><td><mark style="color:red;">[required if <code>name</code> not provided]</mark> A unique identifier of a given shape. This ID is not displayed in the document, it's hidden in the xml. </td></tr><tr><td>settings</td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> An array of <a href="/pages/RQKYKA3C8xfTVOiq0Yh1#settings-object"><mark style="color:blue;"><strong>settings object</strong></mark></a></td></tr><tr><td>is_hidden</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Hide shape </td></tr><tr><td>remove</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Delete shape </td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"shapes": [
  {
    "name": "string",
    "settings": [],
    "is_hidden": boolean,
    "remove": boolean
   },
  {
    "shape_id": int,
    "settings": [],
    "is_hidden": boolean,
    "remove": boolean
   } 
]
```

{% endcode %}

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

## Settings Object

The **`settings`** object contain a list format/styling parameters. &#x20;

<table><thead><tr><th width="130">Parameter</th><th width="109">Type</th><th width="243">Input</th><th>Description</th></tr></thead><tbody><tr><td>width</td><td><p>Integer,</p><p>Float</p></td><td><p>0 to 5963.92</p><p> </p></td><td><mark style="color:yellow;">[optional]</mark> Set shape width</td></tr><tr><td>height</td><td><p>Integer,</p><p>Float</p></td><td>0 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set shape height</td></tr><tr><td>left</td><td><p>Integer,</p><p>Float</p></td><td>-5963.92 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set left position</td></tr><tr><td>top</td><td><p>Integer,</p><p>Float</p></td><td>-5963.92 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set top position</td></tr><tr><td>unit</td><td>String</td><td><p><code>cm</code>,</p><p><code>pt</code>,</p><p><code>points</code> (default value if ‘unit’ field is not specified)</p></td><td><mark style="color:yellow;">[optional]</mark> Set unit of measurement for shape <code>width</code>, <code>height</code>, <code>left</code>, <code>top</code></td></tr><tr><td>fill_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set shape background color</td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"settings": {
  "height": numeric,
  "width": numeric,
  "top": numeric,
  "left": numeric,
  "unit": "string",
  "fill_color": "0,0,0"
}
```

{% endcode %}


# textbox

Hierarchy: presentation > slides > shapes

A **`textbox`** is a type of shape which is used to display text.&#x20;

<table><thead><tr><th width="155">Parameter</th><th width="98">Type</th><th width="124">Input</th><th>Description</th></tr></thead><tbody><tr><td>name</td><td>String</td><td></td><td><mark style="color:red;">[required if <code>shape_id</code> not provided]</mark> Name of shape to update/manipulate. Find shape names <a href="https://docs.powerpointgeneratorapi.com/knowledge-base/finding-shape-names">here</a>.</td></tr><tr><td>shape_id</td><td>int</td><td></td><td><mark style="color:red;">[required if <code>name</code> not provided]</mark> A unique identifier of a given shape. This ID is not displayed in the document, it's hidden in the xml. </td></tr><tr><td>text</td><td>String or <mark style="color:blue;">Object</mark> </td><td></td><td><p><mark style="color:yellow;">[optional]</mark> Text to display in the textbox:</p><p></p><p>- <strong>String</strong>: A simple way to display plain text in the textbox.</p><p></p><p>- <strong>Object</strong>: Use for advanced formatting by defining text chunks. See <a href="#text-object"><mark style="color:blue;"><strong>text object</strong></mark></a> for more information.</p></td></tr><tr><td>settings</td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> An array of shape-level settings. See <a href="/pages/RQKYKA3C8xfTVOiq0Yh1#settings-object"><mark style="color:blue;"><strong>settings object</strong></mark></a> for more information.</td></tr><tr><td>is_hidden</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Hide shape </td></tr><tr><td>remove</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Delete shape </td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"shapes": [
  {
    "name": "string",
    "text": "string",
    "settings": [],
    "is_hidden": boolean,
    "remove": boolean
   },
  {
    "name": "string",
    "text": [],
    "settings": [],
    "is_hidden": boolean,
    "remove": boolean
   } 
]
```

{% endcode %}

***

## \`text\` Object

An array of text objects, where each object represents a part of the text with its own text content and optional properties.

<table><thead><tr><th width="179">Parameter</th><th width="120">Type</th><th width="110">Input</th><th>Description</th></tr></thead><tbody><tr><td>text_run</td><td>String</td><td></td><td><mark style="color:red;">[required]</mark> Text chunk </td></tr><tr><td>text_properties</td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> A <a href="#text_properties-object"><mark style="color:blue;"><strong>text styling object</strong></mark></a>. List of font styling parameters to override existing styles for the given chunk of text. </td></tr></tbody></table>

JSON Payload

{% code lineNumbers="true" %}

```json
"text": [
  {
    "text_run": "This is part 1 of my sentence.",
    "text_properties": {}
  },
  {
    "text_run": "This is part 2 of my sentence.",
    "text_properties": {}
  }
]
```

{% endcode %}

***

### \`text\_properties\` Object

Text format properties.&#x20;

<table><thead><tr><th width="181">Parameter</th><th width="126">Type</th><th width="178">Input</th><th width="230">Description</th></tr></thead><tbody><tr><td>font_type</td><td>String</td><td>MS supported <a href="https://learn.microsoft.com/en-us/typography/font-list/#a">font names</a></td><td><mark style="color:yellow;">[optional]</mark> Font name</td></tr><tr><td>font_size</td><td>Integer</td><td>1 to 4000</td><td><mark style="color:yellow;">[optional]</mark> Font size</td></tr><tr><td>font_bold</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Bold </td></tr><tr><td>font_italic</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Italic </td></tr><tr><td>font_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set text color</td></tr><tr><td>font_bg_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set text background color</td></tr><tr><td>text_indent</td><td>Integer</td><td>0 to 142.24</td><td><mark style="color:yellow;">[optional]</mark> Set text indent</td></tr><tr><td>text_align</td><td>String (Enum)</td><td><p><code>left</code>,</p><p><code>center</code>,</p><p><code>right</code>,</p><p><code>justified</code>,</p><p><code>dist</code></p></td><td><mark style="color:yellow;">[optional]</mark> Set text alignment</td></tr><tr><td>font_underline</td><td>String (Enum)</td><td><p><code>single</code>,</p><p><code>double</code>,</p><p><code>heavy</code>,</p><p><code>dotted</code>,</p><p><code>heavydotted</code>,</p><p><code>dashed</code>,</p><p><code>heavydashed</code>,</p><p><code>heavylongdashed</code>,</p><p><code>dotdash</code>,</p><p><code>heavydotdash</code>,</p><p><code>heavydotdotdash</code>,</p><p><code>wavy</code>,</p><p><code>heavywavy</code>,</p><p><code>doublewavy</code></p></td><td><mark style="color:yellow;">[optional]</mark> Various text underline</td></tr><tr><td>text_line_spacing</td><td><p>Float,</p><p>Integer</p></td><td>1.00-9.99</td><td><mark style="color:yellow;">[optional]</mark> Set spacing above and within a paragraph. Line Spacing option is set to <code>Multiple</code>.  A value of <code>1</code> would equal single-spacing, while a value of <code>3</code> would equal triple-spacing</td></tr><tr><td>bullet</td><td>Boolean</td><td>true; false</td><td><mark style="color:yellow;">[optional]</mark> Enable bullet point</td></tr><tr><td>bullet_type</td><td>String (Enum)</td><td><code>Symbol</code> or <code>Number</code></td><td><mark style="color:yellow;">[optional]</mark> Use symbols or numbers</td></tr><tr><td>bullet_font_name</td><td>String</td><td>MS supported <a href="https://learn.microsoft.com/en-us/typography/font-list/#a">font names</a></td><td><mark style="color:yellow;">[optional]</mark> Set bullet font type</td></tr><tr><td>bullet_character_code</td><td>Integer</td><td>0-50000</td><td><mark style="color:yellow;">[optional]</mark> Set bullet symbol </td></tr><tr><td>bullet_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set bullet color</td></tr><tr><td>bullet_size</td><td>Integer</td><td>0-5000</td><td><mark style="color:yellow;">[optional]</mark> Set bullet size relative to text</td></tr><tr><td>bullet_indent_level</td><td>Integer</td><td>0-100</td><td><mark style="color:yellow;">[optional]</mark> Set gap between bullet point and text. Tab based indent </td></tr><tr><td>bullet_indent</td><td><p>Integer,</p><p>Float</p></td><td>0-142.24 </td><td><mark style="color:yellow;">[optional]</mark> Set gap between bullet point and text. Unit is `cm` by default.</td></tr><tr><td>new_line</td><td> Boolean</td><td> true; false</td><td><mark style="color:yellow;">[optional]</mark> Appends a line break and creates a new paragraph</td></tr></tbody></table>

```json
"text_properties": {
    "font_type": "string",
    "font_size": numeric,
    "font_bold": boolean,
    "font_italic": boolean,
    "font_color": "string",
    "font_bg_color": "string",
    "text_align": "string",
    "text_indent": numeric,
    "text_line_spacing": numeric,
    "font_underline": "string",	
    "bullet": boolean,
    "bullet_type": "string",
    "bullet_font_name": "string",
    "bullet_character_code": numeric,
    "bullet_color": "string",
    "bullet_indent_level": numeric,
    "bullet_size": numeric,
    "bullet_indent": numeric,
    "new_line": boolean
  }
```

***

### \`settings\` Object

These settings are applied at shape level.&#x20;

<table><thead><tr><th width="181">Parameter</th><th width="126">Type</th><th width="159">Input</th><th width="230">Description</th></tr></thead><tbody><tr><td>height</td><td><p>Integer,</p><p>Float</p></td><td>0 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set shape height</td></tr><tr><td>width</td><td><p>Integer,</p><p>Float</p></td><td>0 to 5963.92</td><td><mark style="color:yellow;">optional]</mark> Set shape width</td></tr><tr><td>left</td><td><p>Integer,</p><p>Float</p></td><td>-5963.92 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set left position</td></tr><tr><td>top</td><td><p>Integer,</p><p>Float</p></td><td>-5963.92 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set top position</td></tr><tr><td>unit</td><td>String<br>(Enum)</td><td><p><code>cm</code>,</p><p><code>pt</code>,</p><p><code>points</code> </p></td><td><mark style="color:yellow;">[optional]</mark> Set unit of measurement for shape <code>width</code>, <code>height</code>, <code>left</code>, <code>top.</code>(default value if ‘unit’ field is not specified)</td></tr><tr><td>fill_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set shape background color</td></tr><tr><td>font_type</td><td>String</td><td>MS supported <a href="https://learn.microsoft.com/en-us/typography/font-list/#a">font names</a></td><td><mark style="color:yellow;">[optional]</mark> Font type</td></tr><tr><td>font_size</td><td>Integer</td><td>1 to 4000</td><td><mark style="color:yellow;">[optional]</mark> Font size</td></tr><tr><td>font_bold</td><td>Boolean</td><td>true; false</td><td><mark style="color:yellow;">[optional]</mark> Bold </td></tr><tr><td>font_italic</td><td>Boolean</td><td>true; false</td><td><mark style="color:yellow;">[optional]</mark> Italic </td></tr><tr><td>font_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set text color</td></tr><tr><td>font_bg_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set text background color</td></tr><tr><td>text_indent</td><td>Integer</td><td>0 to 142.24</td><td><mark style="color:yellow;">[optional]</mark> Set text indent</td></tr><tr><td>font_underline</td><td>String<br>(Enum)</td><td><p><code>single</code>,</p><p><code>double</code>,</p><p><code>heavy</code>,</p><p><code>dotted</code>,</p><p><code>heavydotted</code>,</p><p><code>dashed</code>,</p><p><code>heavydashed</code>,</p><p><code>heavylongdashed</code>,</p><p><code>dotdash</code>,</p><p><code>heavydotdash</code>,</p><p><code>heavydotdotdash</code>,</p><p><code>wavy</code>,</p><p><code>heavywavy</code>,</p><p><code>doublewavy</code></p></td><td><mark style="color:yellow;">[optional]</mark> Various text underline</td></tr><tr><td>text_align</td><td>String<br>(Enum)</td><td><p><code>left</code>,</p><p><code>center</code>,</p><p><code>right</code>,</p><p><code>justified</code>,</p><p><code>dist</code></p></td><td><mark style="color:yellow;">[optional]</mark> Set text alignment</td></tr><tr><td>text_line_spacing</td><td>Integer</td><td>1.00-9.99</td><td><mark style="color:yellow;">[optional]</mark> Set spacing above and within a paragraph. Line Spacing option is set to <code>Multiple</code>.  A value of <code>1</code> would equal single-spacing, while a value of <code>3</code> would equal triple-spacing</td></tr><tr><td>vertical_anchor</td><td>String<br>(Enum)</td><td><code>top</code>,<br><code>middle</code>,<br><code>bottom</code></td><td><mark style="color:yellow;">[optional]</mark> Set vertical text alignment</td></tr><tr><td>new_line</td><td> Boolean</td><td> true; false</td><td><mark style="color:yellow;">[optional]</mark> Appends a line break and creates a new paragraph</td></tr></tbody></table>

JSON payload

```json
"settings": {
  "height": numeric,
  "width": numeric,
  "top": numeric,
  "left": numeric,
  "unit": "string",
  "fill_color": "0,0,0",
  "font_type": "string",
  "font_size": numeric,
  "font_bold": boolean,
  "font_italic": boolean,
  "font_color": "string",
  "font_bg_color": "string",
  "font_underline": "string",
  "text_align": "string",
  "text_indent": numeric,
  "text_line_spacing": numeric,
  "vertical_anchor": "string",	
  "new_line": boolean
}	   
```


# chart

Hierarchy: presentation > slides > shapes

A **`chart`** shape is used to render data in a graphical form. All chart types provided by PowerPoint are supported.

<table><thead><tr><th width="155">Parameter</th><th width="98">Type</th><th width="124">Input</th><th>Description</th></tr></thead><tbody><tr><td>name</td><td>String</td><td></td><td><mark style="color:red;">[required if <code>shape_id</code> not provided]</mark> Name of shape to update/manipulate. Find shape names <a href="https://docs.powerpointgeneratorapi.com/knowledge-base/finding-shape-names">here</a>.</td></tr><tr><td>shape_id</td><td>Integer</td><td></td><td><mark style="color:red;">[required if <code>name</code> not provided]</mark> A unique identifier of a given shape. This ID is not displayed in the document, it's hidden in the xml. </td></tr><tr><td>data</td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> Data to populate a chart's cellrange. See <a href="#data-object"><mark style="color:blue;"><strong>data object</strong></mark></a> for more information. </td></tr><tr><td>additional_data</td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> Data to populate specific cells, inside or outside a chart's cellrange. See <a href="#additional_data-object"><strong>additional_data object</strong></a> for more information. </td></tr><tr><td>overlays</td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> Enrich data labels on a chart by adding custom strings alongside the original label value. See <a href="#overlays-object"><strong>overlays object</strong></a> for more information. </td></tr><tr><td>settings</td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> An array of shape-level settings. See <a href="#settings-object"><mark style="color:blue;"><strong>settings object</strong></mark></a> for more information. </td></tr><tr><td>is_hidden</td><td>Boolean</td><td>true; false</td><td><mark style="color:yellow;">[optional]</mark> Hide shape</td></tr><tr><td>remove</td><td>Boolean</td><td>true; false</td><td><mark style="color:yellow;">[optional]</mark> Delete shape </td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"shapes": [
  {
    "name": "string",
    "data": [],
    "additional_data": [],
    "overlays": [],
    "settings": [],
    "is_hidden": boolean,
    "remove": boolean
   },
  {
    "name": "string",
    "data": [],
    "additional_data": [],
    "overlays": [],
    "settings": [],
    "is_hidden": boolean,
    "remove": boolean
   } 
]
```

{% endcode %}

***

## Data Object

The **`data`** object is used to populate a chart' cellrange - a specific contiguous cell range which acts as the chart's data source.&#x20;

<figure><img src="/files/3u1rXVaC0dgdJaCLlQsa" alt="" width="349"><figcaption></figcaption></figure>

The data is organized as an array of arrays, where each inner array represents a different dimension of the data.

In the example payload below, the matrix would be of size 4x2, where there are 4 columns (series) and 2 rows (categories). The first column of the matrix would contain the values for the "series 1", the second column would contain the values for the "series 2", and so on. Similarly, the first row of the matrix would contain the values for the "category 1", the second row would contain the values for the "category 2".

JSON payload&#x20;

```json
"data": [
   [
      "series 1",
      "series 2",
      "series 3",
      "series 4"
   ],
   [
      "category 1",
      "category 2"
   ],
   [
      1,
      2,
      3,
      4
   ],
   [
      5,
      6,
      7,
      8
   ]
]
```

***

## Additional\_data Object

The `additional_data` parameter allows you to provide **extra sets of data for specific locations (cells) in a shape**, separate from the main `data` array.&#x20;

<figure><img src="/files/Sgg22HVnCh3yRGqu7CC4" alt="" width="331"><figcaption></figcaption></figure>

It’s useful when you want to:

* Fill in **specific parts of a chart or table** without changing the entire dataset.
* Inject **supplementary information**, like labels, notes, or reference values, that the main `data` array doesn’t cover.
* Target **exact cells** in a PowerPoint shape for fine-grained control.

Think of it as a “data override” or “cell-level customization” mechanism.

JSON payload

```json
"additional_data": [
  {
    "cell_target": "G1",
    "data": [
      ["Sum"],
      [8.7],
      [8.9],
      [8.3],
      [12.3]
    ]
  }
]
```

***

## Overlays Object

The `overlays` property lets you add custom symbols or text to existing chart labels, useful for highlighting specific points (e.g., arrows, icons, or annotations) without changing the actual data.

It’s organized as an array of arrays: each inner array represents a **series**, and each element inside corresponds to a **data point** within that series.

For example, if your data grid is **5×5** (5 categories × 5 series), your `overlays` must also contain **10 arrays** (one per data point), even if most are empty.

Each overlay can define properties like color, font size, or position. In the example below, a magenta “▲” symbol appears to the right of the first data point in the first series.

JSON payload&#x20;

```json
"overlays": [
  [
    {
      "value": "▲",
      "color": "magenta",
      "font_bold": true,
      "font_italic": true,
      "font_size": 5,
      "position": "right"
    }
  ],
  [],
  [],
  [],
  [],
  [],
  [],
  [],
  [],
  []
]
```

***

## Settings Object

The **`settings`** parameters below are specific to chart shapes only. Chart shape consists of several different elements, like plot area, legend and so on, we have grouped the settings to match these elements below.&#x20;

### Chart Area

<table><thead><tr><th width="157">Parameter</th><th width="93">Type</th><th width="148">Input</th><th>Description </th></tr></thead><tbody><tr><td>title</td><td>String</td><td></td><td><mark style="color:yellow;">[optional]</mark> Shorthand way of adding text to a chart's title</td></tr><tr><td>chartFont</td><td>String</td><td>MS supported <a href="https://learn.microsoft.com/en-us/typography/font-list/#a">font names</a></td><td><mark style="color:yellow;">[optional]</mark> The text font applies to all text in the chart shape</td></tr><tr><td>chartFontSize </td><td>Integer</td><td>1 to 4000</td><td><mark style="color:yellow;">[optional]</mark> The text font size applies to all text in the chart shape</td></tr><tr><td>fill_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Chart background fill color</td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"settings": {
    "title": "string",
    "chartFont": "string",
    "chartFontSize": numeric,
    "fill_color": "string"
}
```

{% endcode %}

### Legend

<table><thead><tr><th width="224">Parameter</th><th width="95">Type</th><th width="153">Input</th><th>Description</th></tr></thead><tbody><tr><td>chartShowLegend</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Enable/disable legend </td></tr><tr><td>chartLegendPosition</td><td>String<br>(Enum)</td><td><p><code>Left</code>,</p><p><code>Right</code>,</p><p><code>Bottom</code>,</p><p><code>Top</code>,</p><p><code>Topright</code>,</p><p><code>None</code></p></td><td><mark style="color:yellow;">[optional]</mark> Set Chart series label / legend display position, if visible</td></tr><tr><td>chartLegendFontColor</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>, RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set chart legend color – applies  all legend items i.e. not individual series, if visible</td></tr><tr><td>isChartLegendBold</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Enable/disable chart legend text bold, if visible</td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"settings": {
    "chartShowLegend": boolean,
    "chartLegendPosition": "string",				   
    "chartLegendColor": "string",
    "isChartLegendBold": boolean
}
```

{% endcode %}

### Data labels

<table><thead><tr><th>Parameter</th><th width="103">Type</th><th width="149">Input</th><th>Description</th></tr></thead><tbody><tr><td>isChartLabelValueVisible</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Enable/ disable data label </td></tr><tr><td>chartDataLabelPosition</td><td>String<br>(Enum)</td><td><p><code>Left</code>,</p><p><code>Right</code>,</p><p><code>Top</code>,</p><p><code>Bottom</code>,</p><p><code>Center</code>,</p><p><code>InsideBase</code>,</p><p><code>InsideEnd</code>,</p><p><code>OutsideEnd</code>,</p><p><code>BestFit</code></p></td><td><mark style="color:yellow;">[optional]</mark> Set data label position, if enabled</td></tr><tr><td>chartDataLabelFontSize</td><td>Integer</td><td>1 to 4000</td><td><mark style="color:yellow;">[optional]</mark> Set data label's font size, if data label visible</td></tr><tr><td>chartDataLabelFont</td><td>String</td><td>MS supported <a href="https://learn.microsoft.com/en-us/typography/font-list/#a">font names</a></td><td><mark style="color:yellow;">[optional]</mark> Set data label's font, if data label visible</td></tr><tr><td>isDataLabelBold</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Enable/ disable chart data value label bold, if data label visible</td></tr><tr><td>chartDataLabelColor</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>, RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Chart data value label color, if data label visible</td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"settings": {
    "isChartLabelValueVisible": boolean,			
    "chartDataLabelPosition": "string",
    "chartDataLabelFontSize": numeric,
    "chartDataLabelFont": "string",
    "isDataLabelBold": boolean,
    "chartDataLabelColor": "string"
}
```

{% endcode %}

### Category axis

<table><thead><tr><th width="255">Parameter</th><th width="97">Type</th><th width="144">Input</th><th>Description</th></tr></thead><tbody><tr><td>categoryTitle</td><td>String</td><td></td><td><mark style="color:yellow;">[optional]</mark> Shorthand way of adding text to a chart's category axis title</td></tr><tr><td>chartCategoryAxisFont</td><td>String</td><td>MS supported <a href="https://learn.microsoft.com/en-us/typography/font-list/#a">font names</a></td><td><mark style="color:yellow;">[optional]</mark> Set axis font type</td></tr><tr><td>chartCategoryAxisFontSize</td><td>Integer</td><td>1 to 4000</td><td><mark style="color:yellow;">[optional]</mark> Set axis font size</td></tr><tr><td>isCategoryAxisBold</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Enable/ disable  bold </td></tr><tr><td>chartCategoryAxisColor</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>, RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set axis text color</td></tr><tr><td>chartCategoryAxisPosition</td><td>String<br>(Enum)</td><td><p><code>nextToAxis</code>,</p><p><code>high</code>,</p><p><code>low</code>,</p><p><code>none</code></p></td><td><mark style="color:yellow;">[optional]</mark> Set axis position</td></tr><tr><td>chartCategoryAxisMax</td><td>String</td><td> </td><td><mark style="color:yellow;">[optional]</mark> Set axis maximum value</td></tr><tr><td>chartCategoryAxisMin</td><td>String</td><td> </td><td><mark style="color:yellow;">[optional]</mark> Set axis maximum value</td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"settings": {  
    "categoryTitle": "string",
    "chartCategoryAxisMax": "numeric",
    "chartCategoryAxisMin": "numeric",
    "chartCategoryAxisPosition": "string",
    "chartCategoryAxisFontSize": numeric,
    "chartCategoryAxisFont": "string",
    "isCategoryAxisBold": boolean,
    "chartCategoryAxisColor": "string"
}
```

{% endcode %}

### Value axis

<table><thead><tr><th width="228">Parameter</th><th width="98">Type</th><th width="160">Input</th><th>Description</th></tr></thead><tbody><tr><td>valueTitle</td><td>String</td><td></td><td><mark style="color:yellow;">[optional]</mark> Shorthand way of adding text to a chart's value axis title</td></tr><tr><td>chartValueAxisFont</td><td>String</td><td>MS supported <a href="https://learn.microsoft.com/en-us/typography/font-list/#a">font names</a></td><td><mark style="color:yellow;">[optional]</mark> Set axis font type</td></tr><tr><td>chartValueAxisFontSize</td><td>Integer</td><td>1 to 4000</td><td><mark style="color:yellow;">[optional]</mark> Set axis font size</td></tr><tr><td>isValueAxisBold</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Enable/ Disable bold</td></tr><tr><td>chartValueAxisColor</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>, RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set axis font color</td></tr><tr><td>chartValueAxisPosition</td><td>String<br>(Enum)</td><td><p><code>nextToAxis</code>,</p><p><code>high</code>,</p><p><code>low</code>,</p><p><code>none</code></p></td><td><mark style="color:yellow;">[optional]</mark> Set axis position</td></tr><tr><td>chartValueAxisMax</td><td>String</td><td></td><td><mark style="color:yellow;">[optional]</mark> Set axis maximum value</td></tr><tr><td>chartValueAxisMin</td><td>String</td><td></td><td><mark style="color:yellow;">[optional]</mark> Set axis minimum value</td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"settings": {
    "valueTitle": "string",
    "chartValueAxisPosition": "string",
    "chartValueAxisFont": "string",
    "chartValueAxisFontSize": numeric,		 
    "isValueAxisBold": boolean,		 
    "chartValueAxisColor": "string",
    "chartValueAxisMin": "numeric",
    "chartValueAxisMax": "numeric"
}
```

{% endcode %}

### Plot area

<table><thead><tr><th width="284">Name</th><th width="95">Type</th><th width="130">Input</th><th>Description</th></tr></thead><tbody><tr><td>isLabelValueVisible</td><td>Boolean</td><td> true, false</td><td><mark style="color:yellow;">[optional]</mark> Enable/ disable data labels</td></tr><tr><td>showChartVerticalGridLines</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Enable/ disable vertical grid lines</td></tr><tr><td>showChartHorizantalGridLines</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Enable/ disable horizontal grid lines</td></tr><tr><td>chartOverlap</td><td>Integer</td><td>-100 to 100</td><td><mark style="color:yellow;">[optional]</mark> Set series overlap</td></tr><tr><td>chartGapWidth</td><td>Integer</td><td>0 to 500</td><td><mark style="color:yellow;">[optional]</mark> Set series gap width</td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"settings": {
    "isLabelValueVisible": boolean,
    "showChartVerticalGridLines": boolean,
    "showChartHorizontalGridLines": boolean,
    "chartOverlap": numeric,
    "chartGapWidth": numeric
}
```

{% endcode %}

### Size & Position

<table><thead><tr><th width="130">Parameter</th><th width="109">Type</th><th width="243">Input</th><th>Description</th></tr></thead><tbody><tr><td>width</td><td><p>Integer,</p><p>Float</p></td><td><p>0 to 5963.92</p><p> </p></td><td><mark style="color:yellow;">[optional]</mark> Set shape width</td></tr><tr><td>height</td><td><p>Integer,</p><p>Float</p></td><td>0 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set shape height</td></tr><tr><td>left</td><td><p>Integer,</p><p>Float</p></td><td>-5963.92 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set left position</td></tr><tr><td>top</td><td><p>Integer,</p><p>Float</p></td><td>-5963.92 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set top position</td></tr><tr><td>unit</td><td>String<br>(Enum)</td><td><p><code>cm</code>,</p><p><code>pt</code>,</p><p><code>points</code> (default value if ‘unit’ field is not specified)</p></td><td><mark style="color:yellow;">[optional]</mark> Set unit of measurement for shape <code>width</code>, <code>height</code>, <code>left</code>, <code>top</code></td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"settings": {
  "height": numeric,
  "width": numeric,
  "top": numeric,
  "left": numeric,
  "unit": "string"
}
```

{% endcode %}


# picture

Hierarchy: presentation > slides > shapes

A **`picture`** shape is used to display images.&#x20;

<table><thead><tr><th width="155">Parameter</th><th width="98">Type</th><th width="124">Input</th><th>Description</th></tr></thead><tbody><tr><td>name</td><td>String</td><td></td><td><mark style="color:red;">[required if <code>shape_id</code> not provided]</mark> Name of shape to update/manipulate. Find shape names <a href="https://docs.powerpointgeneratorapi.com/knowledge-base/finding-shape-names">here</a>.</td></tr><tr><td>shape_id</td><td>String</td><td></td><td><mark style="color:red;">[required if <code>name</code> not provided]</mark> A unique identifier of a given shape. This ID is not displayed in the document, it's hidden in the xml. </td></tr><tr><td>filename</td><td>String</td><td></td><td><mark style="color:yellow;">[optional]</mark> Name of picture file to use OR downloadable URL link (as a string).</td></tr><tr><td>settings</td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> An array of shape-level settings. See <a href="/pages/RQKYKA3C8xfTVOiq0Yh1#settings-object"><mark style="color:blue;"><strong>settings object</strong></mark></a> for more information.</td></tr><tr><td>is_hidden</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Hide shape </td></tr><tr><td>remove</td><td>Boolean</td><td>true, false</td><td><mark style="color:yellow;">[optional]</mark> Delete shape </td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"shapes": [
  {
    "name": "string",
    "filename": "string or downloadable URL",
    "settings": [],
    "is_hidden": boolean,
    "remove": boolean
   },
  {
    "name": "string",
    "filename": "string or downloadable URL",
    "settings": [],
    "is_hidden": boolean,
    "remove": boolean
   } 
]
```

{% endcode %}

***

### Settings Object

The **`settings`** object contain a list format/styling parameters. &#x20;

<table><thead><tr><th width="130">Parameter</th><th width="109">Type</th><th width="243">Input</th><th>Description</th></tr></thead><tbody><tr><td>width</td><td><p>Integer,</p><p>Float</p></td><td><p>0 to 5963.92</p><p> </p></td><td><mark style="color:yellow;">[optional]</mark> Set shape width</td></tr><tr><td>height</td><td><p>Integer,</p><p>Float</p></td><td>0 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set shape height</td></tr><tr><td>left</td><td><p>Integer,</p><p>Float</p></td><td>-5963.92 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set left position</td></tr><tr><td>top</td><td><p>Integer,</p><p>Float</p></td><td>-5963.92 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set top position</td></tr><tr><td>unit</td><td>String<br>(Enum)</td><td><p><code>cm</code>,</p><p><code>pt</code>,</p><p><code>points</code> (default value if ‘unit’ field is not specified)</p></td><td><mark style="color:yellow;">[optional]</mark> Set unit of measurement for shape <code>width</code>, <code>height</code>, <code>left</code>, <code>top</code></td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"settings": {
  "height": numeric,
  "width": numeric,
  "top": numeric,
  "left": numeric,
  "unit": "string"
}
```

{% endcode %}


# table

Hierarchy: presentation > slides > shapes

Like the textbox shape, the **`table`** shape is used to display simple text or numerical data.

<table><thead><tr><th width="155">Parameter</th><th width="98">Type</th><th width="124">Input</th><th>Description</th></tr></thead><tbody><tr><td>name</td><td>String</td><td></td><td><mark style="color:red;">[required if <code>shape_id</code> not provided]</mark> The name of shape to update/manipulate. Find shape names <a href="https://docs.powerpointgeneratorapi.com/knowledge-base/finding-shape-names">here</a>.</td></tr><tr><td>shape_id</td><td>Int</td><td></td><td><mark style="color:red;">[required if <code>name</code> not provided]</mark> A unique identifier of a given shape. This ID is not displayed in the document, it's hidden in the xml. </td></tr><tr><td>data_cells</td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> 2-dimensional array of cell values. See <a href="#data_cells-object"><mark style="color:blue;"><strong>data cell object</strong></mark></a> for more information.</td></tr><tr><td>settings</td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> An array of shape-level settings. See <a href="/pages/RQKYKA3C8xfTVOiq0Yh1#settings-object"><mark style="color:blue;"><strong>settings object</strong></mark></a> for more information.</td></tr><tr><td>is_hidden</td><td>Boolean</td><td>true; false</td><td><mark style="color:yellow;">[optional]</mark> Hide shape</td></tr><tr><td>remove</td><td>Boolean</td><td>true; false</td><td><mark style="color:yellow;">[optional]</mark> Delete shape </td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"shapes": [
  {
    "name": "string",
    "data_cells": [],
    "settings": [],
    "is_hidden": boolean,
    "remove": boolean
   },
  {
    "name": "string",
    "data_cells": [],
    "settings": [],
    "is_hidden": boolean,
    "remove": boolean
   } 
]
```

{% endcode %}

***

## data\_cells object

The **`data_cells`** object defines the content of a **table shape**.\
\
It is a **two-dimensional array**, where each inner array represents a **row**, and each element within that row represents a **cell**.

Each cell can be either:

* a **string** (for plain text), or
* an **object** (for rich text and formatting).

<table><thead><tr><th width="191">Parameter</th><th width="112">Type</th><th width="101">Input</th><th>Description</th></tr></thead><tbody><tr><td>text</td><td>String or <mark style="color:blue;">Object</mark></td><td></td><td><p><mark style="color:yellow;">[optional]</mark> Text to display in the textbox.</p><p></p><p>- <strong>String</strong>: A simple way to display plain text.</p><p></p><p>- <strong>Object</strong>: Use for advanced formatting by defining text chunks. See the <a href="#text-object"><mark style="color:blue;"><strong>text object</strong></mark></a> structure.</p></td></tr><tr><td>cell_properties</td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> A cell styling object</td></tr></tbody></table>

JSON payload

```json
"data_cells": [
  [
    "Cell A1",
    "Cell B1",
    "Cell C1"
  ],
  [
    "Cell A2",
    {
      "text": [
        {
          "text_run": "Cell",
          "text_properties": {...}
        },
        {
          "text_run": " B2",
          "text_properties": {...}
        }
      ],
      "cell_properties": {...}
    },
    "Cell C2"
  ],
  [
    "Cell A3",
    "Cell B3",
    "Cell C3"
  ]
]
```

***

## \`text\` Object

An array of text objects, where each object represents a part of the text with its own text content and optional properties.

<table><thead><tr><th width="179">Parameter</th><th width="120">Type</th><th width="110">Input</th><th>Description</th></tr></thead><tbody><tr><td>text_run</td><td>String</td><td></td><td><mark style="color:red;">[required]</mark> Text chunk </td></tr><tr><td>text_properties</td><td><mark style="color:blue;">Object</mark></td><td></td><td><mark style="color:yellow;">[optional]</mark> A <a href="#text_properties-object"><mark style="color:blue;"><strong>text styling object</strong></mark></a>. List of font styling parameters to override existing styles for the given chunk of text. </td></tr></tbody></table>

JSON Payload

{% code lineNumbers="true" %}

```json
"text": [
  {
    "text_run": "This is part 1 of my sentence.",
    "text_properties": {}
  },
  {
    "text_run": "This is part 2 of my sentence.",
    "text_properties": {}
  }
]
```

{% endcode %}

***

### text\_properties

Text format properties.&#x20;

<table><thead><tr><th width="181">Parameter</th><th width="126">Type</th><th width="159">Input</th><th width="230">Description</th></tr></thead><tbody><tr><td>font_type</td><td>String</td><td>MS supported <a href="https://learn.microsoft.com/en-us/typography/font-list/#a">font names</a></td><td><mark style="color:yellow;">[optional]</mark> Font type</td></tr><tr><td>font_size</td><td>Integer</td><td>1 to 4000</td><td><mark style="color:yellow;">[optional]</mark> Font size</td></tr><tr><td>font_bold</td><td>Boolean</td><td>true; false</td><td><mark style="color:yellow;">[optional]</mark> Bold </td></tr><tr><td>font_italic</td><td>Boolean</td><td>true; false</td><td><mark style="color:yellow;">[optional]</mark> Italic </td></tr><tr><td>font_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set text color</td></tr><tr><td>font_bg_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set text background color</td></tr><tr><td>text_indent</td><td>Integer</td><td>0 to 142.24</td><td><mark style="color:yellow;">[optional]</mark> Set text indent</td></tr><tr><td>text_align</td><td>String</td><td><p>left,</p><p>center,</p><p>right,</p><p>justified,</p><p>dist</p></td><td><mark style="color:yellow;">[optional]</mark> Set text alignment</td></tr><tr><td>font_underline</td><td>String</td><td><p>single;</p><p>double;</p><p>heavy;</p><p>dotted</p><p>heavydotted;</p><p>dashed;</p><p>heavydashed;</p><p>heavylongdashed;</p><p>dotdash;</p><p>heavydotdash;</p><p>heavydotdotdash;</p><p>wavy;</p><p>heavywavy;</p><p>doublewavy;</p></td><td><mark style="color:yellow;">[optional]</mark> Various text underline</td></tr><tr><td>text_line_spacing</td><td>Integer</td><td>1 to 1584</td><td><mark style="color:yellow;">[optional]</mark> Spacing between text lines</td></tr><tr><td>new_line</td><td> Boolean</td><td> true; false</td><td><mark style="color:red;">[required]</mark> Create new line within text box</td></tr></tbody></table>

JSON payload

```json
"data_cells": [
  [
    "Cell A1",
    {
      "text": [
        {
          "text_run": "Cell B1",
          "text_properties": {
            "font_type": "string",
            "font_size": numeric,
            "font_bold": boolean,
            "font_italic": boolean,
            "font_color": "string",
            "font_bg_color": "string",
            "text_align": "string",
            "text_indent": numeric,
            "text_line_spacing": numeric,
            "font_underline": "string",	
            "new_line": boolean
          }
        }
      ],
      "cell_properties": {}
    },
    "Cell C1"
  ],
  [
    "Cell A2",
    "Cell B2",
    "Cell C2"
  ],
  [
    "Cell A3",
    "Cell B3",
    "Cell C3"
  ]
]
```

***

## cell\_properties

<table><thead><tr><th width="173">Parameters</th><th width="95.33333333333331">Type</th><th>Input</th><th>Description</th></tr></thead><tbody><tr><td>bg_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Cell background color</td></tr></tbody></table>

JSON payload

```json
"data_cells": [
  [
    "Cell A1",
    {
      "text": [
        {
          "text_run": "Cell B1",
          "text_properties": {...}
        }
      ],
      "cell_properties": {
        "bg_color": "0,128,0"
      }
    },
    "Cell C1"
  ],
  [
    "Cell A2",
    "Cell B2",
    "Cell C2"
  ],
  [
    "Cell A3",
    "Cell B3",
    "Cell C3"
  ]
]
```

***

## Settings Object

The **`settings`** object contain a list format/styling parameters. &#x20;

Parameters below are available across all shapes, regardless of type.&#x20;

Some shape types (i.e. Charts, Tables, Textboxes) have specific attributes, see shape specific settings pages to learn more.

<table><thead><tr><th width="130">Parameter</th><th width="109">Type</th><th width="243">Input</th><th>Description</th></tr></thead><tbody><tr><td>width</td><td><p>Integer,</p><p>Float</p></td><td><p>0 to 5963.92</p><p> </p></td><td><mark style="color:yellow;">[optional]</mark> Set shape width</td></tr><tr><td>height</td><td><p>Integer,</p><p>Float</p></td><td>0 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set shape height</td></tr><tr><td>left</td><td><p>Integer,</p><p>Float</p></td><td>-5963.92 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set left position</td></tr><tr><td>top</td><td><p>Integer,</p><p>Float</p></td><td>-5963.92 to 5963.92</td><td><mark style="color:yellow;">[optional]</mark> Set top position</td></tr><tr><td>unit</td><td>String</td><td><p>cm,</p><p>pt,</p><p>points</p></td><td><mark style="color:yellow;">[optional]</mark> Set unit of measurement for shape <code>width</code>, <code>height</code>, <code>left</code>, <code>top</code>. Defaults to <code>points</code> if not specifcied. </td></tr><tr><td>fill_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set shape background color</td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"settings": {
  "height": numeric,
  "width": numeric,
  "top": numeric,
  "left": numeric,
  "unit": "string",
  "fill_color": "0,0,0"
}
```

{% endcode %}


# tags

Hierarchy: presentation > slides

The **`tags`** object is used to located text within double curly brackets `{{key}}` on a slide level and replace with the provided value.&#x20;

<table><thead><tr><th width="167">Parameter</th><th width="108">Type</th><th width="161">Input</th><th>Description</th></tr></thead><tbody><tr><td>key</td><td>String</td><td></td><td><mark style="color:red;">[required]</mark> The placeholder text in the template to search for. </td></tr><tr><td>value</td><td>String</td><td></td><td><mark style="color:red;">[required]</mark> The text to substitute in place of each <code>key</code> match.</td></tr><tr><td>font_type</td><td>String</td><td>MS supported <a href="https://learn.microsoft.com/en-us/typography/font-list/#a">font names</a></td><td><mark style="color:yellow;">[optional]</mark> Set font style. If not provided font type will be inherited.  </td></tr><tr><td>font_size</td><td>Integer</td><td></td><td><mark style="color:yellow;">[optional]</mark> Set font size. If not provided font size will be inherited. </td></tr><tr><td>font_color</td><td>String</td><td><p><a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties">Color name</a>,</p><p>RGB(0,0,0),</p><p><a href="https://www.color-hex.com/">Hex</a></p></td><td><mark style="color:yellow;">[optional]</mark> Set font color. If not provided font color will be inherited. </td></tr><tr><td>font_underline</td><td>String<br>(Enum)</td><td><p><code>single</code>,</p><p><code>double</code>,</p><p><code>heavy</code>,</p><p><code>dotted</code>,</p><p><code>heavydotted</code>,</p><p><code>dashed</code>,</p><p><code>heavydashed</code>,</p><p><code>heavylongdashed</code>,</p><p><code>dotdash</code>,</p><p><code>heavydotdash</code>,</p><p><code>heavydotdotdash</code>,</p><p><code>wavy</code>,</p><p><code>heavywavy</code>,</p><p><code>doublewavy</code></p></td><td><mark style="color:yellow;">[optional]</mark> Various text underline styling. </td></tr><tr><td>font_bold</td><td>Boolean</td><td></td><td><mark style="color:yellow;">[optional]</mark> Set font bold. If not provided font bold will be inherited. </td></tr><tr><td>font_italic</td><td>Boolean</td><td></td><td><mark style="color:yellow;">[optional]</mark> Set font italic. If not provided font italic will be inherited. </td></tr></tbody></table>

JSON payload

{% code lineNumbers="true" %}

```json
"tags": [
  {
    "key": "<string>",
    "value": "<string>",
    "font_type": "<string>",
    "font_size": numeric,
    "font_color": "<string>",
    "font_underline": boolean,
    "font_bold": boolean,
    "font_italic": boolean
  },
  {
    "key": "<string>",
    "value": "<string>",
    "font_type": "<string>",
    "font_size": numeric,
    "font_color": "<string>",
    "font_underline": boolean,
    "font_bold": boolean,
    "font_italic": boolean
  }
]
```

{% endcode %}


# Deprecated

This page outlines the deprecated list of settings.

| Name          | Replaced by | Effective date                       |
| ------------- | ----------- | ------------------------------------ |
| X             | left        | 1st Jan 2023                         |
| Y             | top         | 1st Jan 2023                         |
| fillcolor     | fill\_color | 1st Jan 2023                         |
| Key           | key         | 1st July 2023                        |
| Value         | value       | 1st July 2023                        |
| text\_content | text        | 1st July 2023 (backwards compatible) |
| content       | text        | 1st July 2023 (backwards compatible) |
| ShapeId       | Shape\_id   | 1st July 2026 (backwards compatible) |


# Examples

* Take a look at these examples to see what’s possible with the **PowerPoint Generator API**.
* They’re a great starting point for creating and experimenting with your own templates.

### Presentation

<table data-view="cards"><thead><tr><th data-type="content-ref"></th><th data-hidden></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><a href="/pages/SF6U3Rm9G66I2zxDVRUl">/pages/SF6U3Rm9G66I2zxDVRUl</a></td><td></td><td><a href="/files/03TjHJzBqqfPjo5jr684">/files/03TjHJzBqqfPjo5jr684</a></td></tr><tr><td><a href="/pages/PqRCE5VkR6CGrvJKWTcV">/pages/PqRCE5VkR6CGrvJKWTcV</a></td><td></td><td><a href="/files/2UL4Dstb7aOe9OnGa7MO">/files/2UL4Dstb7aOe9OnGa7MO</a></td></tr></tbody></table>

### Slide

<table data-view="cards"><thead><tr><th data-type="content-ref"></th><th data-hidden></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><a href="/pages/s0HRfATBwg36gtahVvQd">/pages/s0HRfATBwg36gtahVvQd</a></td><td><h2>Repeat template slides by index</h2></td><td><a href="/files/EDzbLP7PnsEPgLiN8ry8">/files/EDzbLP7PnsEPgLiN8ry8</a></td></tr><tr><td><a href="/pages/f9YwYOpzk9thYamLmlIw">/pages/f9YwYOpzk9thYamLmlIw</a></td><td><h2>Repeat template slides by ID</h2></td><td><a href="/files/fZjP9TsbsezK3Xqdpn3w">/files/fZjP9TsbsezK3Xqdpn3w</a></td></tr></tbody></table>

### Shape

<table data-view="cards"><thead><tr><th data-type="content-ref"></th><th data-hidden></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><a href="/pages/92HRh9mZmEox98vuHFoY">/pages/92HRh9mZmEox98vuHFoY</a></td><td></td><td><a href="/files/nfJZXhYBcqOoTlnCLbrK">/files/nfJZXhYBcqOoTlnCLbrK</a></td></tr><tr><td><a href="/pages/tlnjD99TSfK99zAAb3pC">/pages/tlnjD99TSfK99zAAb3pC</a></td><td></td><td><a href="/files/eRFTHADSct114xFTVSvS">/files/eRFTHADSct114xFTVSvS</a></td></tr><tr><td><a href="/pages/EtFpDVH5IuQY80imvZj9">/pages/EtFpDVH5IuQY80imvZj9</a></td><td></td><td><a href="/files/0KvyoyRnccx939PQEzR1">/files/0KvyoyRnccx939PQEzR1</a></td></tr><tr><td><a href="/pages/b3OIpnxfhIPNR0StjFU8">/pages/b3OIpnxfhIPNR0StjFU8</a></td><td></td><td><a href="/files/UjS9fOPRFX7NKdiwS93n">/files/UjS9fOPRFX7NKdiwS93n</a></td></tr><tr><td><a href="/pages/dkwn5mmYlM1Xud2IQfw3">/pages/dkwn5mmYlM1Xud2IQfw3</a></td><td></td><td><a href="/files/VWWBTXSCaHPYfASGidYJ">/files/VWWBTXSCaHPYfASGidYJ</a></td></tr><tr><td><a href="/pages/BZzK4FlwuB1CkQANPLaw">/pages/BZzK4FlwuB1CkQANPLaw</a></td><td></td><td><a href="/files/bTmalNrDZrNXzB4DJx8n">/files/bTmalNrDZrNXzB4DJx8n</a></td></tr></tbody></table>

### Textboxes

<table data-view="cards"><thead><tr><th data-type="content-ref"></th><th data-hidden></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><a href="/pages/sEowo5TBpYbsh1F5SZXY">/pages/sEowo5TBpYbsh1F5SZXY</a></td><td><h2>Add text</h2></td><td><a href="/files/0fZSoGq8rnE9CDezI9Ol">/files/0fZSoGq8rnE9CDezI9Ol</a></td></tr><tr><td><a href="/pages/Qk2inmvd9K45KPqlFyjq">/pages/Qk2inmvd9K45KPqlFyjq</a></td><td><h2>Text styling</h2></td><td><a href="/files/PC697uDKG8XOqIjPZdwp">/files/PC697uDKG8XOqIjPZdwp</a></td></tr><tr><td><a href="/pages/cnkg1quAchMO2sVJoXDF">/pages/cnkg1quAchMO2sVJoXDF</a></td><td><h2>Using bullet-points</h2></td><td><a href="/files/77IH5vxOmfB8nMLP4RFQ">/files/77IH5vxOmfB8nMLP4RFQ</a></td></tr><tr><td><a href="/pages/y0oUp0Jrmd3jfo1g8fu5">/pages/y0oUp0Jrmd3jfo1g8fu5</a></td><td><h2>Bullet-points simple</h2></td><td><a href="/files/i9QRbB9PPi7kl3NpE881">/files/i9QRbB9PPi7kl3NpE881</a></td></tr></tbody></table>

### Chart

<table data-view="cards"><thead><tr><th data-type="content-ref"></th><th data-hidden></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><a href="/pages/KCQd4X5HiAbZrPy9FqPX">/pages/KCQd4X5HiAbZrPy9FqPX</a></td><td><h2>Insert data</h2></td><td><a href="/files/1165WNQKnzDXp6yeb5sF">/files/1165WNQKnzDXp6yeb5sF</a></td></tr><tr><td><a href="/pages/uGUA6GlkTOax9s6BGOer">/pages/uGUA6GlkTOax9s6BGOer</a></td><td><h2>Additional data</h2></td><td><a href="/files/abJMVq443GOqDdtK0Y1M">/files/abJMVq443GOqDdtK0Y1M</a></td></tr><tr><td><a href="/pages/EUFWVy5CkLieLFibn78t">/pages/EUFWVy5CkLieLFibn78t</a></td><td><h2>Chart styling</h2></td><td><a href="/files/YoeMZPUXF7y24gMAXhA9">/files/YoeMZPUXF7y24gMAXhA9</a></td></tr><tr><td><a href="/pages/YypQN17Oxk4Ko1gkB2mM">/pages/YypQN17Oxk4Ko1gkB2mM</a></td><td><h2>Appending to data labels</h2></td><td><a href="/files/CQf9DYs0lOKZiMAtaNTb">/files/CQf9DYs0lOKZiMAtaNTb</a></td></tr><tr><td><a href="/pages/6S3DeLtk9H6JRwkIksHs">/pages/6S3DeLtk9H6JRwkIksHs</a></td><td><h2>Set series color</h2></td><td><a href="/files/7BAILh44j5kaYjkIrgJo">/files/7BAILh44j5kaYjkIrgJo</a></td></tr><tr><td><a href="/pages/5klptIL9FyhZC3yOR421">/pages/5klptIL9FyhZC3yOR421</a></td><td><h2>Set as Total - Waterfall chart</h2></td><td><a href="/files/WpNbmrgpnv8IpFOorXeL">/files/WpNbmrgpnv8IpFOorXeL</a></td></tr><tr><td><a href="/pages/mEgFg1v4ZwA9S0czTGQ0">/pages/mEgFg1v4ZwA9S0czTGQ0</a></td><td><h2>Populating a Scatter chart</h2></td><td><a href="/files/XGKBPD0aWhNgy3Fic2ze">/files/XGKBPD0aWhNgy3Fic2ze</a></td></tr><tr><td><a href="/pages/O9QdiqhCbSZHIBXFOwwP">/pages/O9QdiqhCbSZHIBXFOwwP</a></td><td><h2>Various types of charts</h2></td><td><a href="/files/XGTqRGXDxB2RonzKMDxD">/files/XGTqRGXDxB2RonzKMDxD</a></td></tr><tr><td><a href="/pages/ct4FvWrk8yPxwNBt8Zh4">/pages/ct4FvWrk8yPxwNBt8Zh4</a></td><td><h2>Datapoints</h2></td><td><a href="/files/8jEqMA5xS0vP9wLndadq">/files/8jEqMA5xS0vP9wLndadq</a></td></tr><tr><td><a href="/pages/FQ0bWTFgO3gKsM1TVfBk">/pages/FQ0bWTFgO3gKsM1TVfBk</a></td><td><h2>Dynamic chart</h2></td><td><a href="/files/kllBsKtM9UIgMRCK4Mp5">/files/kllBsKtM9UIgMRCK4Mp5</a></td></tr></tbody></table>

### Pictures

<table data-view="cards"><thead><tr><th data-type="content-ref"></th><th data-hidden></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><a href="/pages/WgLi1SfOkvPnaYKZn8tK">/pages/WgLi1SfOkvPnaYKZn8tK</a></td><td><h2>Pictures</h2></td><td><a href="/files/qDicZGRIBnPTAzd6H8sK">/files/qDicZGRIBnPTAzd6H8sK</a></td></tr></tbody></table>

### Table

<table data-view="cards"><thead><tr><th data-type="content-ref"></th><th data-hidden></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><a href="/pages/VVFuOnPyoYnPRJtrKove">/pages/VVFuOnPyoYnPRJtrKove</a></td><td><h2>Populate simple table</h2></td><td><a href="/files/LeO1eHK1YD24UWveAtBd">/files/LeO1eHK1YD24UWveAtBd</a></td></tr><tr><td><a href="/pages/pENK6kxKnoVQonovKo3s">/pages/pENK6kxKnoVQonovKo3s</a></td><td><h2>Table styling</h2></td><td><a href="/files/EkaHpgZ5jVAgP5YDo6zB">/files/EkaHpgZ5jVAgP5YDo6zB</a></td></tr><tr><td><a href="/pages/khMcTZR6PRhh0bzKFJ4a">/pages/khMcTZR6PRhh0bzKFJ4a</a></td><td><h2>Using `text_runs` in Table cells</h2></td><td><a href="/files/Hr8eAxyCxcyh1sjQJBag">/files/Hr8eAxyCxcyh1sjQJBag</a></td></tr><tr><td><a href="/pages/2sVDRzjtYKArI1ugnCpJ">/pages/2sVDRzjtYKArI1ugnCpJ</a></td><td><h2>Handling merged cells</h2></td><td><a href="/files/Q4Bi1x3m8SHHSfXWWNqQ">/files/Q4Bi1x3m8SHHSfXWWNqQ</a></td></tr></tbody></table>

### Tags

<table data-view="cards"><thead><tr><th data-type="content-ref"></th><th data-hidden></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><a href="/pages/jq8ofQqeyJX98AHGwBJh">/pages/jq8ofQqeyJX98AHGwBJh</a></td><td><h2>Tags</h2></td><td><a href="/files/RTi1rmCRK5L097z5Lzdu">/files/RTi1rmCRK5L097z5Lzdu</a></td></tr><tr><td><a href="/pages/BsC5Apm8VZZrZLgttfqg">/pages/BsC5Apm8VZZrZLgttfqg</a></td><td><h2>Tags with styling</h2></td><td><a href="/files/Ke1lk6JriiPGeimcuRL8">/files/Ke1lk6JriiPGeimcuRL8</a></td></tr><tr><td><a href="/pages/iDSKuygRWklwvDqzDcZJ">/pages/iDSKuygRWklwvDqzDcZJ</a></td><td><h2>Tag Validation Mode</h2></td><td><a href="/files/6StnKccz8m4oLaXfiw2i">/files/6StnKccz8m4oLaXfiw2i</a></td></tr><tr><td><a href="/pages/lEvUNn1rgCNQn5Yu0TXd">/pages/lEvUNn1rgCNQn5Yu0TXd</a></td><td><h2>Tags in slide notes</h2></td><td><a href="/files/IOUqTqsyzy1txz7Rg4QO">/files/IOUqTqsyzy1txz7Rg4QO</a></td></tr></tbody></table>


# Presentation


# Naming output presentation

Use the `resultFileName` field to name your output file.&#x20;

JSON Payload

```javascript
{
 "presentation": {
    "template": "slides_as_template.pptx",
    "export_version": "Pptx2010",
    "resultFileName": "<name_of_my_report>",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Title 1",
            "content": "Automate PowerPoint Generation"
           }
         ]
      }
    ]
  }
}
```

{% file src="/files/-Mj4nNSqMXRJcPx-vlBq" %}


# Using multiple templates

You may have a scenario where you want to build a PowerPoint using slides from multiple template PowerPoints.&#x20;

To do this, you have to:

1. **Attach Files and/or Provide Template URLs:**

   * **File Attachment:** Attach your template PowerPoint files as `File` attachments in the `POST` request, using the parameter name `files`.

   ![](/files/nm6HjSB7gqnIrFcfDRKZ)

   * **Template URLs:** You can also use URLs for templates stored online, such as in Google Drive or OneDrive, which provide direct download access.
2. **Define Templates in Your JSON Payload:** Add a `template_list` parameter in your JSON payload, as shown below. The `template_list` should contain an entry for each template file, with a unique `template_id` and the name of each template file. Each `template` name must exactly match the filename of the corresponding "files" parameter sent in the form.

```json
{
   "presentation":{
      "template_list":[
         {
            "template_id":1,
            "template":"template-1.pptx"
         },
         {
            "template_id":2,
            "template":"template-2.pptx"
         },
         {
            "template_id":3,
            "template":"template-3.pptx"
         }
      ]
      ....
      
```

3. **Assign Template IDs to Slides:** In the JSON payload, specify a `template_id` for each slide to indicate which template file to use. Each `slide` object should include a `slide_index` and the `template_id` for the template it should follow.

```json
"slides":[
   {
      "template_id":1,
      "slide_index":0,
   ....   
```

#### Important Note

You cannot use both a single template file and multiple templates together. The following example demonstrates incorrect syntax:

```json
//This syntax is not allowed.
{
   "presentation":{
      "template":"template.pptx",
      "template_list":[
         {
            "template_id":1,
            "template":"template-1.pptx"
         },
         {
            "template_id":2,
            "template":"template-2.pptx"
         },
         {
            "template_id":3,
            "template":"template-3.pptx"
         }
      ],
      ....
```

Sample JSON payload:

```json
{
  "presentation": {
    "export_version": "Pptx2010",
    "template_list": [
      {
        "template_id": 1,
        "template": "template-1.pptx"
      },
      {
        "template_id": 2,
        "template": "template-2.pptx"
      },
      {
        "template_id": 3,
        "template": "template-3.pptx"
      }
    ],
    "slides": [
      {
        "template_id": 1,
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 5",
            "data": [
              [
                "Total",
                "Male",
                "Female"
              ],
              [
                "Read a printed newspaper",
                "Visited a newspaper website",
                "Read a printed magazine",
                "Read a digital magazine"
              ],
              [
                43.15,
                44.13,
                42.22
              ],
              [
                41.36,
                44.02,
                38.83
              ],
              [
                25.39,
                23.69,
                26.99
              ],
              [
                5.39,
                7.37,
                3.52
              ]
            ]
          }
        ]
      },
      {
        "template_id": 2,
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 7",
            "data": [
              [
                "Total",
                "Male",
                "Female"
              ],
              [
                "Read a printed newspaper",
                "Visited a newspaper website",
                "Read a printed magazine",
                "Read a digital magazine"
              ],
              [
                43.15,
                44.13,
                42.22
              ],
              [
                41.36,
                44.02,
                38.83
              ],
              [
                25.39,
                23.69,
                26.99
              ],
              [
                5.39,
                7.37,
                3.52
              ]
            ]
          }
        ]
      },
      {
        "template_id": 3,
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 5",
            "data": [
              [
                "Total",
                "Male",
                "Female"
              ],
              [
                "Read a printed newspaper",
                "Visited a newspaper website",
                "Read a printed magazine",
                "Read a digital magazine"
              ],
              [
                43.15,
                44.13,
                42.22
              ],
              [
                41.36,
                44.02,
                38.83
              ],
              [
                25.39,
                23.69,
                26.99
              ],
              [
                5.39,
                7.37,
                3.52
              ]
            ]
          }
        ]
      }
    ]
  }
}
```


# Using single template

1. Assign your PowerPoint template to the `template` field.&#x20;
2. Two ways to do this:
   1. [Attach the file to the payload ](#attaching-powerpoint-template)
   2. [Provide a downloadable link to it](#using-a-powerpoint-template-url)

### Attaching PowerPoint Template

Reference: [presentation](/json-template-syntax/presentation)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1UQYDCNrjWs7ynDf1cuay5LDqruFO-hzu) | [output.pptx](https://drive.google.com/uc?export=download\&id=15nSoFC7eSS8V93_b9G6wkYfjo4Me-6WP)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/dfykKTGTM6bExQXzSbHb" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/8v4Bf6yrHd4IaMcq7PSQ" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "tags": [
          {
            "key": "cover",
            "value": "Business"
          },
          {
            "key": "subtitle",
            "value": "Joe Blogs"
          },
          {
            "key": "report_description",
            "value": "How to use Tags in PowerPoint Generator API"
          },
          {
            "key": "date",
            "value": "01 Jan"
          },
          {
            "key": "company",
            "value": "Important LTD"
          },
          {
            "key": "product",
            "value": "API"
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}

### Using a PowerPoint Template URL

Reference: [presentation](/json-template-syntax/presentation)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=19Y7D7cH7y46RWGn1JbPFzntQgboPQT1b) | [output.pptx](https://drive.google.com/uc?export=download\&id=1ObzAn-WGozvQgcBuaYeKvOaTlr27PA-Q)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/d081KveOhwBXAPKRqUgS" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/6ihbRpiWOZtSgquWfeyw" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "https://drive.google.com/uc?export=download&id=1SJA6NG5jKV5bCM6sIqVCVJh20YM3QbTU",
    "slides": [
      {
        "slide_index": 0,
        "tags": [
          {
            "key": "cover",
            "value": "Business"
          },
          {
            "key": "subtitle",
            "value": "Joe Blogs"
          },
          {
            "key": "report_description",
            "value": "How to use Tags in PowerPoint Generator API"
          },
          {
            "key": "date",
            "value": "01 Jan"
          },
          {
            "key": "company",
            "value": "Important LTD"
          },
          {
            "key": "product",
            "value": "API"
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Using multiple templates

You may have a scenario where you want to build a PowerPoint using slides from multiple template PowerPoints.&#x20;

To do this, you have to:

1. **Attach Files and/or Provide Template URLs:**

   * **File Attachment:** Attach your template PowerPoint files as `File` attachments in the `POST` request, using the parameter name `files`.

   ![](/files/nm6HjSB7gqnIrFcfDRKZ)

   * **Template URLs:** You can also use URLs for templates stored online, such as in Google Drive or OneDrive, which provide direct download access.
2. **Define Templates in Your JSON Payload:** Add a `template_list` parameter in your JSON payload, as shown below. The `template_list` should contain an entry for each template file, with a unique `template_id` and the name of each template file. Each `template` name must exactly match the filename of the corresponding "files" parameter sent in the form.

{% code lineNumbers="true" %}

```json
{
   "presentation":{
      "template_list":[
         {
            "template_id":1,
            "template":"template-1.pptx"
         },
         {
            "template_id":2,
            "template":"template-2.pptx"
         },
         {
            "template_id":3,
            "template":"template-3.pptx"
         }
      ]
      ....
      
```

{% endcode %}

3. **Assign Template IDs to Slides:** In the JSON payload, specify a `template_id` for each slide to indicate which template file to use. Each `slide` object should include a `slide_index` and the `template_id` for the template it should follow.

{% code lineNumbers="true" %}

```json
"slides":[
   {
      "template_id":1,
      "slide_index":0,
   ....   
```

{% endcode %}

#### Important Note

You cannot use both a single template file and multiple templates together. The following example demonstrates incorrect syntax:

{% code lineNumbers="true" %}

```json
//This syntax is not allowed.
{
   "presentation":{
      "template":"template.pptx",
      "template_list":[
         {
            "template_id":1,
            "template":"template-1.pptx"
         },
         {
            "template_id":2,
            "template":"template-2.pptx"
         },
         {
            "template_id":3,
            "template":"template-3.pptx"
         }
      ],
      ....
```

{% endcode %}

Reference: [presentation](/json-template-syntax/presentation)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1MKJPv8T46FK_p39vDvq_9Rm3pJaqeNKo) | [output.pptx](https://drive.google.com/uc?export=download\&id=1KFTmyMb2gMOnv6zrMqaZZ4wjGCSRok8A)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/hqrHGJs8CW5UsW3e0kdP" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/mUjZqHZkGbs3Nw4P7LwL" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/vFdHNmrJM6iPHIzaU8Q6" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template_list": [
      {
        "template_id": 1,
        "template": "template-1.pptx"
      },
      {
        "template_id": 2,
        "template": "template-2.pptx"
      }
    ],
    "slides": [
      {
        "slide_index": 0,
        "template_id": 1,
        "shapes": [
          {
            "name": "Chart 1",
            "data": [
              [
                "North",
                "South",
                "East",
                "West"
              ],
              [
                "January",
                "February",
                "March",
                "April"
              ],
              [
                11,
                15,
                4,
                7
              ],
              [
                15,
                35,
                23,
                18
              ],
              [
                40,
                50,
                65,
                44
              ],
              [
                60,
                73,
                52,
                68
              ]
            ]
          }
        ]
      },
      {
        "slide_index": 0,
        "template_id": 2,
        "shapes": [
          {
            "name": "Chart 1",
            "data": [
              [
                "Product A",
                "Product B",
                "Product C"
              ],
              [
                "Q1",
                "Q2",
                "Q3"
              ],
              [
                72,
                78,
                81
              ],
              [
                68,
                74,
                77
              ],
              [
                85,
                88,
                90
              ]
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Replacing tags - Presentation Level

Replace text in curly brackets (tags) with string values at a presentation level.

1. To mark text for replacement in your PowerPoint, wrap them with double curly brackets.&#x20;
2. This creates a `key` that you can assign a new string `value` to using a JSON payload.
3. Insert the `key` and `value` within the `tags` object&#x20;

<div><figure><img src="/files/eoahNhQBlpVns1QSdrlc" alt=""><figcaption><p>BEFORE</p></figcaption></figure> <figure><img src="/files/gZqCE8dIAxRH7ko4WN27" alt=""><figcaption><p>AFTER</p></figcaption></figure></div>

Template Presentation

{% file src="/files/X7OqLlf9HLfCV8PigHLu" %}

JSON Payload

{% code overflow="wrap" lineNumbers="true" %}

```css
{
  "presentation": {
    "template": "slides_as_template_tagging.pptx",
    "export_version": "Pptx2010",
    "tags": [
      {
        "Key": "presentation_title",
        "Value": "My Presentation"
      },
      {
        "Key": "presenter",
        "Value": "John Doe"
      },
      {
        "Key": "date",
        "Value": "01 January 1999"
      },
      {
        "Key": "client_name",
        "Value": "Important Company LTD"
      }
    ]
  }
}
```

{% endcode %}


# Slide


# Repeat template slides by index

Easily create multiple copies of your template slides using slide index

1. You can repeat a template slide using the slide index to create multiple copies as needed&#x20;
2. 0-based indexing

Reference: [slides](/json-template-syntax/slides)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1T6s05nUKSCv2B4KOsn6Bd9eTEaXIC6qp) | [output.pptx](https://drive.google.com/uc?export=download\&id=13k9wfKLTK5RjdMP93Hjgi6KcF1kc1vyh)&#x20;

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/kgS8tF5MF8FOg9b5rO41" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/21kKsPNou3kzNAXLZaJj" alt=""><figcaption></figcaption></figure>

{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "tags": [
          {
            "key": "num",
            "value": "1"
          },
          {
            "key": "title",
            "value": "Product Sales"
          }
        ]
      },
      {
        "slide_index": 1,
        "shapes": [
          {
            "name": "Chart 7",
            "title": "H1 Revenue - Product 1",
            "data": [
              ["North", "South", "East", "West"],
              ["Jan-25", "Feb-25", "Mar-25", "Apr-25", "May-25", "Jun-25"],
              [11, 15, 4, 7],
              [25, 20, 77, 30],
              [40, 30, 65, 20],
              [55, 50, 80, 60], 
              [70, 60, 85, 72], 
              [85, 90, 95, 88]    
            ]
          }
        ]
      },
      {
        "slide_index": 1,
        "shapes": [
          {
            "name": "Chart 7",
            "title": "H1 Revenue - Product 2",
            "data": [
              ["North", "South"],
              ["Jan-25", "Feb-25", "Mar-25", "Apr-25", "May-25", "Jun-25"],
              [11, 25],
              [15, 30],
              [13, 40],
              [20, 60],
              [30, 80],
              [55, 83]
            ]
          }
        ]
      },
      {
        "slide_index": 0,
        "tags": [
          {
            "key": "num",
            "value": "2"
          },
          {
            "key": "title",
            "value": "Services Sales"
          }
        ]
      },
      {
        "slide_index": 1,
        "shapes": [
          {
            "name": "Chart 7",
            "title": "H1 Revenue - Services 1",
            "data": [
              ["North", "South", "East", "West"],
              ["Jan-25", "Feb-25", "Mar-25", "Apr-25", "May-25", "Jun-25"],
              [25, 20, 15, 10],
              [41, 25, 35, 25],
              [25, 36, 50, 15],
              [55, 45, 65, 35], 
              [60, 55, 50, 40], 
              [70, 80, 75, 50]    
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Repeat template slides by ID

Easily create multiple copies of your template slides using slide id

You can repeat a template slide using the slide's unique identifier to create multiple copies as needed.

Using `slide_id` ensures the correct slide is referenced even if the slide order or structure changes within the template.

PowerPoint does not surface slide IDs in its user interface. To obtain one, inspect the underlying file structure.

#### Method 1: Unzip the file

A `.pptx` is a ZIP archive.

1. Copy the file and rename the extension from `.pptx` to `.zip`.
2. Extract it.
3. Open `ppt/_rels/presentation.xml.rels` and `ppt/presentation.xml`.

In `presentation.xml`, the `<p:sldIdLst>` element lists every slide in presentation order:

```xml
<p:sldIdLst>
  <p:sldId id="256" r:id="rId2"/>
  <p:sldId id="257" r:id="rId3"/>
</p:sldIdLst>
```

The `id` attribute is the slide ID. The `r:id` maps to a relationship in `presentation.xml.rels`, which resolves to the actual slide part (e.g. `slides/slide1.xml`). Slide IDs start at 256 and are stable across reordering — the position in `<p:sldIdLst>` changes, the `id` does not.

#### Method 2: python-pptx

```python
from pptx import Presentation

prs = Presentation("deck.pptx")
for index, slide in enumerate(prs.slides, start=1):
    print(f"Position {index}: slide_id={slide.slide_id}")
```

#### Method 3: VBA

Run this from the PowerPoint VBA editor (Alt+F11 → Insert → Module → F5) with the presentation open. It prints every slide's ID and position to the Immediate window (Ctrl+G):

```vb
Sub ListSlideIDs()
    Dim sld As Slide
    For Each sld In ActivePresentation.Slides
        Debug.Print "Position " & sld.SlideIndex & _
                    ": slide_id=" & sld.SlideID & _
                    " (" & sld.Name & ")"
    Next sld
End Sub
```

To get the ID of just the slide currently selected:

```vb
Sub CurrentSlideID()
    MsgBox ActiveWindow.View.Slide.SlideID
End Sub
```

Reference: [slides](/json-template-syntax/slides)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1zA8cXcsD5A-wkk29CzUfyUX_vgc3QgLI) | [output.pptx](https://drive.google.com/uc?export=download\&id=1ybUoTvnijzpmq0CUFgLw8IuvmvGGKrhG)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/kU41yjuOCWd1XHKxhGmt" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/y3C5i2pD2Zz7IhRnMvvp" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_id": 265
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Replacing tags

Tags allow you to populate text by replacing the tag with a value of your choice.

To update the tags in your slides, provide a list of key-value pairs for each slide. PowerPoint Generator API will then find and replace all matching tags with the specified values.

To create a tag, enclose your text in double curly braces, like this: `{{example_tag}}`.

Tags can be placed in text boxes or table shapes, making it easy to customize your presentation dynamically.

![](/files/-MjEhk0qXgsPferRbcBc)

{% file src="/files/-MjEgv3hpNUFkHMBUN5C" %}

```javascript
{
  "presentation": {
    "template": "slides_as_template_tagging.pptx",
    "export_version": "Pptx2010",
    "slides": [
      {
        "type": "slide", 
        "slide_index": 0,
        "shapes": [],
        "tags": [
          {
            "key": "client",
            "value": "Your favourite client"
          },
          {
            "key": "date",
            "value": "09/09/2021"
          }
        ]  
      },
      {
        "type": "slide",
        "slide_index": 1, 
        "shapes": [],
        "tags": [          
          {
            "key": "product",
            "value": "PowerPoint Generator API"
          },
          {
            "key": "adjective",
            "value": "frustrating"
          }
        ]
      }
    ]
  }
}
```


# Shape


# Get shape by name

To find a given shape's name, follow these steps:

1. Open your template presentation in PowerPoint.
2. In the `Home` tab find `Arrange` and select `Selection Pane`.

{% hint style="warning" %}
PowerPoint does not enforce unique shape names - two shapes on the same slide can share a name. You can manually change the names yourself if needed.
{% endhint %}

<figure><img src="/files/mpEL6lHEXJUMlWvBo8IA" alt=""><figcaption></figcaption></figure>

3. The panel on the right will highlight the name of the shapes. Copy the shape names you wanted to populate and customise.&#x20;

<figure><img src="/files/mahY7v5eOVF4ewqPczHy" alt=""><figcaption></figcaption></figure>

Reference: [shapes](/json-template-syntax/shapes)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1prJurJ5B-J3Mfh_rDUMm0ZUrJwwAWTUw) | [output.pptx](https://drive.google.com/uc?export=download\&id=16TVZ1Yf765BuzFB8Ap6VDSYskC-WlLlU)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/cN8AyfG2a0p7C53vbJmZ" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/qLKcuwkLIuYVXYJBM1Ym" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
    "presentation": {
        "template": "template.pptx",
        "slides": [
            {
                "slide_index": 0,
                "shapes": [
                    {
                        "name": "Chart 5",
                        "data": [
                            ["Q1", "Q2", "Q3", "Q4"],
                            ["Product A", "Product B", "Product C", "Product D"],
                            [45, 32, 20, 18],
                            [55, 40, 30, 22],
                            [60, 48, 36, 28],
                            [72, 55, 42, 35]
                        ]
                    }
                ]
            }
        ]
    }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Get shape by ID

PowerPoint's UI does not display shape IDs. You must inspect the underlying Open XML.

#### Method 1 - Unzip the file

A `.pptx` is a ZIP archive.

1. Copy the file and rename the extension from `.pptx` to `.zip`.
2. Extract it.
3. Open `ppt/slides/slide1.xml` (numbering matches slide order) in a text editor.
4. Locate the shape's `<p:nvSpPr>` block. The ID is the `id` attribute on `<p:cNvPr>`:

```xml
<p:spTree>
  <p:nvGrpSpPr>
    <p:cNvPr id="2" name="Textbox 1"/>
  </p:nvGrpSpPr>
  <p:sp>
    <p:nvSpPr>
      <p:cNvPr id="3" name="Chart 1"/>
    </p:nvSpPr>
  </p:sp>
</p:spTree>
```

This slide contains 2 shapes, with IDs `2` and `3`. The `name` attribute is the Selection Pane name, which is your bridge between the visual editor and the XML.

{% hint style="info" %}
**Tip:** In PowerPoint, open **Home → Arrange → Selection Pane** and rename each target shape to something unique (e.g. `chart_q3_revenue`). Then search the XML for that name to find its ID.
{% endhint %}

#### Method 2 - python-pptx

```python
from pptx import Presentation

prs = Presentation("deck.pptx")
for i, slide in enumerate(prs.slides, start=1):
    for shape in slide.shapes:
        print(f"slide {i} | id={shape.shape_id} | name={shape.name}")
```

#### Method 3 - VBA

```vba
Sub ListShapeIds()
    Dim sld As Slide, shp As Shape
    For Each sld In ActivePresentation.Slides
        For Each shp In sld.Shapes
            Debug.Print sld.SlideIndex, shp.Id, shp.Name
        Next
    Next
End Sub
```

Run from the VBA editor (`Alt+F11`) and read output in the Immediate Window (`Ctrl+G`).

#### Notes

* Shape IDs are unique **per slide**, not per presentation. Always pair a shape ID with its slide index.
* IDs are stable across saves and edits, but a copy-pasted shape receives a new ID.
* Shapes inside a group have their own IDs; the group itself also has one.
* Placeholders from the layout carry IDs like any other shape.

Reference: [shapes](/json-template-syntax/shapes)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1lg3VvGtF3lq_4lGIiBd79l23zSRmdsni) | [output.pptx](https://drive.google.com/uc?export=download\&id=1Uy6jmd5cnWqs2OZrVFdO4uqrp7YXswDo)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/w6YFfR4uzgk72aWoNIh9" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/ir1D9xNiSui3mpHRkp2E" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
    "presentation": {
        "template": "template.pptx",
        "slides": [
            {
                "slide_index": 0,
                "shapes": [
                    {
                        "shape_id": 6,
                        "data": [
                            ["Q1", "Q2", "Q3", "Q4"],
                            ["Product A", "Product B", "Product C", "Product D"],
                            [45, 32, 20, 18],
                            [55, 40, 30, 22],
                            [60, 48, 36, 28],
                            [72, 55, 42, 35]
                        ]
                    }
                ]
            }
        ]
    }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Change shape size and position

To change the size and position of a shape(text box, image, table, charts, etc)

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Insert relevant size or position settings into `settings` object&#x20;
3. Set the desire shape size `height` `weight` & position `top` `left` using a JSON payload
4. Specify the unit `unit`

Reference: [shapes](/json-template-syntax/shapes)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1FALMMGpypbESNdfcFz6iccnaL6tw8vC3) | [output.pptx](https://drive.google.com/uc?export=download\&id=1cG7Lu9Mx6WPUfjy_1HyJbjBFdsTiRqTq)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/XzHY3spSmW8tVJGddeN5" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/bqcaW8kTrtOXBCiPPBk6" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "type": "slide",
        "slide_index": 0,
        "shapes": [
          {
            "name": "Rectangle 1",
            "settings": {
              "height": 5,
              "width": 9,
              "top": 8.5,
              "left": 15.25,
              "unit": "cm"
            }
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Change shape background color

Easily change a shape's interior color

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Set the `fill_color` property inside the `settings` object to change a shape’s background color.
3. Define `fill_color` with a:
   1. Hex code (e.g. `"#000000"`) or
   2. RGB (e.g. `"0,0,0"`) or
   3. [Color name](https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties) (e.g. `"black"`)

Reference: [shapes](/json-template-syntax/shapes)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=13sij2cc8hxK3wyOrSxy0Y3VeUX2-cZT-) | [output.pptx](https://drive.google.com/uc?export=download\&id=1PpHn2WHbSkNIa0zr_dzXosQ8oKn0xML_)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/Hg7GkbJsMAmr8rorXBdn" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/WRWXvGo6MuqtHEJQUXIW" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Rectangle 1",
            "settings": {
              "fill_color": "#C916D4"
            }
          },
          {
            "name": "Rectangle 5",
            "settings": {
              "fill_color": "255, 165, 119"
            }
          },
          {
            "name": "Chart 6",
            "settings": {
              "fill_color": "beige"
            }
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Hide or remove shape

To hide or remove a shape (text box, image, table, chart, etc)

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Use `Remove` (boolean) to delete a shape from the slide
3. Use `is_hidden` (boolean) to hide the shape. Can be unhidden using PowerPoint GUI.

Reference: [shapes](/json-template-syntax/shapes)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1QNjFvemIWDe3LR0RzkS-4GwvGUhlMkXn) | [output.pptx](https://drive.google.com/uc?export=download\&id=1bUIaH65g-bdw_hpzVApAU8kJIG91n6fd)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/XOOExLN2Pu2dYxEM50Tf" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/Mwz7w6gr2r1XxFeBD68W" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Rectangle 1",
            "is_hidden": true
          },
          {
            "name": "Rectangle 5",
            "remove": true
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Shape validation mode

1. Can be applied at the presentation or slide level (the lowest level takes precedence).
2. Select between the two modes:&#x20;
   1. [#strict](#strict "mention") or&#x20;
   2. [#lenient](#lenient "mention")

See below to learn more about each mode:

### Strict

1. The system validates all shapes defined in the payload.
2. If any shape is missing from the `template.pptx`, a `VALIDATION_ERROR` (400) is returned.

Reference: [shapes](/json-template-syntax/shapes)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1V76kCUKJEt6HHbcpPk8E0l1n-5Yif6JE)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/vXnAdH0guUIbBIAp9pWa" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
    "presentation": {
        "template": "template.pptx",
        "shape_validation_mode": "strict",
        "slides": [
            {
                "slide_index": 0,
                "shapes": [
                    {
                        "name": "TextBox 1",
                        "text":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"
                    },
                    {
                        "name": "TextBox 500",
                        "text":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"
                    },
                    {
                        "name": "TextBox 600",
                        "text":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"
                    },
                    {
                        "name": "TextBox 4",
                        "text":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"
                    }
                ]
            }
        ]
    }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}

### Lenient

1. Missing shapes are skipped without interrupting execution.
2. This mode is useful when working with templates that have optional placeholders or evolving structures.

Reference: [shapes](/json-template-syntax/shapes)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1E8ofueM6hVMXGxFxta2TIA7aAK00eTGu) | [output.pptx](https://drive.google.com/uc?export=download\&id=1rx-KPV1rLxC7pSkYZWP793z52d5DRI5f)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/IA5PLhJGykbQbp0cagsR" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/PtWLDWSUx03S9mttGfQk" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
    "presentation": {
        "template": "template.pptx",
        "shape_validation_mode": "lenient",
        "slides": [
            {
                "slide_index": 0,
                "shapes": [
                    {
                        "name": "TextBox 1",
                        "text":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"
                    },
                    {
                        "name": "TextBox 500",
                        "text":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"
                    },
                    {
                        "name": "TextBox 600",
                        "text":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"
                    },
                    {
                        "name": "TextBox 4",
                        "text":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"
                    }
                ]
            }
        ]
    }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Textboxes


# Add text

Insert text to a given text shape

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Use the `text` field to assign new text to the shape.

Reference: [textbox](/json-template-syntax/shapes/textbox)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1CTmGoTD2KN3_zZS3cA7_AakBkxnD8Pff) | [output.pptx](https://drive.google.com/uc?export=download\&id=17ETLu1CxO2SGK2vFTLC5copByznJhcX2)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/oBEixzRrCBTWLiWYbATs" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/nPDcKQ5uY6F9h36C2qz2" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Title 1",
            "text": "Automate PowerPoint Generation"
          },
          {
            "name": "Subtitle 2",
            "text": "Create, fill and manage PowerPoint documentations through simple API requests."
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Text styling

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Use the `text` property to define one or more **text runs** — each run can have its own visual properties.
3. Each text run uses the `text_run` field to define content, and the `text_properties` field to specify styling such as:
   1. `font_type`, `font_size`, `font_color`
   2. `font_bold`, `font_italic`, `font_underline`
   3. `text_align`, `font_bg_color`, and `new_line` (to start a new line)
4. Use `settings` for general text box configuration such as line spacing, alignment, and vertical positioning.

Reference: [textbox](/json-template-syntax/shapes/textbox#settings-object)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1GfNyIgUysOA4J6YOmJuZPGYtpQFohADW) | [output.pptx](https://drive.google.com/uc?export=download\&id=1nMTWN05aloRWCPXFsOYv4ceA0IOghjYW)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/p2tD3HVmuVhDaWIwqt3A" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/wLbp1BVyG9XzyHRWwqrD" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "TextBox 1",
            "text": [
              {
                "text_run": "Courier New ",
                "text_properties": {
                  "font_type": "Courier New",
                  "font_size": 36,
                  "font_color": "114, 225, 210"
                }
              },
              {
                "text_run": "36",
                "text_properties": {
                  "font_type": "Courier New",
                  "font_size": 36,
                  "font_color": "255, 255, 0",
                  "new_line":true 
                }
              },
              {
                "text_run": "Italic Arial ",
                "text_properties": {
                  "font_type": "Arial",
                  "font_italic": true,
                  "font_size": 48,
                  "font_color": "242, 174, 247"
                }
              },
              {
                "text_run": "28",
                "text_properties": {
                  "font_type": "Arial",
                  "font_italic": true,
                  "font_size": 28,
                  "font_color": "0, 176, 80",
                  "text_align": "right",
                  "new_line":true 
                }
              },
              {
                "text_run": "Bold Verdana ",
                "text_properties": {
                  "font_type": "Verdana",
                  "font_bold": true,
                  "font_size": 28,
                  "font_color": "241, 194, 50"
                }
              },
              {
                "text_run": "50",
                "text_properties": {
                  "font_type": "Verdana",
                  "font_bold": true,
                  "font_size": 28,
                  "font_color": "112, 48, 160",
                  "font_bg_color": "#817463",
                  "new_line":true 
                }
              },
              {
                "text_run": "Alignment right",
                "text_properties": {
                  "font_type": "Forte",
                  "font_size": 20,
                  "text_align": "right",
                  "font_color": "255, 255, 255",
                  "font_bg_color": "#817463",
                  "new_line":true 
                }
              },
              {
                "text_run": "Underline",
                "text_properties": {
                  "font_type": "Segoe Script",
                  "font_size": 36,
                  "text_align": "center",
                  "font_underline": "single",
                  "font_color": "0, 176, 240",
                  "new_line":true
                }
              },
              {
                "text_run": "Text highlight ",
                "text_properties": {
                  "font_type": "Impact",
                  "font_size": 20,
                  "text_align": "left",
                  "font_color": "orange",
                  "font_bg_color": "#00ff00"
                }
              }
            ]
          },
          {
            "name": "TextBox 2",
            "text": "First line\nSecond line\nThird line\nFourth line",
            "settings": {
              "text_line_spacing": 1.5,
              "vertical_anchor": "middle",
              "font_type": "Courier New",
              "font_size": 15,
              "font_bold": true,
              "font_italic": true,
              "text_align": "center",
              "font_color": "114, 225, 210"
            }
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Set font type and size

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Specify the text need amending under `text_run`. Text within one textbox can be split into multiple chunks. &#x20;
3. Add font setting `font_type` or font size setting `font_size` for selected text under `text_properties`.
4. Insert `new_line` as boolean before another `text_run`.&#x20;

Before and after:

![](/files/1gyRYkmA3s5vL7rwjwdm)![](/files/FEoqdIQFsimZbxLwJDPU)

Template Presentation

{% file src="/files/yhJxMMOWNqbRfyLpZlDF" %}

JSON Payload

{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "slides_as_template_text_font_size.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Title 1",
            "text": [
              {
                "text_run": "Text font\n",
                "text_properties": {
                  "font_type": "Arial",
                  "font_size": 32
                }
              },
              {
                "text_run": "Text font",
                "text_properties": {
                  "font_type": "Arial",
                  "font_size": 25
                }
              }
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}


# Set font color and font background color

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Specify the text need amending under `text_run`. Text within one textbox can be split into multiple chunks. &#x20;
3. Add font color setting `font_color` or font backgrount stetting `font_bg_color` for selected text under `text_properties`.
4. Insert either c[olor name](https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.colors?view=windowsdesktop-7.0#properties) (e.g. black), RGB (e.g. 0,0,0), or [Hex](https://www.color-hex.com/) (e.g. #000000) as value for `font_color` and `font_bg_color`
5. Insert `new_line` as boolean before another `text_run`.&#x20;

Before and After

![](/files/zsGINst4gMoMjrr5LlD9)![](/files/eTFtLqLJAoQTIZlOqx0h)

Template Presentation

{% file src="/files/DFvKU5H9m59hW5cHAqRp" %}

JSON Payload

{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "slides_as_template_text_font_color.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Title 1",
            "text": [
              {
                "text_run": "Text color",
                "text_properties": {
                  "font_color": "147, 147, 132"
                }
              },
              {
                "text_run": "Text background color",
                "text_properties": {
                  "font_bg_color": "#f5f5dc"
                }
              }
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}


# Set bold, italic & underline

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Specify the text need amending under `text_run`. Text within one textbox can be split into multiple chunks. &#x20;
3. Add font settings for selected text under `text_properties`.
4. Insert `new_line` as boolean before another `text_run`.&#x20;
5. For more options for`font_underline` please refer to this page \[link].&#x20;

![](/files/7exBec8R7uvUD72wBXCl)

Before vs After

![](/files/cJKzRlyFbsbnHWUzwEUQ)![](/files/pogpPaBJLOTorrqou7my)

Template Presentation

{% file src="/files/SMkmDFwtzd74BCLCDpbL" %}

JSON Payload

{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "slides_as_template_bold.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Title 1",
            "text": [
              {
                "text_run": "Text bold\n",
                "text_properties": {
                  "font_bold": true
                }
              },
              {
                "text_run": "Text italic\n",
                "text_properties": {
                  "font_italic": true
                }
              },
              {
                "text_run": "Text underline\n",
                "text_properties": {
                  "font_underline": "single"
                }
              }
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}


# Set text alignment

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Specify the text need amending under `text_run`. Text within one textbox can be split into multiple chunks. &#x20;
3. Add font settings for selected text under `text_properties`.
4. Insert `new_line` as boolean before another `text_run`.&#x20;

Before and After

![](/files/UJjshj1rwk0ykta2377x)![](/files/MgSed6Y9jErdbyRPiaAo)

Template Presentation

{% file src="/files/6PvGN5hesXoIj5EaugSy" %}

JSON Payload

{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "slides_as_template_text_align.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Title 1",
            "text": [
              {
                "text_run": "Text align: left\n",
                "text_properties": {
                  "text_align": "left"
                }
              },
              {
                "text_run": "Text align: center\n",
                "text_properties": {
                  "text_align": "center"
                }
              },
              {
                "text_run": "Text align: right\n",
                "text_properties": {
                  "text_align": "right"
                }
              },
              {
                "text_run": "Text align: justified\n",
                "text_properties": {
                  "text_align": "justified"
                }
              },
              {
                "text_run": "Text align: distribution\n",
                "text_properties": {
                  "text_align": "dist"
                }
              }
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}


# Set text indentation

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Specify the text need amending under `content`.&#x20;
3. Add indent settings `text_indent`.

Before and After

![](/files/DBVBG9cOAvTpaIVoWirc)![](/files/bnt0WUSvwOovmOwdTSCO)

Template Presentation

{% file src="/files/C4f7ax1j7ONAcLxxjkxV" %}

JSON Payload

{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "slides_as_template_text_indent.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Title 2",
            "content": "Text indent",
            "settings": {
              "text_indent": 40
            }
          }
        ]
      }
    ]
  }
}
```

{% endcode %}


# Set text line spacing

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Specify the text need amending under `text_run`. Text within one textbox can be split into multiple chunks. &#x20;
3. Add font settings for selected text under `text_properties`.
4. Insert `new_line` as boolean before another `text_run`.&#x20;

Before and After

![](/files/XDfaQF0xPCHEVjJVnZyZ)

Template Presentation

JSON Payload

{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "slides_as_template_text_line_spacing.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Title 2",
            "content": "Text indent",
            "settings": {
              "text_line_spacing": 3
            }
          }
        ]
      }
    ]
  }
}
```

{% endcode %}


# Using bullet-points

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Use `text_run` to list your text into separate chunks.
3. Control bullet-point properties in `text_properties`.

Reference: [textbox](/json-template-syntax/shapes/textbox#text_properties-object)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=13wtWnNKMSzl_96FTEREqK-P7jXs2W7LF) | [output.pptx](https://drive.google.com/uc?export=download\&id=1OFQWTwDAl2XMWNnfG5sCNcFpk3e0m9iI)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/fwAZu7Y0rwsDAheH9Ov4" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/EQ0sZyPEXZXPWjHxQiQx" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "TextBox 5",
            "text": [
              {
                "text_run": "Below below is a list:\n",
                "text_properties": {
                  "font_type": "Arial"
                }
              },
              {
                "text_run": "This is the start of the list",
                "text_properties": {
                  "bullet": true,
                  "bullet_font_name": "Wingdings",
                  "bullet_character_code": 158,
                  "bullet_color": "pink",
                  "bullet_indent_level": 1,
                  "bullet_size": 100,
                  "bullet_type": "Symbol",
                  "font_size": 15,
                  "font_type": "Arial Black"
                }
              },
              {
                "text_run": "This is the second",
                "text_properties": {
                  "bullet": true,
                  "bullet_font_name": "Wingdings",
                  "bullet_character_code": 167,
                  "bullet_color": "0,150,0",
                  "bullet_indent_level": 2,
                  "bullet_size": 100,
                  "bullet_type": "Symbol",
                  "font_size": 20,
                  "font_type": "Arial Narrow"
                }
              },
              {
                "text_run": "This is the third",
                "text_properties": {
                  "bullet": true,
                  "bullet_font_name": "Wingdings",
                  "bullet_character_code": 172,
                  "bullet_color": "yellow",
                  "bullet_indent_level": 3,
                  "bullet_size": 100,
                  "bullet_type": "Symbol",
                  "font_size": 25,
                  "font_type": "Arial Nova Light"
                }
              },
              {
                "text_run": "This is the fourth",
                "text_properties": {
                  "bullet": true,
                  "bullet_font_name": "Wingdings",
                  "bullet_character_code": 216,
                  "bullet_color": "240,40,200",
                  "bullet_indent_level": 3,
                  "bullet_size": 100,
                  "bullet_type": "Symbol",
                  "font_size": 30,
                  "font_type": "Arial Black"
                }
              },
              {
                "text_run": "This is the fifth",
                "text_properties": {
                  "bullet": true,
                  "bullet_font_name": "Wingdings",
                  "bullet_character_code": 158,
                  "bullet_color": "255,75,75",
                  "bullet_indent_level": 3,
                  "bullet_size": 125,
                  "bullet_type": "Symbol",
                  "bullet_indent": 2.5,
                  "font_size": 30,
                  "font_type": "Arial Black"
                }
              }
            ]
          },
          {
            "name": "Subtitle 2",
            "text": "30 Oct 2025"
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Bullet-points simple

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Use `text_run` to list your text into separate chunks.
3. Control bullet-point properties in `text_properties`.

Reference: [textbox](/json-template-syntax/shapes/textbox#text_properties-object)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1AEqYRS3HNDBHshZOK0KJddfVIvZzjMql) | [output.pptx](https://drive.google.com/uc?export=download\&id=1igIMGJFYTtL8iz5YkszuCrVaQilO0qSA)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/bEiHwVC3PJdqzO0LQqLG" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/ZWEXYLCaj3QXRdovSq0I" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "TextBox 1",
            "text": [
              {
                "text_run": "Point 1 ",
                "text_properties": {
                  "bullet": true
                }
              },
              {
                "text_run": "Point 2",
                "text_properties": {
                  "bullet": true,
                  "font_bold": true,
                  "font_size": 20
                }
              },
              {
                "text_run": "Point 3",
                "text_properties": {
                  "bullet": true
                }
              },
              {
                "text_run": "Point 4",
                "text_properties": {
                  "bullet": true,
                  "font_bold": true,
                  "font_size": 20
                }
              }
            ]
          },
          {
            "name": "TextBox 2",
            "text": [
              {
                "text_run": "Point 1\nPoint 2\nPoint 3\nPoint 4",
                "text_properties": {
                  "bullet": true,
                  "font_bold": true
                }
              }
            ]
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Chart


# Various types of charts

All chart types provided by PowerPoint are supported.&#x20;

Here are a few examples:&#x20;

* [#line-chart](#line-chart "mention")
* [#bar-chart](#bar-chart "mention")
* [#stacked-bar-chart](#stacked-bar-chart "mention")
* [#stacked-area-chart](#stacked-area-chart "mention")
* [#bar-line-combo-chart](#bar-line-combo-chart "mention")
* [#scatter-chart](#scatter-chart "mention")

These can be customized using the standard `data` and `settings` parameters in your payload.

Reference: [chart](/json-template-syntax/shapes/chart)

### Line chart

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1kteeNIRCLhVbHEyhogaeSBCOqsG_3mcu) | [output.pptx](https://drive.google.com/uc?export=download\&id=1Y1eHtkroJU2BPQeG0j4-Q3u1H5-xV2FD)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/7I4FE7sfW1ASRb1JCisC" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/tgTLdWxlyPo5YDQ8Sw2F" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 1",
            "title": "Quarterly Business Performance (2025)",
            "data": [
              [
                "Revenue",
                "Expenses",
                "Profit"
              ],
              [
                "Q1",
                "Q2",
                "Q3",
                "Q4"
              ],
              [
                5.2,
                3.1,
                4.6
              ],
              [
                2.8,
                2.5,
                3.2
              ],
              [
                2.4,
                0.6,
                1.4
              ],
              [
                1.3,
                4.0,
                2.4
              ]
            ]
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}

### Bar chart

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1lk_eGi3UEAZWkL88PvGLx-saUFY1edt4) | [output.pptx](https://drive.google.com/uc?export=download\&id=1RgJyUc6fQIA0i2W_Sz6hz2wBUNIQO_WS)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/eYKminMWSgiHPiKGG0bx" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/9OLZwwvgpmTqov744XAZ" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 1",
            "title": "Average Annual Precipitations",
            "data": [
              [
                "North",
                "South",
                "East",
                "West"
              ],
              [
                "January",
                "February",
                "March",
                "April"
              ],
              [
                11,
                15,
                4,
                7
              ],
              [
                15,
                35,
                23,
                18
              ],
              [
                40,
                50,
                65,
                44
              ],
              [
                60,
                73,
                52,
                68
              ]
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}

### Stacked Bar chart

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1SA0jxYaBBqKb0GCfCTy2X9XYxklPc6D5) | [output.pptx](https://drive.google.com/uc?export=download\&id=1hxA14ZozN79ktO-19WUsvWfkOjgp2dIA)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/nTh35mdsiKOYvvRec0wz" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/4vqJx9VNcVMWkK0yPkfy" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 1",
            "title": "Monthly Revenue Breakdown (2025)",
            "data": [
              [
                "Online Sales",
                "In-Store Sales"
              ],
              [
                "January",
                "February",
                "March",
                "April",
                "May",
                "June"
              ],
              [
                12000,
                9500
              ],
              [
                18000,
                11000
              ],
              [
                22000,
                13000
              ],
              [
                19500,
                14000
              ],
              [
                25000,
                12500
              ],
              [
                17000,
                9000
              ]
            ]
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}

### Stacked Area chart

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1YXddibN0CubzzTtQZJ7CyRldyY3t6L-o) | [output.pptx](https://drive.google.com/uc?export=download\&id=172hHYimihH-DAIPwHbajOM6AKxEI6FDc)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/OfmTJXNKqAJ2CfFi3Dnh" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/ZncLHQjPYfFObbBmh4X4" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 1",
            "title": "Monthly Revenue Breakdown (2025)",
            "data": [
              [
                "Online Sales",
                "In-Store Sales"
              ],
              [
                "January",
                "February",
                "March",
                "April",
                "May",
                "June"
              ],
              [
                12000,
                9500
              ],
              [
                18000,
                11000
              ],
              [
                22000,
                13000
              ],
              [
                19500,
                14000
              ],
              [
                25000,
                12500
              ],
              [
                17000,
                9000
              ]
            ]
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}

### Bar/Line Combo chart

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1HguMn9OrUH2Gw_VKZyxoP1ptotQ_qX8L) | [output.pptx](https://drive.google.com/uc?export=download\&id=1mZWNA8Y4xeuKG_VW5dZ6H1AdPxM5ru3K)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/bOwZGLcEJm2Oi6hPWKWm" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/C8XkxB6PdyEbJ0rEAGPR" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 1",
            "title": "Quarterly Sales and Profit Margin",
            "data": [
              [
                "North Region",
                "South Region",
                "Profit Margin"
              ],
              [
                "Q1",
                "Q2",
                "Q3",
                "Q4"
              ],
              [
                32000,
                27000,
                35000
              ],
              [
                28000,
                30000,
                33000
              ],
              [
                38000,
                36000,
                41000
              ],
              [
                42000,
                39000,
                45000
              ]
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}

### Scatter chart

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1lrQgT1_9WT9aDoT7XT-2J41xgyH3kP9K) | [output.pptx](https://drive.google.com/uc?export=download\&id=1DoIaMlZ0g0llCyA11kCKEdbSU9e2gWRq)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/xVtWNvWADBCQpiIrunpB" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/Ak6cdM0rAJPSYwXPnSdt" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Plot",
            "data": [
              [
                "a",
                "b",
                "c"
              ],
              [
                3.8,
                3.2,
                7.6,
                9.3
              ],
              [
                7.2,
                5.5,
                6.3,
                4.1
              ],
              [
                6.2,
                4.5,
                5.3,
                3.1
              ],
              [
                1.2,
                3.5,
                9.3,
                1.1
              ]
            ],
            "additional_data": [
              {
                "cell_target": "A2",
                "data": [
                  [
                    "A"
                  ],
                  [
                    "B"
                  ],
                  [
                    "C"
                  ],
                  [
                    "D"
                  ]
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Change font settings

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Under `settings`, insert desire font under `chartFont` and font size under `chartFontSize`

Reference:

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1rjLJisx063Urb8Fo66mBmXieeLZ2gqMc) | [output.pptx](https://drive.google.com/uc?export=download\&id=1sizwBYW4Cz7D81-amJJfrqpfEPbtI9Pz)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/goIA42AdyjO2njmqPRuv" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/4OazwN46qjIWjrt5fZ36" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "export_version": "Pptx2010",
    "slides": [
      {
        "type": "slide",
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 1",
            "settings": {
              "chartFont": "Trebuchet MS",
              "chartFontSize": 30
            }
          }
        ]
      }
    ]
  }
}

```

{% endcolumn %}
{% endcolumns %}


# Insert data

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Use `data` to update a chart’s data range
3. Under `data`:&#x20;
   * First array: Contains the series names (legend labels).
   * Second array: Contains the category labels (X-axis items).
   * Third array and onwards: Each subsequent array contains the data values corresponding to a specific category. The order of these arrays matches the order of the categories defined in the second array.

Reference: [chart](/json-template-syntax/shapes/chart#data-object)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1ohPP4VVimOa4pXo6rltS8wi8Urij60kG) | [output.pptx](https://drive.google.com/uc?export=download\&id=1Qup4CqoOoWC9qHEuvk6SIEiwWST1ejTX)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/OY4fnsNj3fF65BMc6LwL" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/CdSultLFgwab9a3jspbf" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 1",
            "title": "Average Annual Precipitations",
            "data": [
              [
                "North",
                "South",
                "East",
                "West"
              ],
              [
                "January",
                "February",
                "March"
              ],
              [
                11,
                15,
                4,
                7
              ],
              [
                25,
                60,
                77,
                30
              ],
              [
                40,
                50,
                65,
                44
              ]
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Additional data

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Use `additional_data` to insert custom values directly into specific cells.&#x20;
3. Each `cell_target` defines the starting cell where the data will be written.
4. `Additional_data` is not tied to the chart’s data range, so you can add data anywhere. It's useful for when you want to add helper values, metadata, or computed fields without affecting the main chart series.

Reference: [chart](/json-template-syntax/shapes/chart)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1RjhuXp3a-I531dgZBia3_80O6akhWQO8) | [output.pptx](https://drive.google.com/uc?export=download\&id=1CynZMM_5aPHuI4wjGAwVTCm1hwSkNtAC)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/rPdVQEprnXvtRB7TjIMn" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/aXwABXDyrQVbv0qY6wST" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
    "presentation": {
        "template": "template.pptx",
        "slides": [
            {
                "slide_index": 0,
                "shapes": [
                    {
                        "name": "Chart 5",
                        "additional_data": [
                            {
                                "cell_target": "B22",
                                "data": [
                                    [
                                        0.2,
                                        0.3,
                                        0.35
                                    ],
                                    [
                                        0.4,
                                        0.5,
                                        "0.45%"
                                    ]
                                ]
                            },
                            {
                                "cell_target": "A2",
                                "data": [
                                    [
                                        " ",
                                        35,
                                        0.6
                                    ],
                                    [
                                        "maj",
                                        0.5,
                                        58
                                    ]
                                ]
                            },
                            {
                                "cell_target": "A4",
                                "data": [
                                    [
                                        "Category 3",
                                        5,
                                        10
                                    ]
                                ]
                            },
                            {
                                "cell_target": "AA5",
                                "data": [
                                    [
                                        0.5,
                                        0.2
                                    ],
                                    [
                                        0.455,
                                        0.7234
                                    ]
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Set series color

1. Select the shape by `name` you want to modify. See [here](https://docs.powerpointgeneratorapi.com/knowledge-base/finding-shape-names) to find shape names.
2. Specify chart title under `title` if necessary
3. Use the `series` array inside `settings` to define colors for each data series individually.
4. Each entry in the array corresponds to a series and accepts the following parameters:
   1. **fillColor** — RGB value in the format `"R,G,B"`.
   2. **seriesIndex** — Zero-based index of the series to apply the color to.
5. This allows precise color customization for each series in the chart, independent of the template’s default palette.

Reference: [chart](/json-template-syntax/shapes/chart#settings-object)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1rS8jMqNEV1fD8PsqODVexHGlSqm5cLyQ) | [output.pptx](https://drive.google.com/uc?export=download\&id=1zbVI_X9xGwngZr-9RHiKBCiIeDiBUHmH)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/lEL6LAsKRWkkcpmb9ERR" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/o7jvugwNoNsLQ4kbHuHB" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
    "presentation": {
        "template": "template.pptx",
        "slides": [
            {
                "slide_index": 0,
                "shapes": [
                    {
                        "name": "Chart 1",
                        "settings": {
                            "series": [
                                {
                                    "fillColor": "255,0,0",
                                    "seriesIndex": 0
                                },
                                {
                                    "fillColor": "0,255,0",
                                    "seriesIndex": 1
                                },
                                {
                                    "fillColor": "0,0,255",
                                    "seriesIndex": 2
                                }
                            ]
                        }
                    }
                ]
            }
        ]
    }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Chart styling

1. Specify the chart title under `title` if necessary.
2. Under `settings`, you can:
   1. Insert chart legend related settings (see [Adjust chart legend](/examples/chart/adjust-chart-legend) section).
   2. Configure chart legend options such as **`chartShowLegend`**, **`chartLegendPosition`**, **`chartLegendFontColor`**, and **`isChartLegendBold`**.
   3. Define the desired chart title using **`title`**.
   4. Set the font and size with **`chartFont`** and **`chartFontSize`**
   5. Optionally, adjust the data label color using **`chartDataLabelColor`** (e.g., `"Red"`, `"Black"`, `"Green"` color names only).

Reference: [chart](/json-template-syntax/shapes/chart)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1-5Hrk14ysqqqAfjdKhVTyuhQhWX5Vgrx) | [output.pptx](https://drive.google.com/uc?export=download\&id=1omjFFDnN_diClmoaMy5udwXvQ8vL-anf)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/Fbi1PBKafUsjHg3vbh6K" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/WRtrrdYhZJcsa73I3rFq" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 1",
            "settings": {
              "chartShowLegend": true,
              "chartLegendPosition": "Bottom",
              "chartLegendFontColor": "255,0,0",
              "isChartLegendBold": true,
              "title": "Average Annual Precipitations",
              "chartFont": "Trebuchet MS",
              "chartFontSize": 20,
              "chartDataLabelColor": "Red"
            }
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Datapoints

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Define the chart’s data under `data`.
3. Use `settings.isChartLabelValueVisible` to globally enable or disable all value labels.
4. Use `datapoints` to override that setting for specific data points.
5. Each datapoint uses:
   1. `categoryIndex`: the position of the data point on the X-axis (starting from 0).
   2. `seriesIndex`: the index of the data series in your dataset (starting from 0).
   3. `isLabelValueVisible`: whether the label for that specific point should be visible.

Reference: [chart](/json-template-syntax/shapes/chart)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1Gk-fotRQr1INYuxfQx53HOJUx8kr6G5o) | [output.pptx](https://drive.google.com/uc?export=download\&id=1qqehNvGnqo_RsZrQ2Fnh3AuIx0bcqLA_)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/2eylmFBWxmalirfr2kkr" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/N5Y7AxWxDmza8k0XY0B0" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 1",
            "data": [
              [
                "series-a", 
                "series-b"
              ],
              [
                  5, 
                  2
              ],
              [
                  3, 
                  2.3
              ],
              [
                  4, 
                  1
              ],
              [
                  6, 
                  2.5
              ],
              [
                  4.5, 
                  1.8
              ],
              [
                  7, 
                  2.2
              ]
            ],
            "settings": {
              "isChartLabelValueVisible": false,
              "datapoints": [
                {
                  "isLabelValueVisible": true,
                  "categoryIndex": 0,
                  "seriesIndex": 0
                },
                {
                  "isLabelValueVisible": true,
                  "categoryIndex": 2,
                  "seriesIndex": 1
                },
                {
                  "isLabelValueVisible": true,
                  "categoryIndex": 5,
                  "seriesIndex": 0
                }
              ]
            }
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Dynamic chart

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. You can add additional series to a chart by specifying new series keys in your payload.
   1. Any newly added series will be created as a copy of the last existing series.
3. If your `template` contains more series than the provided data, the extra series will be automatically removed.
4. Axes that no longer contain any data after this adjustment will also be deleted.

Reference: [chart](/json-template-syntax/shapes/chart)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1_hLWEznVkokPtJRgNs_kSR1_sUcIVDyV) | [output.pptx](https://drive.google.com/uc?export=download\&id=1JNA98ejRIgUEN7X4WGpTNcG9zUneeg-g)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/5nBmzUZKhMsCvy2Tvr5i" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/WK3oHMQ6yP5uP4p7R4Z4" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 1",
            "title": "Monthly Revenue in 2024 (in millions)",
            "data": [
              [
                "Revenue"
              ],
              [
                "January", 
                "February", 
                "March", 
                "April", 
                "May", 
                "June"
              ],
              [
                  4.8
              ],
              [
                  5.2
              ],
              [
                  6.1
              ],
              [
                  5.9
              ],
              [
                  7.0
              ],
              [
                  8.3
              ]
            ]
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Adjust chart legend

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Specify chart title under `title` if necessary
3. Insert chart legend reltaed settings under `settings.` For more info please refer to "Chart legend" section on this page [chart](/json-template-syntax/shapes/chart)
4. Insert data value under `data.` For more info please refer to this page [chart](/json-template-syntax/shapes/chart).

Reference: [chart](/json-template-syntax/shapes/chart)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1_dMJMzCtXA5NIU4TloYRAXZjkDTdznBk) | [output.pptx](https://drive.google.com/uc?export=download\&id=1LVZwYRMNvj6ASAW4tjXd3ALEv9LxXCx7)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/gqfU5WZEWIKmtnc9N7Gy" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/DMzrEjw0rbTGFCyQME8U" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "export_version": "Pptx2010",
    "slides": [
      {
        "type": "slide",
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 1",
            "title": "Average Annual Precipitations",
            "settings": {
              "chartShowLegend": true,
              "chartLegendPosition": "Top",
              "chartLegendFontColor": "255,0,0",
              "isChartLegendBold": true
            }
          }
        ]
      }
    ]
  }
}

```

{% endcolumn %}
{% endcolumns %}


# Appending to data labels

Easily insert custom strings into the data label object using \`"overlays"\`.

1. Use the array `"overlays"` to pass a list of objects for each corresponding data label.  Each data label can have multiple overlays applied to it.&#x20;
2. Overlays can require a 'value' (string), 'color' and where in relation to the data label the overlay needs to be positioned ('position').

Reference: [chart](/json-template-syntax/shapes/chart)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1f31Qi3JwDLVQDJjRlZlnfztRRYNXG_zc) | [output.pptx](https://drive.google.com/uc?export=download\&id=1zHWFWCKFaih6WzcrTWTAsEX2aYgAqViM)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/r4XJcnVCup3neSnAQiVP" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/Srs9MOLqwCpohuLsV1d2" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Chart 1",
            "title": "Automating shape types",
            "categoryTitle": "Month",
            "valueTitle": "Times used",
            "data": [
              ["Intense Demand", "Dip-in Demand", "Low-no Demand"],
              [
                "Read a printed newspaper",
                "Visited a newspaper website",
                "Read a printed magazine",
                "Read a digital magazine",
                "None of the above"
              ],
              [25.87, 38.58, 49.69],
              [49.05, 40.58, 38.45],
              [100, 75.23, 34.98],
              [6.54, 5.64, 4.96],
              [78.32, 95.75, 97]
            ],
            "overlays": [
              [
                {
                  "value": "\u2191",
                  "color": "255,0,0",
                  "position": "left"
                },
                {
                  "value": "\u2194",
                  "color": "255,0,0",
                  "position": "above"
                },
                {
                  "value": "\u2191",
                  "color": "255,0,0",
                  "position": "above"
                }
              ],
              [
                {
                  "value": "\u2193",
                  "color": "255,0,0",
                  "position": "below"
                }
              ],
              [
                {
                  "value": "\u2193",
                  "color": "255,0,0",
                  "position": "left"
                },
                {
                  "value": "\u2193",
                  "color": "255,0,0",
                  "position": "above"
                }
              ],
              [
                {
                  "value": " \u2191",
                  "color": "255,0,0",
                  "position": "right"
                }
              ],
              [{}],
              [{}],
              [
                {
                  "value": "\u2191",
                  "color": "255,0,0",
                  "position": "right"
                }
              ],
              [
                {
                  "value": "\u2191",
                  "color": "255,0,0",
                  "position": "right"
                }
              ],
              [{}],
              [{}],
              [{}],
              [{}],
              [
                {
                  "value": "\u2194",
                  "color": "255,0,0",
                  "position": "below"
                }
              ],
              [{}],
              [{}]
            ]
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Set as Total - Waterfall chart

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Use the `settings` field to define which data points should be treated as total by setting the `set_as_total` property to `true`.

Reference: [chart](/json-template-syntax/shapes/chart)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1ErSP84Cpqp78whpSK0djFJIQnMB52jwP) | [output.pptx](https://drive.google.com/uc?export=download\&id=11dKsIKo4ZNW1JjVKolu0hGmD5Fw0sVxL)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/bMFBDi8ydm4FMY7t72GL" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/T6NV5ZDSKY2y7zp104m7" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "waterfallChart",
            "data": [
              ["Series 1"],
              [
                "Item 1",
                "Item 2",
                "Item 3",
                "Item 4",
                "Item 5",
                "Total"
              ],
              [1],
              [2],
              [3],
              [4],
              [5],
              [15]
            ],
            "settings": {
              "datapoints": [
                {
                  "seriesIndex": 0,
                  "categoryIndex": 2,
                  "set_as_total": true
                },
                {
                  "seriesIndex": 0,
                  "categoryIndex": 0,
                  "set_as_total": true
                }
              ]
            }
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Populating a Scatter chart

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Under `data`:
   1. Define the main dataset for the chart.
   2. Use `additional_data` to insert extra information into specific cells in the chart’s data table.
   3. Each `cell_target` defines where the data will start being written.

Reference: [chart](/json-template-syntax/shapes/chart)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1bYMrqWiBoA04XYkSqgdtKC5Fb2uycSA9) | [output.pptx](https://drive.google.com/uc?export=download\&id=1nFvSCu5VkanLvXZvX8LR16VB2_YT5Tib)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/jLMtfdDmes1dy7ddyHAR" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/UPSQLOhK7F7Mo1H8skek" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
    "presentation": {
        "template": "template.pptx",
        "slides": [
            {
                "slide_index": 0,
                "shapes": [
                    {
                        "name": "Plot",
                        "data": [
                            [
                              "a",
                              "b",
                              "c"
                            ],
                            [
                                3.8,
                                3.2,
                                7.6,
                                9.3
                            ],
                            [
                                7.2,
                                5.5,
                                6.3,
                                4.1
                            ],
                            [
                                6.2,
                                4.5,
                                5.3,
                                3.1
                            ],
                            [
                                1.2,
                                3.5,
                                9.3,
                                1.1
                            ]
                        ],
                        "additional_data":[
                            {
                                "cell_target": "A2",
                                "data": [
                                    ["A"],
                                    ["B"],
                                    ["C"],
                                    ["D"]
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Pictures

Replace an existing image placeholder with a new image.

* Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
* Insert path of new image to `filename` property. This can be:
  1. a downloadable URL link as a string
  2. or a file attachment
* New image will inherit the size and positioning of the existing image placeholder.

Reference: [picture](/json-template-syntax/shapes/picture)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1txEnBnRmlOXX4ZPDt4edP-pccZoLvqxI) | [output.pptx](https://drive.google.com/uc?export=download\&id=10Fjqlx9xuVd3GBNMFXglfohK69MTj-SX)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/UMu5lQeRwgetvOYFjZQg" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/wh70nPrsSrnkvzU19AlC" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Picture 1",
            "filename": "happy with automation.jpg"
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Pictures

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Insert path of new image to `filename` property. This can be:
   1. a downloadable URL link as a string
   2. or a file attachment

Note: The new image will automatically inherit the size and positioning of the existing image placeholder.

Reference: [picture](/json-template-syntax/shapes/picture)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1sHs2DEoFJ3x4h5f4FDW_kpr_6cqy62EI) | [output.pptx](https://drive.google.com/uc?export=download\&id=1nnZsYkMhCFO_Y_EXACHnD9iPzB8QSIvW)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/gygt6Xt4c38Pb0ihxBLx" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/DnmyolqIWxurIlQmYhd8" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Picture 1",
            "filename": "shirt.png"
          },
          {
            "name": "Picture 2",
            "filename": "https://drive.google.com/uc?export=download&id=1ZT3FbKEE-wm7nIqEjQFO_s7bap_vxaqa"
          },
          {
            "name": "Picture 3",
            "filename": "short.png"
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Table


# Populate simple table

Tables enable you to edit tables in your template for use in your presentation.

Example below populates a dummy table shape with text.&#x20;

1. Find the shape `name` you want to update. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Use the `data_cells` object to populate a table shape. It is a 2-dimensions array of cell values. Each cell value can be a simple string or a text object.

Before and after

![](/files/hcsjVtZbT6bdISUFBfRc)

Template Presentation

{% file src="/files/-Mj9ytUn5Lql2iAovmdT" %}

JSON Payload

```javascript
{
  "presentation": {
  "template": "slides_as_template_table.pptx",
  "export_version": "Pptx2010",
    "slides": [
      {
        "type": "slide",
        "slide_index": 2,
        "shapes": [
          {
            "name": "Table 2",
            "data_cells": [
              [
                "Charts",
                "Tables",
                "Pictures",
                "Textboxes",
                "Tagging",
                "Styling"
              ],
              [
                "Insert new chart objects",
                "Insert new table objects",
                "Insert new picture objects",
                "Input strings into text boxes",
                "Use powerful tagging to replace strings efficiently",
                "Use you branded and styled PowerPoint decks as template" 
              ],
              [
                "Configure any chart properties",
                "Configure any table properties",
                "Replace existing pictures with new pictures",
                "Or change any textbox setting and create new ones",
                null,
                "or style your presentation via API"
              ]
            ]
          }
        ]
      }
    ]
  }
}
```


# Populate simple table

Fill a table using a two-dimensional array of cell values

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Use the `data_cells` object to populate a table shape. It is a 2-dimensions array of cell values.&#x20;
3. Each cell value can be a simple string or a text object.
4. You can provide more or fewer rows or columns than the template shape

Reference: [table](/json-template-syntax/shapes/table)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1LAZ0SnGwRBkn5aU2VCO0anUyATxXAM-E) | [output.pptx](https://drive.google.com/uc?export=download\&id=1-LtSqPiUpAKFrSLOb-FNeRaezNCtYWI1)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/pdVrggZnxsE9Ro3uV95z" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/GajPardUnckpDs7DF0cU" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
  "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Table 1",
            "data_cells": [
              [
                "Jan",
                "Feb",
                "Mar",
                "Apr",
                "May",
                "Jun"
              ],
              [
                "45",
                "65",
                "23",
                "63",
                "74",
                "69" 
              ],
              [
                "1",
                "98",
                "6",
                "45",
                "41",
                "60"
              ]
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Table styling

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. To set background colors for specific table cells, use the `data_cells` property.
3. Each cell can include a `cell_properties` object to define its style (e.g., `bg_color`).
4. You can pass multiple rows, each represented as an array of cell definitions or strings.
5. When `data_cells` is used, all table rows are replaced — define every row you need to keep.

Reference: [table](/json-template-syntax/shapes/table)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1rrEq3p8VyCIjdMcnAdsAtZGU8j4QkN_n) | [output.pptx](https://drive.google.com/uc?export=download\&id=1TWJf2gbVJ6Ab4SGy7zojEHJnt3t8l3IW)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/FGAtRxKMCbZos0RQLx5k" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/SJG8KJGxlQGzatMjeYc6" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Table 5",
            "data_cells": [
              [
                {
                  "cell_properties": {
                    "bg_color": "#64bbd1"
                  }
                },
                {
                  "cell_properties": {
                    "bg_color": "#64bbd1"
                  }
                },
                {
                  "cell_properties": {
                    "bg_color": "#3c707d"
                  }
                },
                {
                  "cell_properties": {
                    "bg_color": "#3c707d"
                  }
                },
                {
                  "cell_properties": {
                    "bg_color": "#2c535d"
                  }
                },
                {
                  "cell_properties": {
                    "bg_color": "#2c535d"
                  }
                }
              ],
              [
                "",
                "",
                {
                  "cell_properties": {
                    "bg_color": "#ff8686"
                  }
                },
                {
                  "cell_properties": {
                    "bg_color": "#ff8686"
                  }
                },
                "",
                ""
              ]
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Using \`text\_runs\` in Table cells

Use text runs to apply different font settings to different strings in the same cell.

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. To set the styling of specific chunks of string in a cell, you will need to pass a list of `text_run` objects to define each piece of text.

Reference: [textbox](/json-template-syntax/shapes/textbox#text-object)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1TnVNcFWk8HYu8OpWpufGpNDwHusPbQ38) | [output.pptx](https://drive.google.com/uc?export=download\&id=15sZ58sMiAUOtP5yGSCW8KNzCdyhF8uzv)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/KnN2QfejEm16Fk65DOb9" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/YResCxiTAxUjgHFwk522" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "name": "Table 1",
            "data_cells": [
              [
                "",
                {
                  "cell_properties": {
                    "bg_color": "0,128,0"
                  },
                  "text_runs": [
                    {
                      "text_run": "Simple cell value in cell"
                    }
                  ]
                },
                "*Number is set to black, Unicode arrow is green",
                "*Red arrow is left of number.  Green arrow is right of number",
                "*Arrows are above and below number",
                "*Arrows are above, below, left and right of number"
              ],
              [
                "Examples:",
                76,
                {
                  "cell_properties": {
                    "bg_color": "0,128,0"
                  },
                  "text_runs": [
                    {
                      "text_run": "12.0 ",
                      "text_properties": {
                        "font_type": "Comic Sans MS",
                        "font_size": 24,
                        "font_bold": true,
                        "font_italic": true,
                        "font_underline": "single",
                        "font_color": "0,0,0",
                        "font_bg_color": "255,165,0",
                        "text_align": "right",
                        "text_indent": 1,
                        "text_line_spacing": 4.2,
                        "new_line": true
                      }
                    }
                  ]
                },
                {
                  "cell_properties": {
                    "bg_color": "255,255,0"
                  },
                  "text_runs": [
                    {
                      "text_run": "",
                      "text_properties": {
                        "new_line": true
                      }
                    },
                    {
                      "text_run": "\u25B2",
                      "text_properties": {
                        "font_color": "255,0,0",
                        "new_line": true
                      }
                    },
                    {
                      "text_run": " 14.0 ",
                      "text_properties": {
                        "font_color": "0,0,0",
                        "font_bold": false,
                        "new_line": false
                      }
                    },
                    {
                      "text_run": "\u25BC",
                      "text_properties": {
                        "font_color": "0,128,0",
                        "new_line": false
                      }
                    },
                    {
                      "text_run": "",
                      "text_properties": {
                        "new_line": true
                      }
                    }
                  ]
                },
                {
                  "cell_properties": {
                    "bg_color": "0,128,0"
                  },
                  "text_runs": [
                    {
                      "text_run": "\u2191",
                      "text_properties": {
                        "font_color": "128,0,128",
                        "new_line": true
                      }
                    },
                    {
                      "text_run": "7.0",
                      "text_properties": {
                        "font_color": "0,0,0",
                        "font_bold": false,
                        "new_line": true
                      }
                    },
                    {
                      "text_run": "\u2193",
                      "text_properties": {
                        "font_color": "255,0,0",
                        "new_line": true
                      }
                    }
                  ]
                },
                "Last column"
              ]
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Handling merged cells

You can add data to tables even if there are merged cells.

Using the following payload you can add data to all cells, including the merged cells.&#x20;

1. Select the shape by `name` you want to modify. See [here](/knowledge-base/finding-shape-names) to find shape names.
2. Each list in \`data\_cells\` denotes a row in your table.&#x20;
3. Each row list must have the same number of list objects. Data from the last merged cell will be rendered to the merged cell in your table shape.

{% hint style="info" %}
Limitation - currently, if your table shape has a merged cell, your payload must have the same number of data points otherwise it will fail. This will be improved very soon.&#x20;
{% endhint %}

Reference: [table](/json-template-syntax/shapes/table)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1mzqgQh2n_HOdh1SiVYvnoY99C-MOW5M4) | [output.pptx](https://drive.google.com/uc?export=download\&id=1glVhMuea6R4df3-OJM4ouOAcJTayg5_L)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/oLfOEI8ZXjswHO6ZYjl4" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/r1Lm19wEAiUMnOgCaN81" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "shapes": [
          {
            "type": "table",
            "name": "Table 2",
            "data_cells": [
              [
                "A1",
                "A2",
                "A3",
                "A4",
                "A5",
                "A6"
              ],
              [
                "",
                "",
                "B1:B3",
                "B4",
                "B5",
                "B6"
              ],
              [
                "C1",
                "C2",
                "C3",
                "C4",
                "C5",
                "C6"
              ],
              [
                "D1",
                "D2",
                "D3",
                "D4",
                "D5",
                "D6"
              ]
            ]
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Update a specific cells in existing table

How to update a specific cells without editing existing cells

Sometimes, you may need to retain the content of an existing table while modifying specific cells. To achieve this, use the keyword `null` to skip the cells you don't want to change.&#x20;

In the example below, we updated the cell value in row 2, column 3 from `70%` to `NA`, and added a new row with data for `FIAT`. All other cells remain unchanged.

Before vs after

<div><figure><img src="/files/4VY7Pz81ZnjIqWwRohmk" alt=""><figcaption></figcaption></figure> <figure><img src="/files/6n4TFR2xNvLAKYApsnWO" alt=""><figcaption></figcaption></figure></div>

Template Presentation

{% file src="/files/r0OFgbqkhyXkgtbjEuAi" %}

JSON Payload

```json
{
    "presentation": {
        "template": "Table-Shape-New-Data.pptx",
        "export_version": "Pptx2013",
        "slides": [
            {
                "type": "slide",
                "slide_index": 0,
                "shapes": [
                    {
                        "name": "Mytable",
                        "data_cells": [
                            [
                                null,
                                null,
                                null,
                                null
                            ],
                            [
                                null,
                                null,
                                "NA",
                                null
                            ],
                            [
                                null,
                                null,
                                null,
                                null
                            ],
                            [
                                null,
                                null,
                                null,
                                null
                            ],
                            [
                                "FIAT",
                                "30%",
                                "40%",
                                "50%"
                            ]
                        ]
                    }
                ]
            }
        ]
    }
}
```


# Tags

Tags allow you to populate text by replacing the tag with a value of your choice.

1. Write tags inside double curly braces, e.g. `{{placeholder}}`.
2. Put them in text boxes or tables.
3. Send a list of key-value pairs to the PowerPoint Generator API, and it will replace each tag with your values.

Note: All styling and formatting will be inherited unless you specify otherwise.

Reference: [tags](/json-template-syntax/tags)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1hNN26PbIiwqAgZkHi-HYYkhwc0XP2hlc) | [output.pptx](https://drive.google.com/uc?export=download\&id=1t_6T2wjVQ5jzYny5Yt6NxeQnJdvNz7Ez)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/yLRNXlwg0kvT1fJkx1Lh" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/2MHKcQUucL7aLHDq2aUr" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "tags": [
          {
            "key": "cover",
            "value": "Business"
          },
          {
            "key": "subtitle",
            "value": "Joe Blogs"
          },
          {
            "key": "report_description",
            "value": "How to use Tags in PowerPoint Generator API"
          },
          {
            "key": "date",
            "value": "01 Jan"
          },
          {
            "key": "company",
            "value": "Important LTD"
          },
          {
            "key": "product",
            "value": "API"
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Tags with styling

Control the look and feel of individual tags

1. Include optional styling instructions for each tag to control its appearance.
2. If no styling is specified, the tag inherits the default formatting from the tag's text.

Reference: [tags](/json-template-syntax/tags)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1anCYNK3SgAB94XUYbyrXov5qwi0KR1Z8) | [output.pptx](https://drive.google.com/uc?export=download\&id=17Qg-VeNRwWK8l_RA6Ftp2uLWaoplStbJ)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/ZpYhMKYedL4S9rFF5HUh" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/RMlCPBJHdlJFQv6vecDZ" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "tags": [
          {
            "key": "tag1",
            "value": "Set your own styling",
            "font_type": "Forte",
            "font_size": 25,
            "font_color": "#FF0000"
          },
          {
            "key": "tag2",
            "value": "Override existing styling",
            "font_underline": false,
            "font_bold": false,
            "font_size": 40,
            "font_color": "yellow",
            "font_type": "Impact"
          },
          {
            "key": "tag3",
            "value": "How to use Tags in PowerPoint Generator API",
            "font_italic": true,
            "font_size": 20,
            "font_bold": true,
            "font_color": "#0070C0"
          },
          {
            "key": "ph1",
            "value": "first",
            "font_type": "Magneto",
            "font_size": 30.5,
            "font_underline": true
          },
          {
            "key": "ph2",
            "value": "second",
            "font_type": "Arial",
            "font_size": 8
          },
          {
            "key": "ph3",
            "value": "third",
            "font_type": "Times New Roman",
            "font_size": 15,
            "font_underline": true
          },
          {
            "key": "ph4",
            "value": "first",
            "font_size": 35,
            "font_italic": true
          },
          {
            "key": "ph5",
            "value": "second",
            "font_italic": true,
            "font_size": 20,
            "font_bold": true,
            "font_color": "39,186,166"
          },
          {
            "key": "ph6",
            "value": "third",
            "font_type": "Arial",
            "font_size": 15,
            "font_underline": true
          },
          {
            "key": "txt1",
            "value": "Rev",
            "font_type": "Magneto",
            "font_size": 30.5,
            "font_underline": true
          },
          {
            "key": "txt2",
            "value": "55",
            "font_italic": true,
            "font_size": 30,
            "font_bold": true,
            "font_color": "150,60,250"
          },
          {
            "key": "txt3",
            "value": "Iphone",
            "font_type": "Aptos",
            "font_size": 15,
            "font_underline": true
          }
        ]
      }
    ]
  }
}
```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Tag Validation Mode

1. Can be applied at the presentation level or slide level (the lowest level takes precedence).
2. Select between the two modes: [#strict](#strict "mention") or [#lenient](#lenient "mention")

### Strict

1. The system validates all tags defined in the payload.
2. If any tag is missing from the template.pptx, a `VALIDATION_ERROR` (400) is returned.

Reference: [tags](/json-template-syntax/tags)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1-ou1x1WjiEOmhxMj7jUss85hS85CkESc)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/RZl7u4VLKUwily8l1cg8" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "tag_validation_mode": "strict",
    "slides": [
      {
        "slide_index": 0,
        "tags": [
          {
            "key": "non-existent-tag",
            "value": "ONE"
          },
          {
            "key": "date",
            "value": "TWO"
          },
          {
            "key": "client",
            "value": "THREE"
          },
          {
            "key": "type",
            "value": "FOUR"
          },
          {
            "key": "month",
            "value": "FIVE"
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}

### Lenient

1. Missing tags are skipped without interrupting execution.
2. This mode is useful when working with templates that have optional placeholders or evolving structures.

Reference: [tags](/json-template-syntax/tags)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1VwMvF4DU16NoW37-n4MEQl7pFpeD0W6w) | [output.pptx](https://drive.google.com/uc?export=download\&id=1-thmVhz_GgRuLGKvAUM0_ZEMW-IpetxD)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/RZl7u4VLKUwily8l1cg8" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/aglw0RF73ndBH3Iz9zUh" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "tag_validation_mode": "lenient",
    "slides": [
      {
        "type": "slide",
        "slide_index": 0,
        "tags": [
          {
            "key": "non-existent-tag",
            "value": "ONE"
          },
          {
            "key": "date",
            "value": "TWO"
          },
          {
            "key": "client",
            "value": "THREE"
          },
          {
            "key": "type",
            "value": "FOUR"
          },
          {
            "key": "month",
            "value": "FIVE"
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


# Tags in slide notes

1. You can update `notes` section of any slide by providing key–value pairs under `tags`.
2. Each tag replaces a corresponding `{{placeholder}}` found in the slide’s notes.

Reference: [tags](/json-template-syntax/tags)

Download: [input.zip](https://drive.google.com/uc?export=download\&id=1_Fy8gnyHaeDoHlkEfULX4S33xUZKx-Zn) | [output.pptx](https://drive.google.com/uc?export=download\&id=1PcT1iem94AqCir-91b2w2gvOZs0KVvvZ)

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="/files/txIfmx6RAxM6DJXMWJlt" alt=""><figcaption></figcaption></figure>

***

<figure><img src="/files/Veq7g6FeJQNtSXPuJOrO" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
{% code lineNumbers="true" %}

```json
{
  "presentation": {
    "template": "template.pptx",
    "slides": [
      {
        "slide_index": 0,
        "tags": [
          {
            "key": "author",
            "value": "John Doe"
          },
          {
            "key": "tag-on-line-one",
            "value": "This report shows the latest campaign performance results."
          },
          {
            "key": "tag-in-sentence",
            "value": "five million pounds"
          },
          {
            "key": "tag-1",
            "value": "six percent increase"
          },
          {
            "key": "tag-2",
            "value": "seven point rise in brand awareness"
          }
        ]
      }
    ]
  }
}

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}


