NAV
shell

SlidePack API Docs

Welcome to SlidePack API! SlidePack can generate PowerPoint files from pptx templates and JSON data.

Learn more about SlidePack here

Getting Started

SlidePack is an API service, but you can give it a spin from the Web Console.

For API use, please see reference below.

API Reference

Authentication

Example:

curl "https://slidepack.io/sessions" \
  -H "Authorization: Bearer {api_token}"

All endpoints require authentication. Include your API token in the request header to authenticate. You can create your API token on the Web Console.

Authorization: Bearer {api_token}

Create a Session

curl -X "POST" "https://slidepack.io/sessions" \
     -H 'Authorization: Bearer {api_token}'

Returns JSON that looks like:

{
  "session": {
    "uuid": "f0155f9f-d3f3-4fa9-9f8d-70f8fd2f9c36",
    "is_rendered": null,
    "message": null,
    "created_at": "2020-08-13T13:14:32.000000Z",
    "updated_at": "2020-08-13T13:14:32.000000Z"
  },
  "upload": {
    "action": "https://slidepack-api.s3.ap-northeast-1.amazonaws.com",
    "method": "POST",
    "enctype": "multipart/form-data",
    "params": {
      "acl": "private",
      "key": "sessions/zip/f0155f9f-d3f3-4fa9-9f8d-70f8fd2f9c36.zip",
      "Content-Type": "application/zip",
      "X-Amz-Security-Token": "***",
      "X-Amz-Credential": "***",
      "X-Amz-Algorithm": "AWS4-HMAC-SHA256",
      "X-Amz-Date": "20200813T131432Z",
      "Policy": "***",
      "X-Amz-Signature": "***"
    }
  }
}

Use this endpoint to create a Session and receive AWS S3 Pre-Signed POST parameters that you will need later to upload your zip file.

HTTP Request

POST https://slidepack.io/sessions

Query Parameters

None

Response

201 Created

Key Description
session Session information. Identical to what is returned from GET /sessions/{uuid}.
upload Parameters to be used later to upload the input zip file directly to S3.

Upload zip file

curl -X "POST" "https://slidepack-api.s3.ap-northeast-1.amazonaws.com/" \
     -F "acl=private" \
     -F "key=sessions/zip/{uuid}.zip" \
     -F "Content-Type=application/zip" \
     -F "X-Amz-Security-Token=***" \
     -F "X-Amz-Credential=***" \
     -F "X-Amz-Algorithm=AWS4-HMAC-SHA256" \
     -F "X-Amz-Date=***" \
     -F "Policy=***" \
     -F "X-Amz-Signature=***" \
     -F "file=@/path/to/your/data.zip"

Issue this request to upload a zip file directly to Amazon S3 to be used for rendering.

HTTP Request

POST {endpoint}

Replace {endpoint} with the upload.action value from POST /sessions or GET /sessions/{uuid}.

Form-Data Parameters

Key Required Notes
acl yes Use value from POST /sessions or GET /sessions/{uuid}.
key yes Same as above
Content-Type yes Same as above
X-Amz-Security-Token yes Same as above
X-Amz-Credential yes Same as above
X-Amz-Algorithm yes Same as above
X-Amz-Date yes Same as above
Policy yes Same as above
X-Amz-Signature yes Same as above
file yes Append your zip file to the end of these parameters.

Response

204 No Content

Render

Use this endpoint to render your uploaded zip file into pptx and get the download URL.

curl -X "POST" "https://slidepack.io/sessions/{uuid}/render" \
     -H 'Authorization: Bearer {api_token}'

Returns JSON that looks like:

{
  "session": {
    "uuid": "f0155f9f-d3f3-4fa9-9f8d-70f8fd2f9c36",
    "is_rendered": true,
    "message": "Render succeeded.",
    "created_at": "2020-08-13T13:14:32.000000Z",
    "updated_at": "2020-08-13T13:17:43.000000Z"
  },
  "download_url": "https://slidepack-api.s3.ap-northeast-1.amazonaws.com/..."
}

HTTP Request

POST https://slidepack.io/sessions/{uuid}/render

Query Parameters

None

Response

200 OK

Key Description
session Session information. Identical to what is returned from GET /sessions/{uuid}.
download_url Download URL for your rendered pptx file.

List Sessions

curl "https://slidepack.io/sessions" \
     -H 'Authorization: Bearer {api_token}'

Returns JSON that looks like:

{
  "sessions": [
    {
      "uuid": "f0155f9f-d3f3-4fa9-9f8d-70f8fd2f9c36",
      "created_at": "2020-08-13T13:14:32.000000Z",
      "is_rendered": true
    }
  ]
}

Use this endpoint to retrieve a list of Sessions created within 24 hours.

HTTP Request

GET https://slidepack.io/sessions

Query Parameters

None

Response

200 OK

Get Session details

curl "https://slidepack.io/sessions/{uuid}" \
     -H 'Authorization: Bearer {api_token}'

Returns JSON that looks like:

{
  "session": {
    "uuid": "f0155f9f-d3f3-4fa9-9f8d-70f8fd2f9c36",
    "is_rendered": null,
    "message": null,
    "created_at": "2020-08-13T13:14:32.000000Z",
    "updated_at": "2020-08-13T13:17:43.000000Z"
  }
}

Get detailed information about a Session.

HTTP Request

GET https://slidepack.io/sessions/{uuid}

Query Parameters

None

Response

200 OK

JSON / Template Syntax

data.json

{
  "slides": [
    {
      "template": 1,
      "some_text": "text to replace"
    },
    {
      "template": 2,
      "some_table": {
        "type": "table",
        "rows": [
          ["this", "is", "header"],
          ["this", "is", "first row"]
        ]
      }
    }
  ]
}

Input to SlidePack consists of JSON data and a pptx template.

JSON data is used to populate the template, and should be shaped as shown on the right. The file must be named data.json.

The template is much like a Pug, ERB or Blade template, except in pptx format. Its slides can contain placeholders for variables to be populated with values from JSON data. This file must be named template.pptx.

template slide

Combine these two files into a zip file. Now it's ready to be uploaded to SlidePack API.

data.json (legacy)

[
  {
    "template": 1,
    "some_text": "text to replace"
  },
  {
    "template": 2,
    "some_table": {
      "type": "table",
      "rows": [
        ["this", "is", "header"],
        ["this", "is", "first row"]
      ]
    }
  }
]

Replacing text

Replace text placeholders with string values.

data.json

{
  "slides": [
    {
      "template": 1,
      "text1": "Text boxes can be placed anywhere in a slide.",
      "text2": "Fonts and styles from the template are preserved.",
      "text3": "Text box properties like auto-sizing are also preserved.",
      "text4": "You can",
      "text5": "replace",
      "text6": "text in",
      "text7": "tables."
    }
  ]
}

template.pptx

01-text template slide1

output.pptx

01-text output slide1

Download zip file for this example

Replacing text, with options

Use an object instead of a string to specify options.

data.json

