Public API Beta

Authentication

To use the API you need to authenticate using your API key. 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:

Request format

All POST requests must be made as JSON and have the Content-Type header set to application/json unless otherwise is 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"
        }
      ]
    }
  ],
  "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 team.

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]
}
  • 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:

    [][][][]
      [][]
      []
    

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 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

Does not accept any parameters.

Returns:

The newly created presentation object if the operation succeeded.


Remove a presentation

Permanently deletes a presentation and all its containing slides (except for smart slides). This action cannot be undone.

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}/sharedLinks
{
  "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}/sharedLinks/{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 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 consist 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 opertations.

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 new line 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 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 “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 (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, remove its instance (slave) like you’d remove a regular slide.

List slides

Returns a list of slides owned by your team.

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.


Remove a slide

Permanently deletes a slide and removes it from a presentation. This action cannot be undone.

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 team.

GET https://app.seidat.com/api/beta/images?limit=10&skip=5
  • 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 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. Will be set automatically if none 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. Will be set automatically if none 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.


Remove an image

Permanently deletes an image from the image collection. 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 team" // Theme name
  }
]

List themes

Returns a list of themes owned by your team. Currently, one team can only own one theme.

GET https://app.seidat.com/api/beta/themes?limit=1
  • 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 theme

Retrieves the theme with the given ID.

GET https://app.seidat.com/api/beta/themes/{ID}

Response codes

NOTE: All error responses contain a detailed error message

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) Team’s subscription has expired.
403 (Forbidden) Valid credentials, but insufficient permissions.
404 (Not Found) Tried to act on a non-existsing resource.
415 (Unsupported Media Type) Wrong request content type.
429 (Too Many Requests) The limit of 1000 request per 1 minute per IP has been exceeded.

Server error

Code Description
500 (Internal Server Error) Something broke on our end.
501 (Not Implememented) The method is not yet configured.