---
title: "Create Public Program Presentation"
method: POST
path: "/v2/public/ferry/programs/{program_id}/presentations"
tags: ["presentations"]
---

# Create Public Program Presentation

`POST /v2/public/ferry/programs/{program_id}/presentations`

## Request

- Base URL: `https://api.sanka.com`
- URL: `https://api.sanka.com/v2/public/ferry/programs/{program_id}/presentations`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/sankahq/apis/sanka-public-api/docs/v2/public/ferry/programs/:program_id/presentations/post.ts> (a function with typed inputs; its response is checked against the schema)

Create a presentation from deck JSON, Markdown, a Markdown Doc, or just a title.

## Path parameters

- `program_id` string, required

## Query parameters

- `workspace_id` string, nullable

## Headers

- `X-Workspace-Code` string

## Request body

- PresentationCreateRequest
  - `title` string, required
  - `deck` object, nullable: A `sanka.deck/v1` deck. The presentations catalog (`GET …/presentations/catalog`) publishes its JSON Schema, limits and guidance. Give at most one of `deck`, `markdown` and `sourceDocumentId`; with none of them the presentation starts with one title slide.
  - `markdown` string, nullable: Markdown to lay out as slides: `---` and the most frequent of the top two heading levels start slides; lists, tables, quotes, images and Mermaid fences become blocks.
  - `sourceDocumentId` string, nullable: A Markdown Doc in the same Docs to convert; the Doc itself is unchanged.
  - `pageSize` '16:9' | 'a4-landscape', nullable: Slide size; overrides `deck.page.size`. Defaults to 16:9.
  - `theme` PresentationThemeChoice
    - `id` 'sanka-paper' | 'ink' | 'plain', required
    - `version` integer, nullable: Omit for the latest version.
  - `folderId` string, nullable: Docs folder to create the presentation in.
  - `sourceRef` string, nullable

## Response `201`

Successful Response

- CreatePublicProgramPresentation201Envelope
  - `success` true, required
  - `data` PresentationData, required
    - `id` string, required
    - `programId` string, nullable
    - `workspaceId` string, required
    - `product` 'sanka' | 'flow', required
    - `kind` 'presentation'
    - `title` string, required
    - `revision` integer, required
    - `deck` Deck, required
      - `schema` 'sanka.deck/v1'
      - `page` DeckPage
        - `size` '16:9' | 'a4-landscape'
      - `theme` DeckTheme
        - `id` 'sanka-paper' | 'ink' | 'plain'
        - `version` integer, nullable
      - `footer` DeckFooter
        - `pageNumbers` boolean
        - `text` string
      - `slides` Slide[], required
        - `id` string, nullable
        - `positioning` 'flow' | 'free': `flow` stacks blocks in the layout's body; `free` places every top-level block in its `frame` (array order is stacking order, bottom first).
        - `layout` 'none' | 'accent-left' | 'accent-right' | 'accent-top' | 'accent-background'
        - `accent` union
          - ImageAccent
            - `type` 'image', required
            - `assetId` string, required
            - `fit` 'cover' | 'contain'
            - `focus` Focus
              - …
            - `alt` string
          - ToneAccent
            - `type` 'tone', required
            - `tone` 'accent' | 'accent-soft' | 'inverse' | 'surface', required
        - `accentSize` 's' | 'm' | 'l'
        - `overlay` 'dark' | 'light' | 'none', nullable: Shade over a background accent (accent-background only).
        - `align` SlideAlign
          - `x` 'start' | 'center'
          - `y` 'start' | 'center' | 'end'
        - `background` 'default' | 'surface' | 'accent-soft' | 'inverse'
        - `blocks` union[]
          - union
            - HeadingBlock
              - …
            - TextBlock
              - …
            - ImageBlock
              - …
            - TableBlock
              - …
            - CardsBlock
              - …
            - StatsBlock
              - …
            - StepsBlock
              - …
            - TimelineBlock
              - …
            - QuoteBlock
              - …
            - CalloutBlock
              - …
            - DiagramBlock
              - …
            - SankaDiagramBlock: A saved Sanka diagram. Every view shows its latest revision as an image, so edits to the diagram appear in the deck, its slideshow, share links and new exports.
              - …
            - DividerBlock
              - …
            - ColumnsBlock: Two or three side-by-side stacks of blocks; widths are twelfths and sum to 12.
              - …
            - ShapeBlock: A filled theme-colored shape with optional text (free slides only).
              - …
            - LineBlock: A straight line or arrow between two stage points (free slides only).
              - …
        - `notes` string
        - `hidden` boolean
    - `slideCount` integer, required
    - `outline` string, required: Read-only Markdown outline derived from the deck.
    - `updatedVia` 'app' | 'api' | 'mcp' | 'system', required
    - `sourceRef` string, nullable
    - `pinned` boolean
    - `archivedAt` union
      - string, date-time
      - string
    - `createdById` integer, nullable
    - `updatedById` integer, nullable
    - `createdAt` union
      - string, date-time
      - string
    - `updatedAt` union
      - string, date-time
      - string
    - `appPath` string, required: App-relative URL of the Docs page with this presentation open.
    - `warnings` PresentationWarning[]
      - `code` string, required
      - `path` string, required
      - `message` string, required
  - `meta` EnvelopeMeta, required
    - `ctx_id` string, required
    - `pagination` PaginationMeta
      - `page` integer, required
      - `page_size` integer, required
      - `total` integer, required
      - `next_cursor` string, nullable
    - `toast` ToastMessage
      - `variant` 'success' | 'error' | 'info' | 'warning', required
      - `code` string, required
      - `message` string, required
      - `i18n` ToastMessageI18n, required
        - `en` string, required
        - `ja` string, required

## Other responses

- `401`: Error response
- `403`: Error response
- `422`: Error response

## Changes

- **2026-10-18** `16f03a9e3ab9`: 1 breaking, 1 info
  - added `#/components/schemas/SankaDiagramBlock` to the `data/deck/slides/items/blocks/items/oneOf[subschema #14: ColumnsBlock]/columns/items/blocks/items/` response property `oneOf` list for the response status `201`
  - added `sankaDiagram` discriminator mapping keys to the `data/deck/slides/items/blocks/items/oneOf[subschema #14: ColumnsBlock]/columns/items/blocks/items/` response property for the response status `201`
- **2026-10-18** `cadc7ef65a04`: 1 breaking, 44 info
  - added `#/components/schemas/SankaDiagramBlock, #/components/schemas/ShapeBlock, #/components/schemas/LineBlock` to the `data/deck/slides/items/blocks/items/` response property `oneOf` list for the response status `201`
  - added the optional property `data/deck/slides/items/blocks/items/oneOf[subschema #10: CalloutBlock]/fontSize` to the response with the `201` status
  - added the optional property `data/deck/slides/items/blocks/items/oneOf[subschema #10: CalloutBlock]/frame` to the response with the `201` status
  - added the optional property `data/deck/slides/items/blocks/items/oneOf[subschema #11: DiagramBlock]/frame` to the response with the `201` status
  - …41 more
- **2026-10-09** `6224f51f9e33`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/sankahq/apis/sanka-public-api/changes/v2/public/ferry/programs/:program_id/presentations/post.md)

---

[API](https://skmtc.dev/sankahq/apis/sanka-public-api.md) - [All operations](https://skmtc.dev/sankahq/apis/sanka-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sankahq/apis/sanka-public-api/revisions/16f03a9e3ab9?raw)