{
  "slides": [
    {
      "template": 1,
      "text1": {
        "type": "text",
        "value": "Override styles by providing options.",
        "styles": {
          "font": {
            "size": 28,
            "color": "#000000",
            "underline": true,
            "italic": true
          }
        }
      },
      "text2": {
        "type": "text",
        "value": "You can create hyperlinks as well.",
        "hyperlink": "https://slidepack.io"
      }
    }
  ]
}

template.pptx

02-text-options template slide1

output.pptx

02-text-options output slide1

Download zip file for this example

Text object parameters

Key Required Value Notes
type Required "text"
value Required String
styles.font.typeface String
styles.font.size Number
styles.font.color String Hex color code or color name
styles.font.underline Boolean
styles.font.italic Boolean
styles.font.bold Boolean
styles.font.strike Boolean
styles.shape.fill String Hex color code or color name
styles.shape.outline String Hex color code or color name
styles.shape.align String Horizontally align text within shape.
One of:
left
center
right
justified
distributed
styles.shape.vertical_align String Vertically align text within shape.
One of:
top
center
bottom
hyperlink String

Populating tables

Populate tables with arrays of strings.

Use tables' alt text to identify tables.

data.json

{
  "slides": [
    {
      "template": 1,
      "table1": {
        "type": "table",
        "rows": [
          ["Fill", "a table", "with data", "from", "an array."],
          ["a", "b", "c", "d", "e"],
          ["f", "g", "h", "i", "j"],
          ["k", "l", "m", "n", "o"],
          ["p", "q", "r", "s", "t"],
          ["u", "v", "w", "x", "y"]
        ]
      },
      "table2": {
        "type": "table",
        "rows": [
          ["If you have joined cells", "", "", "", ""],
          ["join state is", "", "preserved", "", ""],
          ["", "", "", "", ""],
          ["", "", "", "", ""],
          ["", "", "", "", ""],
          ["p", "q", "r", "s", "t"],
          ["u", "v", "w", "x", "y"]
        ]
      }
    }
  ]
}

template.pptx

03-table template slide1

output.pptx

03-table output slide1

Download zip file for this example

Populating tables, with options

Provide objects instead of strings to specify options per cell.

data.json

{
  "slides": [
    {
      "template": 1,
      "table1": {
        "type": "table",
        "horizontal_sizing": "anchor_left",
        "vertical_sizing": "fixed",
        "rows": [
          [
            {
              "value": "You can",
              "styles": {
                "font": { "color": "#ffffff" },
                "shape": { "fill": "#142047" }
              }
            },
            {
              "value": "specify",
              "styles": {
                "font": { "color": "#ffffff" },
                "shape": { "fill": "#1e316b" }
              }
            },
            {
              "value": "styles",
              "styles": {
                "font": { "color": "#ffffff" },
                "shape": { "fill": "#6680d4" }
              }
            }
          ],
          [
            {
              "value": "for",
              "styles": {
                "font": { "italic": true },
                "shape": { "fill": "#9caee4" }
              }
            },
            {
              "value": "each",
              "styles": {
                "font": { "underline": true },
                "shape": { "fill": "#cdd6f1" }
              }
            },
            {
              "value": "cell",
              "styles": {
                "font": { "bold": true },
                "shape": { "fill": "#d5e0f1" }
              }
            }
          ]
        ]
      }
    }
  ]
}

template.pptx

04-table-options template slide1

output.pptx

04-table-options output slide1

Download zip file for this example

Table object parameters

Key Required Value Notes
type Required "table"
rows Required [[String|Object]]
rows[n][m].value Required String
rows[n][m].styles Object Same as text styles
rows[n][m].databar Object See below
horizontal_sizing String One of:

fixed (Default)
Keep the original table width. Cell widths are adjusted to fit.

anchor_left
Keep the left side of the table in place. Table resizes to the right if necessary.

anchor_right
Keep the right side of the table in place. Table resizes to the left if necessary.
vertical_sizing String One of:

fixed
Keep the original table height. Cell heights are adjusted to fit.

anchor_top (Default)
Keep the top side of the table in place. Table resizes downwards if necessary.

anchor_bottom
Keep the bottom side of the table in place. Table resizes upwards if necessary.

Drawing data bars in table cells

Draw data bars (bar-chart like bars) in table cells by specifying the databar option.

data.json

{
  "slides": [
    {
      "template": 1,
      "table1": {
        "type": "table",
        "rows": [
          [
            "Guavas",
            { "value": "377mg", "databar": { "ratio": 1.0, "color": "ec696d" } }
          ],
          [
            "Bell Peppers",
            { "value": "190mg", "databar": { "ratio": 0.50, "color": "ffb469" } }
          ],
          [
            "Kiwifruit",
            { "value": "167mg", "databar": { "ratio": 0.44, "color": "ffb469" } }
          ],
          [
            "Strawberries",
            { "value": "98mg", "databar": { "ratio": 0.26, "color": "ffb469" } }
          ],
          [
            "Oranges",
            { "value": "96mg", "databar": { "ratio": 0.25, "color": "ffb469" } }
          ]
        ]
      }
    }
  ]
}

template.pptx

05-table-databars template slide1

output.pptx

05-table-databars output slide1

Download zip file for this example

Table databar options

Key Required Value Notes
rows[n][m].databar Object
rows[n][m].databar.ratio Number Length of the data bar. From 0.0 up to 1.0
rows[n][m].databar.color String Color of the data bar. Hex color code or color name

Populating charts

Populate charts with objects containing data.

Currently supported chart types are Bar, Line, Area, Pie and Scatter charts.

(Data format for scatter charts are different from other types of charts. Please refer to the later section on scatter charts.)

data.json

{
  "slides": [
    {
      "template": 1,
      "chart1": {
        "type": "chart",
        "labels": ["Q1", "Q2", "Q3", "Q4"],
        "axis1": {
          "bounds": {
            "minimum": 50,
            "maximum": 150
          },
          "series": {
            "ser1": {
              "name": "Revenue",
              "values": [100, 110, 120, 130]
            },
            "ser2": {
              "name": "Expenses",
              "values": [50, 55, 60, 65]
            }
          }
        },
        "axis2": {
          "series": {
            "ser3": {
              "name": "Gross profit margin",
              "values": [0.5, 0.6, 0.7, 0.8]
            }
          }
        }
      }
    }
  ]
}

template.pptx

06-chart template slide1

output.pptx

06-chart output slide1

Download zip file for this example

Chart object parameters

Key Required Value Notes
type Required "chart"
labels Required [String]
labels_interval Number
axis1 Required Object
axis1.series Required Object
axis1.series.key.name Required String
axis1.series.key.values Required [Number]
axis1.series.key.data_point_styles [Object]
axis1.bounds.minimum Number
axis1.bounds.maximum Number
axis1.format String
axis1.major_unit Number
axis2 Object Same schema as axis1

labels example

"labels": ["Q1", "Q2", "Q3", "Q4"]

labels

Specifies an array of horizontal (category) axis labels.

labels_interval example

"labels_interval": 1

