---
title: "Upload a new version of a presentation"
method: POST
path: "/presentations/{id}/versions"
---

# Upload a new version of a presentation

`POST /presentations/{id}/versions`

## Request

- Base URL: `https://lumdeck.com/api/v1`
- URL: `https://lumdeck.com/api/v1/presentations/{id}/versions`
- Auth: HTTP bearer

## Path parameters

- `id` string, required

## Query parameters

- `filename` string
- `title` string
- `note` string
- `wait` integer

## Request body

- object
  - `title` string
  - `note` string
  - `filename` string
  - `html` string: A self-contained HTML document (up to 8 MB).
  - `contentBase64` string: A .zip with index.html at its root, or an .html file, base64-encoded.
  - `wait` integer: Seconds to wait.

## Response `201`

Stored and handed to validation; `version.status` tells whether it is ready.

- object
  - `presentation` Presentation
    - `id` string
    - `title` string
    - `slug` string
    - `appUrl` string, uri
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `versionCount` integer
    - `current` Version
      - `id` string
      - `number` integer
      - `status` 'processing' | 'ready' | 'rejected'
      - `progress` object
        - `done` integer
        - `total` integer
      - `filename` string
      - `sizeBytes` integer
      - `fileCount` integer
      - `note` string, nullable
      - `createdAt` string, date-time
      - `readyAt` string, date-time, nullable
      - `issues` object[]
        - `code` string
        - `path` string
        - `message` string
      - `warnings` string[]
    - `latest` Version
      - `id` string
      - `number` integer
      - `status` 'processing' | 'ready' | 'rejected'
      - `progress` object
        - `done` integer
        - `total` integer
      - `filename` string
      - `sizeBytes` integer
      - `fileCount` integer
      - `note` string, nullable
      - `createdAt` string, date-time
      - `readyAt` string, date-time, nullable
      - `issues` object[]
        - `code` string
        - `path` string
        - `message` string
      - `warnings` string[]
    - `preview` object: The deck picture: an uploaded cover, else a screenshot of slide 1 of the current version. Fetch `url` with the same API key.
      - `url` string, uri, nullable
      - `source` 'cover' | 'screenshot' | 'null', nullable
      - `screenshot` 'pending' | 'ready' | 'failed' | 'null', nullable
  - `version` Version
    - `id` string
    - `number` integer
    - `status` 'processing' | 'ready' | 'rejected'
    - `progress` object
      - `done` integer
      - `total` integer
    - `filename` string
    - `sizeBytes` integer
    - `fileCount` integer
    - `note` string, nullable
    - `createdAt` string, date-time
    - `readyAt` string, date-time, nullable
    - `issues` object[]
      - `code` string
      - `path` string
      - `message` string
    - `warnings` string[]

## Other responses

- `400`: Error
- `401`: Missing, unknown, revoked or expired API key
- `403`: The key lacks the scope, or its creator lacks the role
- `404`: Not found in this workspace
- `409`: Plan cap or storage limit reached
- `413`: Deck larger than the plan allows
- `429`: Per-key request limit or daily publish quota reached

---

[API](https://skmtc.dev/lumdeck/apis/lumdeck-api.md) · [All operations](https://skmtc.dev/lumdeck/apis/lumdeck-api/llms.txt) · [OpenAPI document](https://skmtc.dev/lumdeck/apis/lumdeck-api/revisions/11ed3170c9bb?raw)
