---
title: "Patch Deck"
method: PATCH
path: "/decks/{deck_id}"
tags: ["decks"]
---

# Patch Deck

`PATCH /decks/{deck_id}`

## Request

- Base URL: `https://api.presentations.ai/api/v1`
- URL: `https://api.presentations.ai/api/v1/decks/{deck_id}`
- Auth: HTTP bearer

Update deck metadata without starting generation or creating an export.

## Path parameters

- `deck_id` string, uuid, required

## Request body

- UpdateDeckRequest: Partial update of a deck. project_id=None keeps the current value. `version` flips which content the app renders (`Deck.active_version`) — never `origin_version`, which is immutable provenance. Only "v1"/"v2" are accepted; the service layer rejects a flip to a version the deck has no real materialized content for (see `deck_service.update`).
  - `name` string, nullable
  - `visibility` 'PROJECT' | 'PRIVATE' | 'WORKSPACE' | 'PUBLIC': Default access mode for a deck.
  - `project_id` string, uuid, nullable
  - `version` 'v1' | 'v2', nullable

## Response `200`

Successful Response

- Deck: Deck response shape.
  - `id` string, uuid, required
  - `workspace_id` string, uuid, required
  - `project_id` string, uuid, nullable, required
  - `source_deck_id` string, uuid, nullable
  - `legacy_deck_id` string, nullable
  - `created_by` string, uuid, nullable, required
  - `name` string, required
  - `visibility` 'PROJECT' | 'PRIVATE' | 'WORKSPACE' | 'PUBLIC', required: Default access mode for a deck.
  - `thumbnail_url` string, nullable
  - `thumbnails` Thumbnail[]: Every stored size of the same render, largest first (`thumbnails[0]` is `thumbnail_url`). Empty until the first render.
    - `url` string, required
    - `width` integer, required
    - `height` integer, required
  - `has_share_link` boolean
  - `archived_at` string, date-time, nullable, required
  - `deleted_at` string, date-time, nullable
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `flags` DeckFlagType[]
  - `version` string, nullable: Active content version: v1 | v2 | null (authored in-app)
  - `origin_version` string, nullable: Version this deck was migrated from; null if authored in-app.
  - `permissions` DeckPermissions: Caller's resolved access to one deck.
    - `workspace_role` 'OWNER' | 'ADMIN' | 'MEMBER' | 'GUEST', required: Workspace membership role; higher roles subsume lower ones for hierarchy checks.
    - `project_role` 'LEAD' | 'EDITOR' | 'VIEWER', required: Project membership role.
    - `deck_grant_role` 'VIEW' | 'COMMENT' | 'EDIT', required: Per-deck grant role for sharing decks independently of project membership.
    - `is_creator` boolean, required
    - `capabilities` Capability[], required
  - `shared_with_me` boolean, nullable

## Other responses

- `401`: Missing, malformed, expired, or revoked Bearer API key.
- `403`: The API key, workspace role, project scope, or plan lacks permission.
- `404`: The resource does not exist or is outside the caller's scope.
- `422`: A path, query, header, or request-body field failed validation.
- `429`: The caller exceeded the API rate limit.
- `500`: Unexpected server failure. Retry only idempotent operations and retain trace_id.

---

[API](https://skmtc.dev/presentations/apis/presentation-services-api.md) · [All operations](https://skmtc.dev/presentations/apis/presentation-services-api/llms.txt) · [OpenAPI document](https://skmtc.dev/presentations/apis/presentation-services-api/revisions/da06cb2e2f32?raw)