labels_interval

Specifies the display interval of horizontal (category) axis labels.

series example

"axis1": {
  "series": {
    "ser1": {
      "name": "Revenue",
      "values": [100, 110, 120, 130]
    },
    "ser2": {
      "name": "Expenses",
      "values": [50, 55, 60, 65],
      "data_point_styles": [null, null, { "shape": { "fill": "FF0000" } }]
    }
  }
}

axis[1|2].series

Holds objects representing series for axis 1 or axis 2. The key should be the name of the series in the template slide.

axis[1|2].series.[var].name

Specifies the new name of the series. This name may appear, for example, in the chart legend.

axis[1|2].series.[var].values

Holds series values.

axis[1|2].series.[var].data_point_styles

Specifies styles for individual data points using an array of style objects in the same order as values.

Use null elements to keep default styles. In this example, the 3rd data point of ser2 will be filled red.

For bar charts, shape.fill and shape.outline apply to individual bars. For pie charts, shape.fill and shape.outline apply to individual slices. For line charts, shape.fill and shape.outline apply to individual markers (they have no effect on line charts with markers turned off).

bounds example

"axis1": {
  "bounds": {
    "minimum": 0,
    "maximum": 100
  }
}

axis[1|2].bounds.minimum

Specifies the minimum value for the vertical (value) axis.

axis[1|2].bounds.maximum

Specifies the maximum value for the vertical (value) axis.

format example

"axis1": {
  "format": "0.0%"
}

axis[1|2].format

Specifies the format code for the vertical (value) axis. Examples are 0.0% and #,##0.0.

major_unit example

"axis1": {
  "major_unit": 1000
}

axis[1|2].major_unit

Specifies the display interval of data labels on the vertical (value) axis.

Populating scatter charts

Populate scatter charts with objects containing data.

data.json

{
  "slides": [
    {
      "template": 1,
      "scatter1": {
        "type": "scatter-chart",
        "axis1": {
          "x_bounds": { "minimum": 0, "maximum": 10 },
          "y_bounds": { "minimum": 0, "maximum": 10 },
          "series": {
            "ser1": {
              "name": "Natural",
              "values": [
                [7.1, 5.1],
                [3.4, 6.9],
                [2.6, 2.6],
                [4.0, 8.1],
                [2.8, 4.5]
              ]
            },
            "ser2": {
              "name": "Synthetic",
              "values": [
                [4.6, 5.3],
                [5.2, 3.6],
                [6.0, 2.8],
                [6.3, 6.5],
                [8.2, 4.4]
              ]
            }
          }
        }
      }
    }
  ]
}

template.pptx

07-scatter-chart template slide1

output.pptx

07-scatter-chart output slide1

Download zip file for this example

Scatter chart object parameters

Key Required Value Notes
type Required "scatter_chart"
axis1 Required Object
axis1.series Required Object
axis1.series.key.name Required String
axis1.series.key.values Required [[Number, Number]]
axis1.series.key.data_point_styles [Object]
axis1.x_bounds.minimum Number
axis1.x_bounds.maximum Number
axis1.x_format String
axis1.x_major_unit Number
axis1.y_bounds.minimum Number
axis1.y_bounds.maximum Number
axis1.y_format String
axis1.y_major_unit Number
axis2 Object Same schema as axis1

series example

"axis1": {
  "series": {
    "ser1": { 
      "name": "Natural",
      "values": [[7.1, 5.1], [3.4, 6.9], [2.6, 2.6], [4.0, 8.1], [2.8, 4.5]],
      "data_point_styles": [null, null, { "shape": { "outline": "ff0000" } }]
    }
  }
}

axis[1|2].series

Holds objects representing series for axis 1 or axis 2. The key should be the name of the series in the template slide.

axis[1|2].series.[var].name

Specifies the new name of the series. This name may appear, for example, in the chart legend.

axis[1|2].series.[var].values

Holds series values. Each element of the array represents a data point, and is an array of [x value, y value].

axis[1|2].series.[var].data_point_styles

Specifies styles for individual data points using an array of style objects in the same order as values.

Use null elements to keep default styles. In this example, the 3rd data point of ser1 will be outlined red.

shape.fill and shape.outline apply to individual markers (they have no effect on scatter charts with markers turned off).

x_bounds/y_bounds example

"axis1": {
  "x_bounds": { "minimum": 0, "maximum": 10 },
  "y_bounds": { "minimum": -1, "maximum": 1 },
}

axis[1|2].[x|y]_bounds.minimum

specifies the minimum value for that axis.

axis[1|2].[x|y]_bounds.maximum

specifies the maximum value for that axis.

x_format/y_format example

"axis1": {
  "x_format": "0.0%",
  "y_format": "#,##0.0"
}

axis[1|2].[x|y]_format

Specifies the format code for that axis. Examples are 0.0% and #,##0.0.

x_major_unit/y_major_unit example

"axis1": {
  "x_major_unit": 1,
  "y_major_unit": 0.1
}

axis[1|2].[x|y]_major_unit

Specifies the display interval of data labels for that axis.

Populating lists

Populate lists with arrays of list items.

data.json

{
  "slides": [
    {
      "template": 1,
      "my-list": {
        "type": "list",
        "values": [
          "Items are strings",
          { "value": "or text objects." },
          { "value": "Indent levels are", "level": 1 },
          { "value": "integers, 0 upto 8.", "level": 1 },
          { "value": "Bullets and other formatting for each level", "level": 2 },
          { "value": "is inherited from the template.", "level": 2 },
          { "value": "Font styles can be specified.", "styles": { "font": { "bold": true, "color": "2a4598" } } }
        ]
      }
    }
  ]
}

template.pptx

08-list template slide1

output.pptx

08-list output slide1

Download zip file for this example

List object parameters

Key Required Value Notes
type Required "list"
values Required [String|Object]
values[n].value Required String
values[n].level Int Indent level. Unspecified or 0 is the minimum, 8 is the maximum.
values[n].styles Object Same as text styles, but only font takes effect.

Placing images

Replace shapes with images by providing objects containing image information.

data.json

{
  "slides": [
    {
      "template": 1,
      "image": {
        "type": "image",
        "src": "images/home-office.jpg",
        "scaling": "contain",
        "overflow": "hidden"
      }
    }
  ]
}

template.pptx

09-image template slide1

output.pptx

09-image output slide1

Download zip file for this example

Image object parameters

Key Required Value Notes
type Required "image"
src Required String Relative path to image file, as seen from data.json. Image file can be placed anywhere within the zip file.
scaling String One of:

none (Default)
Use image intrinsic size.

contain
Scale so that the entire image fits within the target shape.

cover
Scale so that the image fills the target shape. Image may overflow.
overflow String One of:

visible (Default)
Image is not clipped, and may overflow the target shape.

hidden
Image is clipped to fit the target shape.

Specifying colors

Specify colors for fonts, fills, etc. using Hex codes or color names.

Hex color codes look like #f6ad5c or FF0000. You can leave out the leading #. Hex color codes are case-insensitive.

