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
.
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"]
]
}
}
]
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
output.pptx
Download zip file for this example
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
output.pptx
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 |
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
output.pptx
Download zip file for this example
Table 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
output.pptx
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. |
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
output.pptx
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 |
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, 130, 120, 130]
},
"ser2": {
"name": "Expenses",
"values": [85, 90, 80, 75]
}
}
},
"axis2": {
"series": {
"ser3": {
"name": "Gross profit margin",
"values": [0.15, 0.3, 0.33, 0.42],
"styles": {
"shape": { "fill": "ffdd99", "outline": "ffaa55" }
}
}
}
}
}
}
]
}
template.pptx
output.pptx
Download zip file for this example
Chart object parameters
Key | Required | Value | Notes |
---|---|---|---|
type | Required | "chart" | |
labels | Required | [String] | Array of horizontal (category) axis labels |
labels_interval | Number | Display interval of horizontal (category) axis labels | |
axis1 | Required | Object | Data for the primary axis |
axis1.series | Required | Object | |
axis1.series.key.name | Required | String | Series name |
axis1.series.key.values | Required | [Number] | Array of series data points |
axis1.series.key.styles | String | Series colors | |
axis1.series.key.data_point_styles | [Object] | Colors for individual data points | |
axis1.bounds.minimum | Number | Minimum value for vertical (value) axis | |
axis1.bounds.maximum | Number | Maximum value for vertical (value) axis | |
axis1.format | String | Format code for vertical (value) axis | |
axis1.major_unit | Number | Display interval of vertical (value) axis labels | |
axis2 | Object | Data for the secondary axis, same format as axis1 |
labels example
"labels": ["Q1", "Q2", "Q3", "Q4"]
labels
An array of strings that sets horizontal (category) axis labels.
labels_interval example
"labels_interval": 1
labels_interval
Sets the display interval of horizontal (category) axis labels.
series example
"axis1": {
"series": {
"ser1": {
"name": "Revenue",
"values": [100, 110, 120, 130]
"styles": { "shape": { "fill": "CCCCFF", "outline": "6666CC" } }
},
"ser2": {
"name": "Expenses",
"values": [50, 55, 60, 65],
"data_point_styles": [null, null, { "shape": { "fill": "FF0000" } }]
}
}
}
axis1.series
Holds objects representing series for the primary axis in the format {"series name key": { series data }}
.
If the series name key exists in the template slide, that series will be rewritten. Otherwise, a new series will be created.
axis1.series.key.name
Sets the new name of the series. This name may appear, for example, in the chart legend.
axis1.series.key.values
Array of series data point values.
axis1.series.key.styles
Sets the series colors. Specify a style object in the form {"shape": {"fill": "CCCCFF", "outline": "6666CC"}}
.
Colors apply to chart bars, lines, etc., and are reflected in the chart legend as well.
Effects depend on the chart type:
shape.fill applies to |
shape.outline applies to |
|
---|---|---|
Bar chart | Bar fill | Bar outline |
Line chart | Marker fill | Chart line, marker outline |
Area chart | Area fill | Area outline |
axis1.series.key.data_point_styles
Sets colors for individual data points. Specify 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.
Effects depend on the chart type:
shape.fill applies to |
shape.outline applies to |
|
---|---|---|
Bar chart | Bar fill | Bar outline |
Line chart | Marker fill | Marker outline |
Pie chart | Slice fill | Slice outline |
bounds example
"axis1": {
"bounds": {
"minimum": 0,
"maximum": 100
}
}
axis1.bounds.minimum
Sets the minimum value for the primary vertical (value) axis.
axis1.bounds.maximum
Sets the maximum value for the primary vertical (value) axis.
format example
"axis1": {
"format": "0.0%"
}
axis1.format
Sets the format code for the primary vertical (value) axis labels. Examples are 0.0%
and #,##0.0
.
major_unit example
"axis1": {
"major_unit": 1000
}
axis1.major_unit
Sets the display interval of data labels on the primary vertical (value) axis.
axis2
Optionally specify in the same format as axis1 to set data for the secondary axis.
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]
],
"styles": {
"shape": { "fill": "ffdd99", "outline": "ffaa55" }
}
}
}
}
}
}
]
}
template.pptx
output.pptx
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 | Series name |
axis1.series.key.values | Required | [[Number, Number]] | Array of series data points |
axis1.series.key.styles | Object | Series colors | |
axis1.series.key.data_point_styles | [Object] | Colors for individual data points | |
axis1.x_bounds.minimum | Number | Minimum value for x axis | |
axis1.x_bounds.maximum | Number | Maximum value for x axis | |
axis1.x_format | String | Format code for x axis | |
axis1.x_major_unit | Number | Display interval of x axis labels | |
axis1.y_bounds.minimum | Number | Minimum value for y axis | |
axis1.y_bounds.maximum | Number | Maximum value for y axis | |
axis1.y_format | String | Format code for y axis | |
axis1.y_major_unit | Number | Display interval of y axis labels | |
axis2 | Object | Data for the secondary axis, same format 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]],
"styles": { "shape": { "fill": "CCCCFF", "outline": "6666CC" } },
"data_point_styles": [null, null, { "shape": { "outline": "ff0000" } }]
}
}
}
axis1.series
Holds objects representing series for the primary axis in the format {"series name key": { series data }}
.
If the series name key exists in the template slide, that series will be rewritten. Otherwise, a new series will be created.
axis1.series.key.name
Sets the new name of the series. This name may appear, for example, in the chart legend.
axis1.series.key.values
Array of series data point values.
Each element of the array represents a data point, and is an array of [x value, y value]
.
axis1.series.key.styles
Sets the series colors. Specify a style object in the form {"shape": {"fill": "CCCCFF", "outline": "6666CC"}}
.
Colors apply to series markers, and are reflected in the chart legend as well.
axis1.series.key.data_point_styles
Sets colors for individual data points. Specify 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.
Colors apply to individual markers.
x_bounds / y_bounds example
"axis1": {
"x_bounds": { "minimum": 0, "maximum": 10 },
"y_bounds": { "minimum": -1, "maximum": 1 },
}
axis1.x_bounds.minimum / axis1.y_bounds.minimum
Sets the minimum value for that axis.
axis1.x_bounds.maximum / axis1.y_bounds.maximum
Sets the maximum value for that axis.
x_format / y_format example
"axis1": {
"x_format": "0.0%",
"y_format": "#,##0.0"
}
axis1.x_format / axis1.y_format
Sets the format code for axis labels. Examples are 0.0%
and #,##0.0
.
x_major_unit / y_major_unit example
"axis1": {
"x_major_unit": 1,
"y_major_unit": 0.1
}
axis1.x_major_unit / axis1.y_major_unit
Sets the display interval of data labels for that axis.
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
output.pptx
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. |
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
output.pptx
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. |
Video
Replace shapes with videos by providing objects containing video information.
data.json
{
"slides": [
{
"template": 1,
"video1": {
"type": "video",
"src": "my-video.mp4",
"thumbnail": "thumb.png",
"scaling": "contain"
}
}
]
}
template.pptx
output.pptx
Download zip file for this example
Video object parameters
Key | Required | Value | Notes |
---|---|---|---|
type | Required | "video" | |
src | Required | String | Relative path to video file, as seen from data.json. Supported file formats are mp4 , m4v and mov . |
thumbnail | Required | String | Picture to be shown when video is not playing. Needs to have the same aspect ratio as the video itself. Relative path to image file, as seen from data.json. Supported file formats are jpg , jpeg , png and gif . |
scaling | String | One of:contain (Default)Scale so that the entire video fits within the target shape. cover Scale so that the video fills the target shape. Video may overflow. |
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.
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.
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
output.pptx
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
output.pptx
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
output.pptx
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
output.pptx
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
output.pptx
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
output.pptx
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
output.pptx
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
output.pptx
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
output.pptx
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
output.pptx
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
output.pptx
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 |