---
title: "Share the film publicly, or update the public version (free)"
method: POST
path: "/v1/storyboards/{id}/share"
tags: ["Storyboards"]
---

# Share the film publicly, or update the public version (free)

`POST /v1/storyboards/{id}/share`

## Request

- Base URL: `https://nanostudiopro.com/api`
- URL: `https://nanostudiopro.com/api/v1/storyboards/{id}/share`
- Auth: HTTP bearer

Makes a PUBLIC page (`share.url`, /watch/...) that plays a FROZEN copy of the film: later edits change nothing a viewer sees until this is called again, which re-freezes into the same link. The copy references the clips and pictures already in the library; nothing is duplicated. Refused (409, with `readiness`) while a segment has no finished take, unless `allow_stills` (those moments play as stills). Confirm with the user first.

## Request body

- object
  - `expiry` 'never' | '24h' | '7d' | '30d' | '90d' | 'custom': Default 30d on create; unchanged on an update when omitted.
  - `expiry_custom` string: The date for `custom` (YYYY-MM-DD).
  - `password` string: Viewers must type it. "" removes it; omitted leaves it.
  - `allow_stills` boolean

## Response `200`

The share

- StoryboardShareAnswer: A film's public link. Its keys are camelCase, as the page reads them.
  - `share` object, nullable
    - `token` string
    - `url` string, uri: The public page.
    - `expiresAt` string, date-time, nullable
    - `hasPassword` boolean
    - `viewCount` integer
    - `frozenAt` string, date-time, nullable
    - `inSync` boolean: false: the storyboard changed after it was shared.
  - `readiness` object
    - `ready` boolean
    - `missing` object[]
      - `segmentId` string
      - `where` string
      - `paths` integer[]
  - `stats` object, nullable: GET only; null until shared. How the public film is watched, counted per viewer without an account (a first-party cookie), from their first Play. Counts only. Shares are 0-1.
    - `views` integer: Times Play was pressed.
    - `viewers` integer: Viewers who pressed Play.
    - `finishes` integer: Viewings watched to an ending.
    - `finishedViewers` integer
    - `endings` object[]
      - `panelId` string
      - `moment` integer
      - `title` string, nullable
      - `viewers` integer
      - `share` number
    - `stops` object[]: Viewers who never reached an ending, by the moment they were last at.
      - `panelId` string
      - `moment` integer
      - `viewers` integer
    - `decisions` object[]: Each decision's split of first choices.
      - `decisionId` string
      - `panelId` string
      - `moment` integer
      - `chose` integer
      - `options` object[]
        - `optionId` string
        - `label` string
        - `count` integer
        - `share` number

## Other responses

- `401`: Missing or invalid token
- `409`: Some moments still need a finished take: Moments 2 to 3. Share anyway to play them as stills.
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/nanostudiopro/apis/nano-studio-pro-api.md) · [All operations](https://skmtc.dev/nanostudiopro/apis/nano-studio-pro-api/llms.txt) · [OpenAPI document](https://skmtc.dev/nanostudiopro/apis/nano-studio-pro-api/revisions/b454211e598e?raw)