Color names can be lt1, dk1, lt2, dk2, accent1, accent2, accent3, accent4, accent5, accent6, hlink, or folHlink. They correspond to the 12 named colors defined in the theme. Specific colors that these names refer to can be changed as described later.

scheme-colors

The following color names are available as well. They are similar to HTML color names, but please note that there are subtle differences such as "dark" vs "dk". These color names are case sensitive.

black dkSlateGray dimGray slateGray gray ltSlateGray dkGray
silver ltGray gainsboro mistyRose antiqueWhite linen beige
whiteSmoke lavenderBlush oldLace aliceBlue ltCyan seaShell ghostWhite
honeydew floralWhite azure mintCream snow ivory white
medVioletRed deepPink paleVioletRed hotPink ltPink pink dkRed
red firebrick crimson indianRed ltCoral salmon dkSalmon
ltSalmon orangeRed tomato dkOrange coral orange dkKhaki
gold khaki peachPuff yellow paleGoldenrod moccasin papayaWhip
ltGoldenrodYellow lemonChiffon ltYellow maroon brown saddleBrown sienna
chocolate dkGoldenrod peru rosyBrown goldenrod sandyBrown tan
burlyWood wheat navajoWhite bisque blanchedAlmond cornsilk dkGreen
green dkOliveGreen forestGreen seaGreen olive oliveDrab medSeaGreen
limeGreen lime springGreen medSpringGreen dkSeaGreen medAquamarine yellowGreen
lawnGreen chartreuse ltGreen greenYellow paleGreen teal dkCyan
ltSeaGreen cadetBlue dkTurquoise medTurquoise turquoise aqua cyan
aquamarine paleTurquoise navy dkBlue medBlue blue midnightBlue
dkSlateBlue slateBlue medSlateBlue royalBlue steelBlue dodgerBlue deepSkyBlue
cornflowerBlue skyBlue ltSkyBlue ltSteelBlue ltBlue powderBlue indigo
purple dkMagenta dkViolet blueViolet medPurple dkOrchid fuchsia
magenta medOrchid orchid violet plum thistle lavender

Changing theme colors

Change the colors defined in the theme. This change affects all slides.

A theme has 12 named colors, each of which you specify with an RGB hex code.

scheme-colors

Unspecified colors and ones set to empty strings "" or null retain their original colors. Theme color names such as "dk1" cannot be used as color values.

data.json

{
  "theme": {
    "colors": {
      "dk1": "6c685f",
      "lt1": "F5F2E3",
      "dk2": "#5c6875",
      "lt2": "#CAD9EA",
      "accent1": "6b95a4",
      "accent2": "c9747f",
      "accent3": "7e9a62",
      "accent4": "tan",
      "accent5": "",
      "accent6": null,
      "hlink": "858499"
    }
  },
  "slides": [
    {
      "template": 1,
      "text1": "Changing a theme color affects all text and shapes where that color is used."
    }
  ]
}

template.pptx

11-theme template slide1

output.pptx

11-theme output slide1

Download zip file for this example

Theme object parameters

Key Required Value Notes
theme.colors Object
theme.colors.dk1 String Hex color code or color name for "Text/Background - Dark 1".
This is usually the text color.
theme.colors.lt1 String Hex color code or color name for "Text/Background - Light 1".
This is usually the slide background.
theme.colors.dk2 String Hex color code or color name for "Text/Background - Dark 2".
theme.colors.lt2 String Hex color code or color name for "Text/Background - Light 2".
theme.colors.accent1 String Hex color code or color name for "Accent 1".
theme.colors.accent2 String Hex color code or color name for "Accent 2".
theme.colors.accent3 String Hex color code or color name for "Accent 3".
theme.colors.accent4 String Hex color code or color name for "Accent 4".
theme.colors.accent5 String Hex color code or color name for "Accent 5".
theme.colors.accent6 String Hex color code or color name for "Accent 6".
theme.colors.hlink String Hex color code or color name for "Hyperlink".
theme.colors.folHlink String Hex color code or color name for "Followed Hyperlink".

Examples

Reusing template slides

data.json

{
  "slides": [
    {
      "template": 1,
      "section-title": "User behavior"
    },

    {
      "template": 2,
      "chart-title": "User signups: Main Product",
      "insights": "Signups are still going strong.",
      "main-chart": {
        "type": "chart",
        "labels": [
          "2020/1", "2020/2", "2020/3", "2020/4", "2020/5", "2020/6",
          "2020/7", "2020/8", "2020/9", "2020/10", "2020/11", "2020/12"
        ],
        "axis1": {
          "bounds": { "minimum": 0, "maximum": 200 },
          "series": {
            "Series-A": {
              "name": "Pattern A",
              "values": [50, 60, 71, 75, 91, 123, 135, 138, 140, 176, 187, 184]
            },
            "Series-B": {
              "name": "Pattern B",
              "values": [62, 55, 60, 91, 89, 106, 103, 125, 126, 138, 145, 139]
            }
          }
        }
      }
    },

    {
      "template": 2,
      "chart-title": "User signups: Other Product",
      "insights": "Growth is slow, especially with pattern B.",
      "main-chart": {
        "type": "chart",
        "labels": [
          "2020/1", "2020/2", "2020/3", "2020/4", "2020/5", "2020/6",
          "2020/7", "2020/8", "2020/9", "2020/10", "2020/11", "2020/12"
        ],
        "axis1": {
          "bounds": { "minimum": 0, "maximum": 200 },
          "series": {
            "Series-A": {
              "name": "Pattern A",
              "values": [20, 20, 32, 53, 58, 71, 65, 65, 98, 99, 99, 120]
            },
            "Series-B": {
              "name": "Pattern B",
              "values": [20, 20, 20, 23, 33, 27, 38, 51, 44, 36, 60, 44]
            }
          }
        }
      }
    },

    {
      "template": 1,
      "section-title": "Customer service status report"
    },

    {
      "template": 2,
      "chart-title": "Customer satisfaction",
      "insights": "",
      "main-chart": {
        "type": "chart",
        "labels": [
          "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009",
          "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019",
          "2020"
        ],
        "axis1": {
          "bounds": { "minimum": 0, "maximum": 1 },
          "format": "0%",
          "series": {
            "Series-A": {
              "name": "Customer satisfaction",
              "values": [
                0.4, 0.41, 0.45, 0.46, 0.45, 0.45, 0.52, 0.5, 0.54, 0.54,
                0.61, 0.59, 0.57, 0.66, 0.61, 0.66, 0.67, 0.68, 0.68, 0.75,
                0.72
              ]
            }
          }
        }
      }
    }
  ]
}

Download zip file for this example

template.pptx

10-reuse-slides template slide1 10-reuse-slides template slide1

output.pptx

10-reuse-slides output slide1 10-reuse-slides output slide1 10-reuse-slides output slide1 10-reuse-slides output slide1 10-reuse-slides output slide1

Text styles

data.json

