List versions

Add MCP server to your AI tool

Allow AI tools and LLMs to interact with the API documentation portal through MCP.

MCP server URL

https://docs.storydoc.com/mcp

Standard setup for AI tools providing an mcp.json file

mcp.json
{
  "Storydoc API MCP server": {
    "url": "https://docs.storydoc.com/mcp"
  }
}

Close
GET /v2/versions

Lists the versions in your organization, newest first - the same versions the Versions tab shows to the person who created the API key: versions of Live stories in folders they can open (or in no folder), with each story's primary version left out. An administrator's key sees every folder. Every row carries the version's status (Live, Expired, Draft or Accepted, derived exactly as in the Versions tab), its story, the story's folder and the sender. Use it to find versions nobody has opened yet, or poll it with dateField=updatedAt&dateFrom=<last sync> to pick up changes (edits and acceptances update updatedAt; expiry does not - it follows from expireAt). A key scoped to one story only ever lists that story's versions. Variable values are not included; fetch one version with GET /v2/versions/{versionId} for those.

Query parameters

  • storyId string

    Only versions created from this story (template). Must be a Live story.

  • folderId string

    Only versions whose story is in this folder or any folder under it - the Versions tab's Location filter. A version sits in its story's folder. Folder ids come from GET /v2/folders. 404 if the folder does not exist.

  • senderEmail string(email)

    Only versions sent by this user of your organization

  • title string

    Only versions whose title contains this text (case-insensitive, at most 200 characters)

  • status string

    Comma-separated list of statuses to include

  • hasAcceptButton boolean

    true: only proposals - versions with an Accept button. false: only versions without one. Combine with status for open proposals: hasAcceptButton=true&status=Live.

  • dateField string

    Which date dateFrom/dateTo apply to

    Values are createdAt or updatedAt. Default value is createdAt.

  • dateFrom string

    Inclusive start (ISO 8601, UTC)

  • dateTo string

    Inclusive end (ISO 8601, UTC). A date without a time covers that whole day.

  • page integer

    1-based page number

    Minimum value is 1. Default value is 1.

  • pageSize integer

    Versions per page

    Minimum value is 1, maximum value is 100. Default value is 25.

Responses

  • 200 application/json

    A page of versions

    Hide response attributes Show response attributes object
    • data array[object]
      Hide data attributes Show data attributes object
      • id string

        Version ID

      • title string | null

        Version title

      • status string

        Accepted: the reader accepted it. Draft: unpublished, the link is off. Expired: past its expiry date. Live: otherwise.

        Values are Live, Expired, Draft, or Accepted.

      • storyId string

        The story (template) the version was created from

      • storyTitle string | null

        The story's title; null for a standalone version

      • folder object | null

        The folder the story is filed in, and who can open it; null at the root

        Hide folder attributes Show folder attributes object | null
        • id string
        • name string
        • path array[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 array[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.

          Hide members attributes Show members attributes object
          • name string | null
          • email string | null
          • role string | null

            Values are Owner or Editor.

      • sender object | null
        Hide sender attributes Show sender attributes object | null
        • name string | null

          Sender's name

        • email string | null

          Sender's email

      • url string(uri) | null

        Public URL for the version; null when it is a Draft

      • shortUrl string(uri) | null

        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) | null

        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) | null

        When the reader accepted it; null unless Accepted

      • source string | null

        How the version was created, e.g. Manual or API

      • createdAt string(date-time)
      • updatedAt string(date-time)
    • pagination object
      Hide pagination attributes Show pagination attributes object
      • page integer
      • pageSize integer
      • hasMore boolean

        Whether another page follows

  • 400 application/json

    Invalid query parameter

    Hide response attribute Show response attribute object
    • error string
  • 403 application/json

    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

    Hide response attributes Show response attributes object
    • error string
    • code string

      VARIABLES_PLAN_REQUIRED when the story uses variables above the account's plan; absent for authentication failures.

    • requiredPlan string

      With VARIABLES_PLAN_REQUIRED: the lowest plan that covers every blocked variable.

      Values are pro or team.

    • variables array[object]

      With VARIABLES_PLAN_REQUIRED: the blocked variables and the plan each needs.

      Hide variables attributes Show variables attributes object
      • name string
      • requiredPlan string
  • 404 application/json

    senderEmail is not a user of your organization, storyId is not a Live story, or folderId does not exist

    Hide response attribute Show response attribute object
    • error string
  • 429 application/json

    Too many requests

    Hide response attribute Show response attribute object
    • error string
  • 500 application/json

    Internal server error

    Hide response attributes Show response attributes object
    • error string
    • errorId string
GET /v2/versions
curl \
 --request GET 'https://api.storydoc.com/v2/versions' \
 --header "Authorization: Bearer $ACCESS_TOKEN"
Response examples (200)
{
  "data": [
    {
      "id": "61b1f40a3a86b7a96d0d8ccc",
      "title": "ACME - Proposal",
      "status": "Live",
      "storyId": "61b1e50223b713000a41ca74",
      "storyTitle": "Proposal template",
      "folder": {
        "id": "string",
        "name": "Enterprise",
        "path": [
          "Sales",
          "Enterprise"
        ],
        "sharedWithEveryone": true,
        "members": [
          {
            "name": "Dana Lee",
            "email": "dana@company.com",
            "role": "Owner"
          }
        ]
      },
      "sender": {
        "name": "Dana Lee",
        "email": "dana@company.com"
      },
      "url": "https://example.com",
      "shortUrl": "https://view.storydoc.com/4GdDGt",
      "editorUrl": "https://example.com",
      "versionUrl": "https://example.com",
      "isPublic": true,
      "expireAt": "2026-05-04T09:42:00Z",
      "hasAcceptButton": true,
      "acceptedAt": "2026-05-04T09:42:00Z",
      "source": "string",
      "createdAt": "2026-05-04T09:42:00Z",
      "updatedAt": "2026-05-04T09:42:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 25,
    "hasMore": true
  }
}
Response examples (400)
{
  "error": "status must be one or more of Live, Expired, Draft, Accepted"
}
Response examples (403)
{
  "error": "Access denied"
}
Response examples (404)
{
  "error": "senderEmail email@domain.com not found in this organization"
}
Response examples (429)
{
  "error": "Too many requests"
}
Response examples (500)
{
  "error": "Error occured",
  "errorId": "550e8400-e29b-41d4-a716-446655440000"
}