---
title: "Get a version"
method: GET
path: "/v2/versions/{versionId}"
tags: ["versions"]
---

# Get a version

`GET /v2/versions/{versionId}`

## Request

- Base URL: `https://api.storydoc.com`
- URL: `https://api.storydoc.com/v2/versions/{versionId}`
- Auth: HTTP bearer

Returns one version - 404 for any version GET /v2/versions would not list: a story's primary version, a version of a story that is not Live (draft, archived or deleted), or one in a folder the API key's creator cannot open. Returns everything a list row carries, plus `data` - the version's current variable values, in the same shape POST /v2/versions takes. To change a value without changing the link, send just the fields you want to change to POST /v2/versions/{versionId}; it merges them into these. The link password, if one is set, is never returned.

## Path parameters

- `versionId` string, required

## Query parameters

- `include` 'optionalContent'

## Response `200`

The version

- VersionDetail
  - `id` string: Version ID
  - `title` string, nullable: Version title
  - `status` 'Live' | 'Expired' | 'Draft' | 'Accepted': Accepted: the reader accepted it. Draft: unpublished, the link is off. Expired: past its expiry date. Live: otherwise.
  - `storyId` string: The story (template) the version was created from
  - `storyTitle` string, nullable: The story's title; null for a standalone version
  - `folder` object, nullable: The folder the story is filed in, and who can open it; null at the root
    - `id` string
    - `name` string
    - `path` string[]: Folder names from the root down
    - `sharedWithEveryone` boolean: True when everyone in your organization can open the folder (the app's "Share with everyone in your organization"). This is about your team, not the public: it says nothing about who can open the version's link.
    - `members` object[]: Who can open the folder when it is not shared with everyone; empty when it is. Access is set per folder (a parent's members do not carry over), and organization administrators can open every folder without being listed.
      - `name` string, nullable
      - `email` string, nullable
      - `role` 'Owner' | 'Editor', nullable
  - `sender` object, nullable
    - `name` string, nullable: Sender's name
    - `email` string, nullable: Sender's email
  - `url` string, uri, nullable: Public URL for the version; null when it is a Draft
  - `shortUrl` string, uri, nullable: Shortened URL for the version
  - `editorUrl` string, uri: URL to edit the version in the Storydoc editor
  - `versionUrl` string, uri: URL to the version's details in the Storydoc platform
  - `isPublic` boolean: True when the version never expires
  - `expireAt` string, date-time, nullable: When the link expires
  - `hasAcceptButton` boolean: Whether the version has an Accept button - a proposal the reader can accept. Not accepted yet: true here with a status other than Accepted.
  - `acceptedAt` string, date-time, nullable: When the reader accepted it; null unless Accepted
  - `source` string, nullable: How the version was created, e.g. Manual or API
  - `createdAt` string, date-time
  - `updatedAt` string, date-time
  - `data` object: The version's current variable values - the same object POST /v2/versions takes as `data`. `_optionalContent` holds its show/hide choices (false = hidden).
  - `optionalContent` OptionalEntity[], nullable: Only with `?include=optionalContent`: the version's own optional content (see OptionalEntity); null when it could not be read
    - `id` string: Entity id, the key in `data._optionalContent`
    - `name` string, nullable: Name the author gave it
    - `type` 'slide' | 'combo' | 'set' | 'element'
    - `slideIndex` integer: 1-based position of the slide it is on
    - `slideTitle` string, nullable
    - `mode` 'simple' | 'conditional': `simple`: shown or hidden per version. `conditional`: follows `rule`, cannot be toggled
    - `toggleable` boolean: True when `data._optionalContent` can show or hide it
    - `rule` object: Conditional entities only: shown or hidden by a variable's value
      - `variable` string
      - `operator` 'equals' | 'not-equals'
      - `value` string
      - `then` 'show' | 'hide'

## Other responses

- `403`: Authentication failed, the key is scoped to a different story, the member who created the key has left the organization, or a legacy org token has been replaced by a newer one
- `404`: Version not found
- `429`: Too many requests
- `500`: Internal server error

---

[API](https://skmtc.dev/storydoc/apis/storydoc-api-v2.md) - [All operations](https://skmtc.dev/storydoc/apis/storydoc-api-v2/llms.txt) - [OpenAPI document](https://skmtc.dev/storydoc/apis/storydoc-api-v2/revisions/366e7d124e9e?raw)