{
  "slides": [
    {
      "template": 1,
      "text-with-styles": {
        "value": "Do it with style!",
        "styles": {
          "font": {
            "typeface": "Georgia",
            "color": "e4b054",
            "bold": true
          }
        }
      },

      "sign": {
        "value": "+",
        "styles": {
          "font": {
            "color": "00b14e",
            "size": 14
          }
        }
      },
      "number": {
        "value": "230",
        "styles": {
          "font": {
            "color": "00b14e",
            "size": 26,
            "bold": true
          }
        }
      },
      "unit": {
        "value": "%",
        "styles": {
          "font": {
            "color": "00b14e",
            "size": 14
          }
        }
      },

      "person": {
        "value": "Chick Corea",
        "styles": {
          "shape": {
            "fill": "f4e4c3",
            "outline": "b69858"
          }
        }
      },

      "remove-outline": {
        "value": "Outline removed",
        "styles": {
          "shape": {
            "outline": ""
          }
        }
      },
      "remove-fill": {
        "value": "Fill removed",
        "styles": {
          "shape": {
            "fill": ""
          }
        }
      }
    }
  ]
}

Download zip file for this example

template.pptx

11-text-styles template slide1

output.pptx

11-text-styles output slide1

Adding and removing table rows and columns

data.json

{
  "slides": [
    {
      "template": 1,
      "small-table": {
        "type": "table",
        "rows": [
          ["A-1", "A-2", "A-3", "A-4", "A-5"],
          ["B-1", "B-2", "B-3", "B-4", "B-5"],
          ["C-1", "C-2", "C-3", "C-4", "C-5"],
          ["D-1", "D-2", "D-3", "D-4", "D-5"],
          ["E-1", "E-2", "E-3", "E-4", "E-5"]
        ]
      }
    },
    {
      "template": 2,
      "large-table": {
        "type": "table",
        "rows": [
          ["A-1", "A-2", "A-3"],
          ["B-1", "B-2", "B-3"],
          ["C-1", "C-2", "C-3"]
        ]
      }
    }
  ]
}

Download zip file for this example

template.pptx

12-table-size template slide1 12-table-size template slide1

output.pptx

12-table-size output slide1 12-table-size output slide1

Image scaling

data.json

{
  "slides": [
    {
      "template": 1,
      "slide-title": "\"scaling\": \"contain\"",
      "hedgehog": {
        "type": "image",
        "src": "hedgehog.jpg",
        "scaling": "contain"
      }
    },
    {
      "template": 1,
      "slide-title": "\"scaling\": \"cover\"",
      "hedgehog": {
        "type": "image",
        "src": "hedgehog.jpg",
        "scaling": "cover"
      }
    },
    {
      "slide-title": "\"scaling\": null",
      "template": 1,
      "hedgehog": {
        "type": "image",
        "src": "hedgehog.jpg"
      }
    }
  ]
}

Download zip file for this example

template.pptx

13-image-scaling template slide1

output.pptx

13-image-scaling output slide1 13-image-scaling output slide1 13-image-scaling output slide1

Different types of charts

data.json

{
  "slides": [
    {
      "template": 1,
      "my-line-chart": {
        "type": "chart",
        "labels": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
        "axis1": {
          "bounds": { "minimum": 0, "maximum": 250 },
          "series": {
            "series-a": {
              "name": "Revenue",
              "values": [ 100, 110, 130, 150, 170, 200, 180, 130, 140, 130, 130, 190 ]
            },
            "series-b": {
              "name": "Expenses",
              "values": [50, 55, 60, 65, 70, 65, 55, 80, 80, 70, 60, 50]
            }
          }
        }
      }
    },

    {
      "template": 2,
      "my-bar-chart": {
        "type": "chart",
        "labels": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
        "axis1": {
          "bounds": { "minimum": 0, "maximum": 250 },
          "series": {
            "series-a": {
              "name": "Revenue",
              "values": [100, 110, 130, 150, 170, 200, 180, 130, 140, 130, 130, 190]
            },
            "series-b": {
              "name": "Expenses",
              "values": [50, 55, 60, 65, 70, 65, 55, 80, 80, 70, 60, 50]
            }
          }
        }
      }
    },

    {
      "template": 3,
      "my-stacked-bar-chart": {
        "type": "chart",
        "labels": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
        "axis1": {
          "bounds": { "minimum": 0, "maximum": 300 },
          "series": {
            "series-a": {
              "name": "Ads",
              "values": [100, 110, 130, 150, 170, 200, 180, 130, 140, 130, 130, 190]
            },
            "series-b": {
              "name": "Organic",
              "values": [50, 55, 60, 65, 70, 65, 55, 80, 80, 70, 60, 50]
            }
          }
        }
      }
    },

    {
      "template": 4,
      "my-stacked-area-chart": {
        "type": "chart",
        "labels": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
        "axis1": {
          "bounds": { "minimum": 0, "maximum": 300 },
          "series": {
            "series-a": {
              "name": "Ads",
              "values": [100, 110, 130, 150, 170, 200, 180, 130, 140, 130, 130, 190]
            },
            "series-b": {
              "name": "Organic",
              "values": [50, 55, 60, 65, 70, 65, 55, 80, 80, 70, 60, 50]
            }
          }
        }
      }
    },

    {
      "template": 5,
      "my-bar-line-combo-chart": {
        "type": "chart",
        "labels": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
        "axis1": {
          "bounds": { "minimum": 0, "maximum": 250 },
          "series": {
            "series-a": {
              "name": "Ads",
              "values": [100, 110, 130, 150, 170, 200, 180, 130, 140, 130, 130, 190]
            },
            "series-b": {
              "name": "Organic",
              "values": [50, 55, 60, 65, 70, 65, 55, 80, 80, 70, 60, 50]
            }
          }
        },
        "axis2": {
          "bounds": { "minimum": 0, "maximum": 0.15 },
          "format": "0.0%",
          "series": {
            "series-x": {
              "name": "Conversion rate",
              "values": [
                0.027, 0.027, 0.03137, 0.03032, 0.03429, 0.03557, 0.0366,
                0.03596, 0.03577, 0.03753, 0.04116, 0.03944
              ]
            }
          }
        }
      }
    },

    {
      "template": 6,
      "my-pie-chart": {
        "type": "chart",
        "labels": ["Chrome", "Safari", "Firefox", "Samsung Internet", "Edge Legacy", "UC Browser"],
        "axis1": {
          "series": {
            "series-a": {
              "name": "Browser share",
              "values": [63.91, 18.2, 4.39, 3.28, 2.13, 2]
            }
          }
        }
      }
    },

    {
      "template": 7,
      "series-a-label": "Product A",
      "series-b-label": "Product B",
      "my-donut-chart": {
        "type": "chart",
        "labels": ["Africa", "Asia", "Europe", "South America", "North America", "Oceania"],
        "axis1": {
          "series": {
            "series-a": {
              "name": "Product A",
              "values": [4.4, 1.2, 0.7, 0.5, 0.3, 0.2]
            },
            "series-b": {
              "name": "Product B",
              "values": [3.5, 1.1, 0.4, 0.5, 0.3, 0.2]
            }
          }
        }
      }
    },

    {
      "template": 8,
      "x-axis-title": "Length",
      "y-axis-title": "Mass",
      "my-scatter-chart": {
        "type": "scatter-chart",
        "axis1": {
          "x_bounds": { "minimum": 130, "maximum": 200 },
          "y_bounds": { "minimum": 30, "maximum": 130 },
          "series": {
            "series-a-y": {
              "name": "Current Generation",
              "values": [
                [150, 60.7],
                [156.2, 67.3],
                [153.7, 68.8],
                [155.7, 83.1],
                [160.5, 88.8],
                [163, 90],
                [171.8, 100.2],
                [166.9, 96.5],
                [175.6, 115.1],
                [176.5, 114]
              ]
            },
            "series-b-y": {
              "name": "Previous Generation",
              "values": [
                [153.3, 45],
                [155.6, 58.2],
                [151.7, 48.7],
                [159.2, 65.2],
                [163.2, 71.1],
                [160.6, 65.3],
                [167.6, 70.8],
                [173.2, 84.4],
                [177.3, 87.2],
                [172.9, 99.1]
              ]
            }
          }
        }
      }
    }
  ]
}

