Slides API 🟡 BETA

API for creating, editing, and managing presentation slides with AI-powered content generation.


Base URL

/api/slides

Authentication

All endpoints require a valid session token via Authorization: Bearer <token> header.


Endpoints

List Presentations

GET /api/slides/list

Returns a list of all presentations accessible to the authenticated user.

ParameterTypeRequiredDescription
pageintegerNoPage number for pagination (default: 1)
limitintegerNoItems per page (default: 20)
sortstringNoSort field: created_at, updated_at, name
orderstringNoSort order: asc, desc (default: desc)

Response:

{
  "presentations": [
    {
      "id": "uuid-string",
      "name": "Q4 Sales Report",
      "slide_count": 12,
      "created_at": "2026-01-15T10:30:00Z",
      "updated_at": "2026-01-20T14:45:00Z",
      "thumbnail_url": "/api/slides/uuid/thumbnail",
      "theme": "corporate-blue"
    }
  ],
  "total": 45,
  "page": 1,
  "limit": 20
}

Search Presentations

GET /api/slides/search

Search presentations by name or content keywords.

ParameterTypeRequiredDescription
qstringYesSearch query string
limitintegerNoMax results to return (default: 10)

Response:

{
  "results": [
    {
      "id": "uuid-string",
      "name": "Q4 Sales Report",
      "match_score": 0.95,
      "snippet": "...quarterly revenue exceeded targets by 15%..."
    }
  ],
  "total": 5
}

Load Presentation

GET /api/slides/load

Loads the full presentation data including all slides and their content.

ParameterTypeRequiredDescription
idstringYesPresentation ID

Response:

{
  "id": "uuid-string",
  "name": "Q4 Sales Report",
  "theme": "corporate-blue",
  "slides": [
    {
      "id": "slide-uuid",
      "index": 0,
      "type": "title",
      "content": {
        "title": "Q4 Sales Report",
        "subtitle": "October - December 2026",
        "background": "#1a365d"
      },
      "notes": "Opening slide"
    },
    {
      "id": "slide-uuid-2",
      "index": 1,
      "type": "content",
      "content": {
        "title": "Revenue Summary",
        "body": "Total revenue: $2.4M",
        "layout": "two-column"
      }
    }
  ],
  "metadata": {
    "author": "user-uuid",
    "version": 3
  }
}

Save Presentation

POST /api/slides/save

Creates a new presentation or updates an existing one.

ParameterTypeRequiredDescription
idstringNoPresentation ID (omit for new)
namestringYesPresentation name
slidesarrayYesArray of slide objects
themestringNoTheme identifier

Request Body:

{
  "name": "Q4 Sales Report",
  "theme": "corporate-blue",
  "slides": [
    {
      "type": "title",
      "content": {
        "title": "Q4 Sales Report",
        "subtitle": "October - December 2026"
      }
    }
  ]
}

Response:

{
  "id": "uuid-string",
  "name": "Q4 Sales Report",
  "saved_at": "2026-01-20T15:00:00Z"
}

Delete Presentation

POST /api/slides/delete

Deletes a presentation by ID.

ParameterTypeRequiredDescription
idstringYesPresentation ID to delete

Response:

{
  "deleted": true,
  "id": "uuid-string"
}

New Presentation

GET /api/slides/new

Creates a new blank presentation with default settings.

Response:

{
  "id": "new-uuid-string",
  "name": "Untitled Presentation",
  "theme": "default",
  "slides": [
    {
      "id": "slide-uuid",
      "index": 0,
      "type": "title",
      "content": {
        "title": "",
        "subtitle": ""
      }
    }
  ],
  "created_at": "2026-01-20T15:00:00Z"
}

AI Generate Content

POST /api/slides/ai

Uses AI to generate slide content based on a prompt or topic.

ParameterTypeRequiredDescription
promptstringYesDescription of desired content
presentation_idstringNoExisting presentation to add to
slide_countintegerNoNumber of slides to generate (default: 5)
stylestringNoContent style: formal, casual, technical, creative

Request Body:

{
  "prompt": "Create a presentation about quarterly sales performance with charts and key metrics",
  "slide_count": 8,
  "style": "formal"
}

