Public API Beta
Table of contents
Authentication
To use the API, you need to authenticate using your API key. Create one in your workspace settings > API keys. Authentication to the API is performed via HTTP Basic Auth. Provide your API key as the basic auth username value. You do not need to provide a password.
All API requests must be made over HTTPS.
Example
curl -X GET https://app.seidat.com/api/beta/presentations -u api_XXXXXXXXXXXXX:
Note the colon after the API key
Request format
All POST
requests must be made as JSON and have the Content-Type
header set to application/json
unless otherwise required by the method (for example, image upload).
Resources and methods
Presentations
The presentation object
{
"_id": "jB2K3g52ufarGmi8N", // Presentation ID
"title": "Template: Sales Deck - Yellow", // Presentation title
"tags": [ // Tags
"Sales presentation",
"Templates"
],
"stacks": [ // Slide structure
{
"slides": [ // Slides inside the stack
{
"_id": "n8h3xnxfMZoJkwwMz" // Slide ID. Maps to the "_id" of the slide object
},
{
"_id": "YMRkNfNmWMR2krsLb",
"masterSlideId": "cFcuDi5nnYMrKP9wN" // Optional - ID of the master slide if this slide is a slave (see "Smart slides" section below).
},
{
"_id": "2tt3fcypSrJKQoimD"
}
]
},
{
"slides": [
{
"_id": "rQKtG7N7hF8JdkedY"
},
{
"_id": "Doe5rQfnN4AbD56Bi"
}
]
}
],
"restricted": true, // Optional - whether this presentation has editing restrictions set
"createdAt": "2019-04-25T16:34:32.678Z", // Created date
"updatedAt": "2019-04-25T16:34:32.678Z" // Updated date
}
List presentations
Returns a list of presentations owned by your workspace.
GET https://app.seidat.com/api/beta/presentations?limit=10&skip=5
limit
(optional): A limit on the number of presentations to be returned. Can range between1
and100
. The default is10
.skip
(optional): The number of presentations to skip in the returned result. The minimum is0
. The default is0
.
Retrieve a presentation
Retrieves the presentation with the given ID.
GET https://app.seidat.com/api/beta/presentations/{ID}
Create a presentation
Creates a new presentation with one or more empty slides.
POST https://app.seidat.com/api/beta/presentations
{
"title": "New API presentation",
"slides": [1, 3, 2, 1],
"tags": ["Offers"]
}
title
String (optional): Presentation title. The minimum character count is1
. Defaults toNew presentation
.slides
Array of Numbers (optional): Defines the slide structure of the new presentation. The number of elements in the array corresponds to the number of stacks in the presentation. Each array element corresponds to the number of slides in a stack. Defaults to[1]
.E.g. [1,3,2,1] corresponds to:
[][][][] [][] []
tags
Array of Strings (optional): Tags to add to the new presentation. Only the tags present in your workspace are allowed. See the workspace object.
Returns:
The newly created presentation object if the operation succeeded.
Update a presentation
Updates the specified presentation by setting the values of the parameters passed. Any parameters not provided will be left unchanged. This request requires at least one parameter.
POST https://app.seidat.com/api/beta/presentations/{ID}
{
"title": "Updated presentation title"
}
NOTE: Only the title is editable at the moment, so it is required!
title
String (optional): Presentation title. The minimum character count is1
.
Returns:
The updated presentation object if the update succeeded.
Duplicate a presentation
Creates a new copy of the presentation with the given ID.
POST https://app.seidat.com/api/beta/presentations/{ID}/duplicate
{
"title": "Duplicated API presentation",
"tags": ["Offers"]
}
title
String (optional): Presentation title. The minimum character count is1
. Defaults toOriginal presentation title - copy
.tags
Array of Strings (optional): Tags to add to the new presentation. If this parameter is omitted, the new presentation will duplicate the tags of the source presentation. Pass an empty array to unset the tags. Only the tags present in your workspace are allowed. See the workspace object.
Returns:
The newly created presentation object if the operation succeeded.
Delete a presentation
Moves a presentation to trash along with its containing slides (except for smart slides).
DELETE https://app.seidat.com/api/beta/presentations/{ID}
Create a shared link
Creates a new shared link for the specified presentation
POST https://app.seidat.com/api/beta/presentations/{ID}/shared-links
{
"note": "Link for customer X"
}
note
String (optional): A note to add to the shared link object.
Returns:
The newly created shared link object if the operation succeeded.
Delete a shared link
Permanently deletes a shared link. Meaning that the presentation becomes unavailable through that link. This action cannot be undone.
DELETE https://app.seidat.com/api/beta/presentations/{ID}/shared-links/{hash}
Slides
The slide object
{
"_id": "cFcuDi5nnYMrKP9wN", // Slide ID
"title": "Hello", // Optional - slide title
"elements": [], // Slide elements. Elements are layered in the order they appear in this array (last on top).
"backgrounds": [], // Slide backgrounds. Currently there can only be at most one background.
"backgroundColor": "#fff", // Slide background color. HEX or rgb()
"masterSlideId": "rQKtG7N7hF8JdkedY", // Optional - ID of the master slide if this slide is a slave (see "Smart slides" section below).
"isMasterSlide": false, // Optional - whether this slide is a master slide.
"presentations": [ // Presentations this slide belongs to. Only master slides can belong to none or multiple presentations.
"8HTBq5zPBpXYC2QeK" // Presentation ID
],
"createdAt": "2019-06-05T10:17:49.460Z", // Created date
"updatedAt": "2019-06-05T10:18:06.754Z" // Updated date
}
Slide elements
The element object
{
"name": "shapeElement", // Element name. List of available element names below
"pos": [ // Position in pixels
120, // X-axis. From the center of the element to the left edge of the slide
120 // Y-axis. From the center of the element to the top edge of the slide
],
"size": [ // Size in pixels
240, // Width
240 // Height
],
"rad": 0, // Rotation in radians
"skewX": 0, // Skew value
"keepRatio": false, // Whether the element keeps its aspect ratio when resized
"data": {}, // Element-specific data - more below
"label": "Black rectangle", // Optional - Element label, appears in the editor panel
"isLocked": true // Optional - Whether the element is locked (can't be selected in the editor)
}
List of the available element names (types):
shapeElement
- SVG shape"data": { "fill": "rgba(0,0,0,0.5)", // Shape fill (color). HEX or rgba() "shapeName": "rectangle" // Shape name (type). Possible shapes: "rectangle", "circle", "diamond", "star" }
textElement
- Text box
Text is stored as an array of Delta insert operations. Delta is a format to describe text content and/or changes made to it - quilljs.com/docs/delta/. Only insert operations are supported. Every operation consists of the insert
property (which is the actual text portion) and an attributes
object that describes formatting applied to that text portion.
Example
"data": {
"deltaOps": [ // List of delta operations
{
"insert": "Text from API!",
"attributes": {
"italic": true,
"styleId": "8MWkPm"
}
},
{
"insert": "\n",
"attributes": {
"blockStyleId": "8MWkPm"
}
}
]
}
Seidat-specific delta format:
There are two types of operations: inline operations and block operations.
Inline operations
This is a text run inside a paragraph. The insert
property (content) must not contain any new line (\n
) characters.
Formatting attributes supported by inline operations (all attributes are optional):
{
"insert": "Text content inside the paragraph!",
"attributes": {
"styleId": "8MWkPm", // Style ID, maps to text style ID from the theme. (See Theme section)
"italic": true, // Boolean - whether this text is italic type
"bold": true, // Boolean - whether this text is bold
"strike": true, // Boolean - whether this text is crossed out
"underline": true // Boolean - whether this text is underlined
}
}
Block operations
This defines a paragraph. It must appear after any inline operations of a paragraph. The insert
property of a block operation must consist of one or more newline characters (\n
). Other characters are not allowed.
A text box must always end with a block operation (must be the last element of every deltaOps
array), even if there’s no text content (in such case it is the only array element).
To add empty lines between paragraphs use several new line characters inside the insert
property or add separate block operations with a new line character in each one.
Formatting attributes supported by block operations (all attributes are optional):
{
"insert": "\n",
"attributes": {
"blockStyleId": "8MWkPm", // Style ID, maps to text style ID from the theme. (See Theme section)
"align": "center", // String - Text alignment. Can be 'left' (default), 'right', 'center' or 'justify'.
"indent": 0, // Integer - Indentation level (number of tabs)
"list": "bullet" // String - list type. Can be 'bullet' or 'ordered'
}
}
NOTE: It is advised to always set
styleId
andblockStyleId
attributes, otherwise the default style of your theme will be used. Since the default text style is a configurable setting of your theme, it may change over time affecting text without the style attribute set.
imageElement
- Image"data": { "imageId": "HACTqD9pKBZTR23tL" // Image ID }
iframeElement
- Iframe (embedded website)"data": { "src": "https://www.seidat.com" // Website URL }
embedElement
- Embedded media (videos, posts)"data": { "url": "https://www.youtube.com/watch?v=gSsTJnRbZ4M" // Video URL }
Background object:
{
"type": "image", // Background type. "image" is the only possible value
"data": { // Type-specific properties
"imageId": "HACTqD9pKBZTR23tL" // Image ID
}
}
Smart slides
In Seidat, smart slides are slides that can belong to multiple presentations. If a smart slide is updated, changes are reflected in every presentation that contains it. Smart slides consist of so-called “master slides” and “slave slides”.
Master slides
- A smart slide itself is referred to as a “master slide”. Master slides are regular slide objects. Master slide objects have the
isMasterSlide
property set totrue
and can belong to none or multiple presentations (thepresentations
array can contain from 0 to many presentation IDs, as opposed to regular slides that can only belong to one presentation). - All slide content (elements, backgrounds, slide title) belongs to master slides. To update the content of a smart slide, changes need to be made to its master slide object.
- If a master slide is deleted, its content is copied to its slaves making them regular slides.
- Removing master slides is currently not possible through the public API, you’ll get an error if you try to.
Slave slides
- A slave slide is an instance of a smart slide. It is a slide object that doesn’t have any content (elements, backgrounds, slide title) of its own, but inherits it from its master.
- Slave slides have the
masterSlideId
property set to reference their masters. The same property is set in the slide structure of a presentation object (see Presentation object above). Like regular slides, slave slides can only belong to one presentation. - Any content updates must be made to its master slide. You’ll get an error if you try to update a slave slide.
- To remove a smart slide from a presentation, delete its instance (slave) like you’d delete a regular slide.
List slides
Returns a list of slides owned by your workspace.
GET https://app.seidat.com/api/beta/slides?presentationId={ID}&limit=10&skip=5
presentationId
(optional): Only return slides that belong to the presentation specified by this presentation ID.limit
(optional): A limit on the number of slides to be returned. Can range between1
and100
. The default is10
.skip
(optional): The number of slides to skip in the returned result. The minimum is0
. The default is0
.
Retrieve a slide
Retrieves the slide with the given ID.
GET https://app.seidat.com/api/beta/slides/{ID}
Create a slide
Creates a new slide in an existing presentation.
POST https://app.seidat.com/api/beta/slides
{
"presentationId": "CmGunEDuYGyzYp7xB",
"stackIndex": 0
}
presentationId
String (required): The ID of the presentation to add a slide to.stackIndex
Number (optional): The zero-based index of the stack to add a slide to. Omit this argument to create a slide in a new stack.
Returns:
The newly created slide object if the operation succeeded.
Update a slide
Updates the specified slide by setting the values of the parameters passed. Any parameters not provided will be left unchanged. This request requires at least one parameter.
POST https://app.seidat.com/api/beta/slides/{ID}
{
"title": "Updated slide title",
"elements": [{...}],
"backgrounds": [{...}],
"backgroundColor": "rgb(210, 210, 210)"
}
title
String (optional): Slide title. Pass an empty string to unset.elements
Array of Element Objects (optional): Slide elements. Pass an empty array to remove all.Note: When updating slide elements, all hotspots bound to them will become inactive. You can bind them again in the application interface.
backgrounds
Array of Background Objects (optional): Slide background layers. The maximum array element count is 1. Pass an empty array to clear the background (leaving just the background color).backgroundColor
HEX or RGB color formatted String (optional): Slide background color. E.g.rgb(0, 255, 255)
or#00ffff
. This value cannot be unset.
Returns:
The updated slide object if the update succeeded.
Delete a slide
Moves a slide to trash and removes it from a presentation.
In case an instance of a smart slide (slave slide) is deleted, its master slide still remains in the slides collection. Master slides currently cannot be deleted through the public API.
DELETE https://app.seidat.com/api/beta/slides/{ID}
Images
The image object
{
"_id": "oWjwfTv4zXWRKY6AD", // Image ID
"path": [ // Folder path
"Background images" // Directory name
],
"file": {
"mimetype": "image/jpeg", // File type
"filename": "accessory-analog-classic-84475_pexels.jpg", // File name
"width": 1280, // Original width in pixels
"height": 853, // Original height in pixels
"size": 72558 // File size in bytes
},
"createdAt": "2019-04-25T16:34:07.763Z", // Created date
"updatedAt": "2019-04-25T16:34:07.763Z", // Updated date
"url": "https://cdn.filestackcontent.com/ptuSZhTPQyOdmnyBnesP" // Public URL
}
List images
Returns a list of images owned by your workspace.
GET https://app.seidat.com/api/beta/images?limit=10&skip=5
limit
(optional): A limit on the number of images to be returned. Can range between1
and100
. The default is10
.skip
(optional): The number of images to skip in the returned result. The minimum is0
. The default is0
.
Retrieve an image
Retrieves the image with the given ID.
GET https://app.seidat.com/api/beta/images/{ID}
Create an image
Creates a new image object from the specified URL. An image is first uploaded to the application’s file storage.
POST https://app.seidat.com/api/beta/images
{
"url": "https://picsum.photos/id/237/640/640",
"filename": "Puppy",
"path": ["animals", "cute"]
}
url
String (required): A URL to get an image file from.filename
String (optional): The image file name. If set, must include a file extension. Will be set automatically if none is provided.path
Array of Strings (optional): The folder path to insert an image to. A new folder path is created in case the provided one doesn’t exist. The minimum character count for a directory name (array element) is3
. Omit this parameter to put an image in the root of the image bank.
Returns:
The newly created image object if the operation succeeded.
Upload and create an image
Uploads an image from your file system and creates a new image object. An image is first uploaded to the application’s file storage. Include an image as a binary file in the request body. You must set the appropriate Content-Type
header.
Accepted types:
image/jpeg
image/png
image/gif
image/svg+xml
POST https://app.seidat.com/api/beta/images/upload?filename=new_image.jpg&path=path/to/image
Note: These are query parameters!
filename
String (optional): The image file name. If set, must include a file extension. Will be set automatically if none is provided.path
String (optional): The folder path to insert an image to. Must be in the formpath/to/image
and should not contain leading and trailing slashes. A new folder path is created in case the provided one doesn’t exist. The minimum character count for a directory name (between slashes) is3
. Omit this parameter to put an image in the root of the image bank.
Returns:
The newly created image object if the operation succeeded.
Delete an image
Permanently deletes an image from the image collection and removes it from any slide that uses it. This action cannot be undone.
DELETE https://app.seidat.com/api/beta/images/{ID}
Themes
The theme object
{
"_id": "iccshpkPXdZg8zqFt", // Theme ID
"styles": [ // List of text styles
{
"id": "Dz4xGM", // Style ID
"name": "Title 100 Extra Bold white Open Sans", // Style name
"fontColor": "rgb(255,255,255)", // Font color, rgb() or rgba() without spaces
"fontSize": "100", // Font size in pixels
"fontWeight": "800", // Font weight
"lineHeight": "1", // Line height
"fontFamily": "Open Sans", // Font family
"isItalic": false, // Whether the font is italic
"isDefault": true, // Whether the text style is the default for the theme
"letterSpacing": 25 // Letter spacing
}
],
"slideBackgroundColor": "rgb(243,243,243)", // Default slide background color, rgb() or rgba() without spaces
"colorGroups": [ // Color group
{
"id": "Spen7m", // Color group ID
"name": "Main brand", // Color group name
"colors": [
"rgb(255,255,255)" // Color, rgb() or rgba() without spaces
]
}
],
"name": "Demo workspace" // Theme name
}
List themes
Returns a list of themes owned by your workspace. Currently, one workspace can only own one theme.
GET https://app.seidat.com/api/beta/themes?limit=1
limit
(optional): A limit on the number of themes to be returned. Can range between1
and100
. The default is10
.skip
(optional): The number of themes to skip in the returned result. The minimum is0
. The default is0
.
Retrieve a theme
Retrieves the theme with the given ID.
GET https://app.seidat.com/api/beta/themes/{ID}
Workspace (prev. Team)
The workspace object
{
"_id": "GqcjB9mnSLmFuaze6", // Workspace ID (prev. Team ID)
"name": "Demo Workspace", // Workspace name
"slug": "demo-workspace", // Slugified workspace name
"tags": ["Offers", "Memos", "Templates"]
}
Retrieve a workspace
Retrieves the workspace that the API key belongs to.
GET https://app.seidat.com/api/beta/team
Response codes
All error responses contain a detailed error message. For example:
{
"message": "Invalid JSON in request body."
}
Success
Code | Description |
---|---|
200 (OK) | Successful response to update calls and GET methods. |
201 (Created) | Successful response to create calls. |
204 (No Content) | Successful response to DELETE methods |
Client error
Code | Description |
---|---|
400 (Bad Request) | Generic client error. Usually a result of bad request formatting or invalid parameters. |
401 (Unauthorized) | Missing or invalid credentials. |
402 (Payment Required) | Workspace’s subscription has expired. |
403 (Forbidden) | Valid credentials, but insufficient permissions. |
404 (Not Found) | Tried to act on a non-existing resource. |
415 (Unsupported Media Type) | Wrong request content type. |
429 (Too Many Requests) | The limit of 1000 requests per 1 minute per IP has been exceeded. |
Server error
Code | Description |
---|---|
500 (Internal Server Error) | Something broke on our end. |
501 (Not Implemented) | The method is not yet configured. |