Download zip file for this example

template.pptx

20-charts template slide1 20-charts template slide1 20-charts template slide1 20-charts template slide1 20-charts template slide1 20-charts template slide1 20-charts template slide1 20-charts template slide1

output.pptx

20-charts output slide1 20-charts output slide1 20-charts output slide1 20-charts output slide1 20-charts output slide1 20-charts output slide1 20-charts output slide1 20-charts output slide1

Dynamic chart series

data.json

{
  "slides": [
    {
      "template": 1,
      "the-chart": {
        "type": "chart",
        "labels": ["Jan", "Feb", "Mar", "Apr", "May", "June"],
        "axis1": {
          "series": {
            "series-a": {
              "values": [4.4, 4.2, 4.1, 3.6, 3.3, 3.5]
            },
            "series-b": {
              "values": [3.4, 3.3, 3.3, 3, 2.9, 2.4]
            },
            "series-c": {
              "values": [3.6, 3.5, 3.3, 2.9, 2.6, 2.4]
            },
            "series-d": {
              "values": [3.2, 3.4, 3.3, 3, 3.1, 2.6]
            },
            "series-e": {
              "values": [3.2, 3.3, 3.4, 3.7, 4.2, 4.4]
            },
            "series-f": {
              "values": [3.1, 3.2, 3.3, 3.2, 3.1, 3.4]
            },
            "foo": {
              "values": [2.7, 2.3, 2.4, 2.1, 1.5, 1.2]
            },
            "bar": {
              "values": [2.1, 2.1, 2.4, 2.6, 2.4, 2.7]
            },
            "baz": {
              "values": [1, 1.2, 1.3, 1.5, 1.7, 1.8]
            }
          }
        }
      }
    },

    {
      "template": 2,
      "the-chart": {
        "type": "chart",
        "labels": ["Jan", "Feb", "Mar", "Apr", "May", "June"],
        "axis1": {
          "series": {
            "bar-series-a": {
              "values": [4.4, 4.2, 4.1, 3.6, 3.3, 3.5]
            }
          }
        }
      }
    }
  ]
}

Download zip file for this example

template.pptx

21-chart-dynamic-series template slide1 21-chart-dynamic-series template slide1

output.pptx

21-chart-dynamic-series output slide1 21-chart-dynamic-series output slide1

Specifying styles for individual chart data points

data.json

{
  "slides": [
    {
      "template": 1,
      "my-line-chart": {
        "type": "chart",
        "labels": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
        "axis1": {
          "series": {
            "series-a": {
              "name": "Revenue",
              "values": [100, 110, 130, 150, 170, 200, 180, 130, 140, 130, 130, 190],
              "data_point_styles": [
                null, null, null, null,
                null, null, null, null,
                null, null, null, { "shape": { "fill": "#ff9900", "outline": "#ff6600" } }
              ]
            },
            "series-b": {
              "name": "Expenses",
              "values": [50, 55, 60, 65, 70, 65, 55, 80, 80, 70, 60, 50],
              "data_point_styles": [
                null, null, null, null,
                null, null, { "shape": { "fill": "#99cc00", "outline": "#66cc00" } }
              ]
            }
          }
        }
      }
    },

    {
      "template": 2,
      "my-bar-chart": {
        "type": "chart",
        "labels": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
        "axis1": {
          "series": {
            "series-a": {
              "name": "Revenue",
              "values": [100, 110, 130, 150, 170, 200, 180, 130, 140, 130, 130, 190],
              "data_point_styles": [
                null, null, null, null,
                null, null, null, null,
                null, null, null, { "shape": { "fill": "#ff9900", "outline": "#ff6600" } }
              ]
            },
            "series-b": {
              "name": "Expenses",
              "values": [50, 55, 60, 65, 70, 65, 55, 80, 80, 70, 60, 50]
            }
          }
        }
      }
    },

    {
      "template": 3,
      "my-pie-chart": {
        "type": "chart",
        "labels": ["Chrome", "Safari", "Firefox", "Samsung Internet", "Edge Legacy", "UC Browser"],
        "axis1": {
          "series": {
            "series-a": {
              "name": "Browser share",
              "values": [63.91, 18.2, 4.39, 3.28, 2.13, 2],
              "data_point_styles": [
                null, null, { "shape": { "fill": "#ff9900", "outline": "#ff6600" } }
              ]
            }
          }
        }
      }
    },

    {
      "template": 4,
      "x-axis-title": "Length",
      "y-axis-title": "Mass",
      "my-scatter-chart": {
        "type": "scatter-chart",
        "axis1": {
          "series": {
            "series-a-y": {
              "name": "Current Generation",
              "values": [
                [150, 60.7],
                [156.2, 67.3],
                [153.7, 68.8],
                [155.7, 83.1],
                [160.5, 88.8],
                [163, 90],
                [171.8, 100.2],
                [166.9, 96.5],
                [175.6, 115.1],
                [176.5, 114]
              ],
              "data_point_styles": [
                null, null, null, null, { "shape": { "fill": "#ff9900", "outline": "#ff6600" } }
              ]
            },
            "series-b-y": {
              "name": "Previous Generation",
              "values": [
                [153.3, 45],
                [155.6, 58.2],
                [151.7, 48.7],
                [159.2, 65.2],
                [163.2, 71.1],
                [160.6, 65.3],
                [167.6, 70.8],
                [173.2, 84.4],
                [177.3, 87.2],
                [172.9, 99.1]
              ],
              "data_point_styles": [
                null, null, null, null, { "shape": { "fill": "#99cc00", "outline": "#66cc00" } }
              ]
            }
          }
        }
      }
    }
  ]
}

Download zip file for this example

template.pptx

22-chart-data-point-styles template slide1 22-chart-data-point-styles template slide1 22-chart-data-point-styles template slide1 22-chart-data-point-styles template slide1

