Public API Beta

Table of contents
  1. Authentication
  2. Request format
  3. Resources and methods
    1. Presentations
      1. The presentation object
      2. List presentations
      3. Retrieve a presentation
      4. Create a presentation
      5. Update a presentation
      6. Duplicate a presentation
      7. Delete a presentation
      8. Create a shared link
      9. Delete a shared link
    2. Slides
      1. The slide object
      2. Slide elements
      3. Smart slides
      4. List slides
      5. Retrieve a slide
      6. Create a slide
      7. Update a slide
      8. Delete a slide
    3. Images
      1. The image object
      2. List images
      3. Retrieve an image
      4. Create an image
      5. Upload and create an image
      6. Delete an image
    4. Themes
      1. The theme object
      2. List themes
      3. Retrieve a theme
    5. Workspace (prev. Team)
      1. The workspace object
      2. Retrieve a workspace
  4. Response codes

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 between 1 and 100. The default is 10.
  • skip (optional): The number of presentations to skip in the returned result. The minimum is 0. The default is 0.

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 is 1. Defaults to New 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 is 1.

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 is 1. Defaults to Original 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}

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.


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 and blockStyleId 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 to true and can belong to none or multiple presentations (the presentations 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 between 1 and 100. The default is 10.
  • skip (optional): The number of slides to skip in the returned result. The minimum is 0. The default is 0.

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 between 1 and 100. The default is 10.
  • skip (optional): The number of images to skip in the returned result. The minimum is 0. The default is 0.

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) is 3. 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 form path/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) is 3. 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. HEX or rgb()
      "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. HEX or rgb()
  "colors": [ // Color palette
    "rgb(255, 255, 255)", // Color. HEX or rgb()
  ],
  "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 between 1 and 100. The default is 10.
  • skip (optional): The number of themes to skip in the returned result. The minimum is 0. The default is 0.

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.