Response:

{
  "presentation_id": "uuid-string",
  "slides": [
    {
      "type": "title",
      "content": {
        "title": "Q4 Sales Performance",
        "subtitle": "Data-Driven Insights"
      }
    },
    {
      "type": "content",
      "content": {
        "title": "Key Metrics",
        "body": "Revenue growth: 23%\nNew customers: 1,247\nRetention rate: 94%"
      }
    }
  ],
  "generation_time_ms": 3450
}

Get Slide by ID

GET /api/slides/:id

Returns a single slide from a presentation.

ParameterTypeRequiredDescription
idstring (path)YesSlide ID

Response:

{
  "id": "slide-uuid",
  "index": 2,
  "type": "chart",
  "content": {
    "title": "Revenue by Region",
    "chart_type": "bar",
    "data": {
      "labels": ["North", "South", "East", "West"],
      "values": [450000, 380000, 520000, 410000]
    }
  },
  "notes": "Discuss regional performance"
}

Add Slide

POST /api/slides/slide/add

Adds a new slide to an existing presentation.

ParameterTypeRequiredDescription
presentation_idstringYesParent presentation ID
slideobjectYesSlide definition
positionintegerNoInsert position (default: end)

Request Body:

{
  "presentation_id": "uuid-string",
  "slide": {
    "type": "content",
    "content": {
      "title": "Market Analysis",
      "body": "Key findings from Q4 market research...",
      "layout": "full-width"
    }
  },
  "position": 3
}

Response:

{
  "slide_id": "new-slide-uuid",
  "index": 3,
  "total_slides": 13
}

Set Theme

POST /api/slides/theme

Applies a theme to the entire presentation.

ParameterTypeRequiredDescription
presentation_idstringYesPresentation ID
themestringYesTheme identifier

Request Body:

{
  "presentation_id": "uuid-string",
  "theme": "corporate-blue"
}

Response:

{
  "updated": true,
  "theme": "corporate-blue",
  "slides_affected": 12
}

Update Cursor Position

POST /api/slides/cursor

Updates the collaborative editing cursor position for real-time collaboration.

ParameterTypeRequiredDescription
presentation_idstringYesPresentation ID
slide_indexintegerYesCurrent slide index
user_namestringYesDisplay name of user

Request Body:

{
  "presentation_id": "uuid-string",
  "slide_index": 5,
  "user_name": "Ana"
}

Response:

{
  "updated": true
}

Get Cursors

GET /api/slides/cursors

Returns all active collaborative cursors for a presentation.

ParameterTypeRequiredDescription
presentation_idstringYesPresentation ID

Response:

{
  "cursors": [
    {
      "user_name": "Ana",
      "slide_index": 5,
      "updated_at": "2026-01-20T15:05:00Z"
    },
    {
      "user_name": "Carlos",
      "slide_index": 2,
      "updated_at": "2026-01-20T15:04:50Z"
    }
  ]
}

Upload Media

POST /api/slides/media

Uploads an image or media file to a slide.

ParameterTypeRequiredDescription
presentation_idstringYesPresentation ID
slide_idstringYesTarget slide ID
filebinaryYesMedia file (image, video)
positionstringNoPlacement: background, inline, float

Response:

{
  "media_id": "media-uuid",
  "url": "/api/slides/media/media-uuid",
  "type": "image/png",
  "size_bytes": 245760
}

List Media

GET /api/slides/media/list

Returns all media assets for a presentation.

ParameterTypeRequiredDescription
presentation_idstringYesPresentation ID

Response:

{
  "media": [
    {
      "id": "media-uuid",
      "filename": "chart-q4.png",
      "type": "image/png",
      "size_bytes": 245760,
      "url": "/api/slides/media/media-uuid",
      "used_in_slides": [2, 5, 8]
    }
  ],
  "total_size_bytes": 1048576
}

Slide Types

TypeDescription
titleTitle slide with heading and subtitle
contentStandard content slide with text
chartData visualization slide
imageFull-image or image-focused slide
two-columnSide-by-side content layout
comparisonBefore/after or comparison layout
quoteQuote or testimonial slide
blankEmpty slide for custom content

See Also