output.pptx

22-chart-data-point-styles output slide1 22-chart-data-point-styles output slide1 22-chart-data-point-styles output slide1 22-chart-data-point-styles output slide1

Chart label interval

data.json

{
  "slides": [
    {
      "template": 1,
      "the-chart": {
        "type": "chart",
        "labels": [
          "1981", "1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990",
          "1991", "1992", "1993", "1994", "1995", "1996", "1997", "1998", "1999", "2000",
          "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010",
          "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020",
          "2021"
        ],
        "labels_interval": 5,
        "axis1": {
          "major_unit": 250,
          "series": {
            "series-a": {
              "values": [
                93, 157, 949, 785, 1036, 1640, 1700, 1964, 2234, 2502,
                2344, 3185, 3360, 3283, 3991, 4000, 4000, 3891, 3159, 3130,
                3134, 2961, 2622, 2531, 2193, 1942, 1994, 1661, 1217, 1000,
                1055, 1000, 1124, 1199, 1400, 1497, 1549, 1660, 1768, 1853,
                1890
              ]
            }
          }
        }
      }
    }
  ]
}

Download zip file for this example

template.pptx

23-chart-label-interval template slide1

output.pptx

23-chart-label-interval output slide1

Analytics report example

This is an example of a full set of slides for analytics reporting, using various features available in SlidePack.

data.json

{
  "slides": [
    {
      "template": 1,
      "client": "Blues Dream, Inc.",
      "report-title": "User Activity Report",
      "date": "June 1st, 2021"
    },

    {
      "template": 2,
      "period": "May 2021",

      "m1icon": { "type": "image", "src": "icons/users.png", "scaling": "contain" },
      "m1name": "Sessions",
      "m1": "68,338",
      "m1unit": "",
      "m1growth": { "value": "-16.1%", "styles": { "font": { "color": "#EA8673" } } },

      "m2icon": { "type": "image", "src": "icons/conversion.png", "scaling": "contain" },
      "m2name": "Conversion Rate",
      "m2": "2.47",
      "m2unit": "%",
      "m2growth": { "value": "+0.48", "styles": { "font": { "color": "#3FC862" } } },

      "m3icon": { "type": "image", "src": "icons/bounce.png", "scaling": "contain" },
      "m3name": "Bounce Rate",
      "m3": "48.23",
      "m3unit": "%",
      "m3growth": { "value": "-11.5", "styles": { "font": { "color": "#3FC862" } } }
    },

    {
      "template": 3,

      "chart-title": "Users/Conversion Rates",
      "line-chart": {
        "type": "chart",
        "labels": ["2020/6", "7", "8", "9", "10", "11", "12", "2021/1", "2", "3", "4", "5"],
        "axis1": {
          "bounds": { "minimum": 0, "maximum": 70000 },
          "series": {
            "Series 1": {
              "name": "Users",
              "values": [50619, 51369, 43932, 41395, 53330, 54263, 60800, 52627, 51957, 63027, 62708, 53121]
            }
          }
        },
        "axis2": {
          "bounds": { "minimum": 0, "maximum": 0.04 },
          "format": "0.00%",
          "series": {
            "Series 2": {
              "name": "Conversion Rate",
              "values": [0.0015, 0.0016, 0.0018, 0.0014, 0.001, 0.0017, 0.0122, 0.019, 0.02, 0.0201, 0.0197, 0.0247]
            }
          }
        }
      },

      "comparisons": {
        "type": "table",
        "rows": [
          ["", "Last Month", "This Month"],
          ["Users", "62,708", "53,121"],
          ["New Users", "58,691", "49,206"],
          ["Session Duration", "2:49", "3:15"],
          ["Bounce Rate", "54.66%", "48.23%"],
          ["Conversions", "1,547", "1,689"],
          ["Conversion Rate", "1.97%", "2.47%"]
        ]
      }
    },

    {
      "template": 4,

      "donut1-title": "Devices",
      "donut1": {
        "type": "chart",
        "labels": ["Desktop", "Mobile"],
        "axis1": {
          "series": {
            "Series": {
              "values": [36146, 15980]
            }
          }
        }
      },

      "donut2-title": "Languages",
      "donut2": {
        "type": "chart",
        "labels": ["en-us", "en-gb", "es-es", "etc"],
        "axis1": {
          "series": {
            "Series": {
              "values": [29633, 4740, 2022, 10037]
            }
          }
        }
      }
    },

    {
      "template": 5,

      "message": "Clicks are stabilizing, but conversion rates from ads need a boost",

      "chart1": {
        "type": "chart",
        "labels": ["2020/6", "7", "8", "9", "10", "11", "12", "2021/1", "2", "3", "4", "5"],
        "axis1": {
          "bounds": { "maximum": 35000, "minimum": 0 },
          "series": {
            "Series 1": {
              "name": "Ad Clicks",
              "values": [964, 560, 1079, 0, 0, 6891, 29593, 31534, 9692, 9815, 9170, 9093]
            }
          }
        },
        "axis2": {
          "bounds": { "maximum": 250, "minimum": 0 },
          "series": {
            "Series 3": {
              "name": "CPC",
              "values": [0.38, 0.34, 0.18, 0.0, 0.0, 1.99, 1.48, 1.8, 1.28, 1.2, 1.33, 1.53]
            }
          }
        }
      },

      "chart2": {
        "type": "chart",
        "labels": ["2020/6", "7", "8", "9", "10", "11", "12", "2021/1", "2", "3", "4", "5"],
        "axis1": {
          "bounds": { "maximum": 100, "minimum": 0 },
          "series": {
            "Series 1": {
              "name": "Conversions from Ads",
              "values": [2, 3, 2, 0, 1, 1, 66, 65, 79, 26, 12, 4]
            }
          }
        },
        "axis2": {
          "bounds": { "maximum": 14000, "minimum": 0 },
          "series": {
            "Series 3": {
              "name": "CPA",
              "values": [183.55, 62.55, 98.35, 0, 0, 13681.99, 665.09, 875.16, 156.95, 452.15, 1019.14, 3469.54]
            }
          }
        }
      },

      "comparisons": {
        "type": "table",
        "rows": [
          ["", "Impressions", "Cost", "Clicks", "CTR", "CPC", "Conversions", "CVR"],
          ["Total", "57191", "$13878.17", "9093", "15.9%", "153", "4", "0.53%"],
          ["MoM", "-3.9%", "+13.5%", "-0.9%", "+3.1%", "+14.4%", "-66.7%", "-61.8%"],
          ["YoY", "+4385%", "+115%", "+2768%", "-36.5%", "+320%", "+300%", "+168%"]
        ]
      }
    },

    {
      "template": 6,
      "slide-title": "Ad Performance by Campaign",

      "table1": {
        "type": "table",
        "rows": [
          ["", "Impressions", "Cost", "Clicks", "CTR", "CPC", "Conversions", "CVR"],
          ["Hoodies", "19,618", "910.08", "1,622", "8.27%", "0.56", "0", "0.00%"],
          ["YouTube", "6,280", "4,567.17", "1,932", "30.76%", "2.36", "0", "0.00%"],
          ["Tumbler", "4,974", "602.98", "746", "15.00%", "0.81", "0", "0.00%"],
          ["T-shirts", "2,688", "303.88", "357", "13.28%", "0.85", "0", "0.00%"],
          ["Apparel", "2,040", "2,289.38", "759", "37.21%", "3.02", "1", "7.14%"],
          ["Tumbler", "1,838", "604.03", "309", "16.81%", "1.95", "0", "0.00%"],
          ["Drinkware", "1,592", "684.81", "312", "19.60%", "2.19", "0", "0.00%"],
          ["Bags", "737", "885.68", "182", "24.69%", "4.87", "0", "0.00%"],
          ["Android Brand", "168", "43.81", "37", "22.02%", "1.18", "0", "0.00%"],
          ["Office", "106", "55.61", "18", "16.98%", "3.09", "0", "0.00%"],
          ["Accessories", "33", "207.35", "11", "33.33%", "18.85", "0", "0.00%"]
        ]
      }
    },

    {
      "template": 6,
      "slide-title": "Ad Performance by Ad Group",

      "table1": {
        "type": "table",
        "rows": [
          ["", "Impressions", "Cost", "Clicks", "CTR", "CPC", "Conversions", "CVR"],
          ["AW - YouTube Brand", "5,242", "$3,041.63", "1,645", "31.38%", "$1.85", "0", "0.00%"],
          ["AW - Hoodies", "4,417", "$119.39", "266", "6.02%", "$0.45", "0", "0.00%"],
          ["AW - Hoody", "3,810", "$109.47", "241", "6.33%", "$0.45", "0", "0.00%"],
          ["AW - Sweatshirt", "3,514", "$72.30", "160", "4.55%", "$0.45", "0", "0.00%"],
          ["AW - Hoodies", "3,293", "$264.59", "417", "12.66%", "$0.63", "0", "0.00%"],
          ["AW - Shirts", "3,055", "$303.81", "319", "10.44%", "$0.95", "0", "0.00%"],
          ["AW - Hoody", "2,989", "$238.93", "370", "12.38%", "$0.65", "0", "0.00%"],
          ["AW - Tumbler", "2,200", "$198.46", "327", "14.86%", "$0.61", "0", "0.00%"],
          ["AW - Apparel All", "1,663", "$1,805.35", "640", "38.48%", "$2.82", "1", "8.33%"]
        ]
      }
    },

    {
      "template": 6,
      "slide-title": "Ad Performance by Device",

      "table1": {
        "type": "table",
        "rows": [
          ["", "Impressions", "Cost", "Clicks", "CTR", "CPC", "Conversions", "CVR"],
          ["mobile", "43,021", "$8,959.98", "6,659", "15.48%", "$1.35", "0", "0.00%"],
          ["desktop", "10,507", "$4,009.69", "1,976", "18.81%", "$2.03", "4", "4.30%"]
        ]
      }
    }
  ]
}

Download zip file for this example

template.pptx

91-analytics-report template slide1 91-analytics-report template slide1 91-analytics-report template slide1 91-analytics-report template slide1 91-analytics-report template slide1 91-analytics-report template slide1

output.pptx

91-analytics-report output slide1 91-analytics-report output slide1 91-analytics-report output slide1 91-analytics-report output slide1 91-analytics-report output slide1 91-analytics-report output slide1 91-analytics-report output slide1 91-analytics-report output slide1

Product catalog example

This is an example of a single template slide being reused to present a collection of products.

data.json

{
  "slides": [
    {
      "template": 1,
      "name": "Blue Pattern Shirt",
      "description": "Cotton buttoned shirt with classic but modern pattern.",
      "pic": {
        "type": "image",
        "src": "pictures/blue pattern shirt.jpg",
        "scaling": "cover",
        "overflow": "hidden"
      },
      "stats": {
        "type": "table",
        "vertical_sizing": "anchor_bottom",
        "rows": [
          ["Materials", "Cotton"],
          ["Sizes", "S, M, L"],
          ["Availability", "Retail, Online"]
        ]
      }
    },
    {
      "template": 1,
      "name": "Linen washed shirt",
      "description": "Casual gray linen shirt, washed process.",
      "pic": {
        "type": "image",
        "src": "pictures/linen washed shirt.jpg",
        "scaling": "cover",
        "overflow": "hidden"
      },
      "stats": {
        "type": "table",
        "vertical_sizing": "anchor_bottom",
        "rows": [
          ["Materials", "Linen"],
          ["Sizes", "S, M, L"],
          ["Availability", "Retail, Online"],
          ["Imported from", "Italy"]
        ]
      }
    },
    {
      "template": 1,
      "name": "Lace Blouse",
      "description": "White lace blouse with geometric pattern stitching.",
      "pic": {
        "type": "image",
        "src": "pictures/lace blouse.jpg",
        "scaling": "cover",
        "overflow": "hidden"
      },
      "stats": {
        "type": "table",
        "vertical_sizing": "anchor_bottom",
        "rows": [
          ["Materials", "Cotton"],
          ["Sizes", "M"],
          ["Availability", "Online"],
          ["Imported from", "Spain"],
          ["Sustainability", "OEKO-TEX Standard 100 certified"]
        ]
      }
    },
    {
      "template": 1,
      "name": "Rose stitched blouse",
      "description": "Long-sleeve blouse with rose stitchings. Silky feel, with puffed sleeves.",
      "pic": {
        "type": "image",
        "src": "pictures/rose stitched blouse.jpg",
        "scaling": "cover",
        "overflow": "hidden"
      },
      "stats": {
        "type": "table",
        "vertical_sizing": "anchor_bottom",
        "rows": [
          ["Materials", "Polyester, Linen"],
          ["Sizes", "S, M, L"],
          ["Availability", "Retail"]
        ]
      }
    },
    {
      "template": 1,
      "name": "Dark jeans",
      "description": "Basic dark jeans. Slim silhouette.",
      "pic": {
        "type": "image",
        "src": "pictures/dark jeans.jpg",
        "scaling": "cover",
        "overflow": "hidden"
      },
      "stats": {
        "type": "table",
        "vertical_sizing": "anchor_bottom",
        "rows": [
          ["Materials", "Cotton"],
          ["Sizes", "S, M, L"],
          ["Availability", "Retail, Online"]
        ]
      }
    }
  ]
}

Download zip file for this example

template.pptx

92-catalog template slide1

output.pptx

92-catalog output slide1 92-catalog output slide1 92-catalog output slide1 92-catalog output slide1 92-catalog output slide1

API Limits

Title Limit Notes
Rate limit 600 requests/minute
Session expires in 24 hours Only one unrendered session is kept at a time regardless of this expiry.
Zip upload max size 50MB
Upload URL expires in 60 minutes Can be reissued as many times as needed as long as the session hasn't expired.
Download URL expires in 5 minutes Same as above