> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tryordinal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List post draft versions

> List saved draft versions for a post's channel editors, newest first. Each channel with an editor is returned as its own entry with its own `versions` array, `nextCursor`, and optional `error`.

**Pagination:** Each channel paginates independently. To fetch more versions for a channel, call again with `channel` set to that channel and `cursor` set to the `nextCursor` from the previous response. `channel` is required whenever `cursor` is set.

**Errors:** When `channel` is set and that channel has no editor for this post, the endpoint returns `404 NOT_FOUND`. If a single channel's version history fails to load, that channel's entry has an empty `versions` array plus an `error` string — the rest of the response still succeeds.

Use the returned version IDs with `GET /posts/{id}/channels/{channel}/versions/{versionId}` to read the copy of a specific version.



## OpenAPI

````yaml /api/openapi.json get /posts/{id}/versions
openapi: 3.1.0
info:
  title: Ordinal API
  version: 1.0.0
  description: API to create and manage Ordinal workspaces, posts, profiles, and analytics
servers:
  - url: https://app.tryordinal.com/api/v1
    description: Production server
security:
  - bearerAuth: []
tags:
  - name: Analytics
    description: Social media analytics data
  - name: Approvals
    description: Post approval workflows
  - name: Comments
    description: >-
      Post comments for team collaboration. Supports @mentions using the format
      @[Display Name](userId).
  - name: Engagements
    description: Auto-engagements for posts (likes, comments, reposts)
  - name: Invites
    description: Workspace invitations for adding new users
  - name: Labels
    description: Labels for organizing posts
  - name: Instagram
    description: Instagram utilities for location search and tagging
  - name: LinkedIn
    description: LinkedIn utilities for profile lookups, tagging, and mentions
  - name: Posts
    description: Create and manage posts
  - name: Profiles
    description: List connected social profiles
  - name: Slack Boosts
    description: >-
      List connected Slack channels (webhooks), then create and manage slack
      boosts so teams get notified in Slack when posts publish. Requires Slack
      connected with marketing boost channels.
  - name: Subscribers
    description: Post subscribers for notifications
  - name: File Uploads
    description: >-
      Upload files from URLs for use in posts. Supports images (JPEG, PNG, GIF,
      WebP) up to 10 MB and videos (MP4, MOV) up to 350 MB.
  - name: Ideas
    description: >-
      Create and manage content ideas. Ideas are draft posts without scheduled
      dates that can be converted to calendar posts.
  - name: Inline Comments
    description: >-
      Text-anchored comments on specific post content. Read-only API for
      retrieving inline comments across channels.
  - name: Users
    description: Workspace users
  - name: Webhooks
    description: >-
      Create, list, get, update, and delete webhooks to receive real-time event
      notifications
  - name: Workspaces
    description: Workspace information
paths:
  /posts/{id}/versions:
    get:
      tags:
        - Posts
      summary: List post draft versions
      description: >-
        List saved draft versions for a post's channel editors, newest first.
        Each channel with an editor is returned as its own entry with its own
        `versions` array, `nextCursor`, and optional `error`.


        **Pagination:** Each channel paginates independently. To fetch more
        versions for a channel, call again with `channel` set to that channel
        and `cursor` set to the `nextCursor` from the previous response.
        `channel` is required whenever `cursor` is set.


        **Errors:** When `channel` is set and that channel has no editor for
        this post, the endpoint returns `404 NOT_FOUND`. If a single channel's
        version history fails to load, that channel's entry has an empty
        `versions` array plus an `error` string — the rest of the response still
        succeeds.


        Use the returned version IDs with `GET
        /posts/{id}/channels/{channel}/versions/{versionId}` to read the copy of
        a specific version.
      operationId: posts-listVersions
      parameters:
        - name: id
          in: path
          required: true
          description: Post ID (UUID)
          schema:
            type: string
            format: uuid
        - name: channel
          in: query
          required: false
          description: >-
            Optional. Only return versions for this channel. Omit to return
            every channel that has an editor. Required when `cursor` is set.
          schema:
            type: string
            enum:
              - LinkedIn
              - Facebook
              - Instagram
              - TikTok
              - Discord
              - Slack
              - Webflow
              - YouTubeShorts
        - name: limit
          in: query
          required: false
          description: >-
            Max versions returned per channel, newest first. Default 15, max
            100.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 15
        - name: cursor
          in: query
          required: false
          description: >-
            Pagination cursor from a previous response's
            `channels[].nextCursor`. Requires `channel` — each channel paginates
            independently.
          schema:
            type: string
      responses:
        '200':
          description: Version history grouped by channel
          content:
            application/json:
              schema:
                type: object
                properties:
                  postId:
                    type: string
                    format: uuid
                  channels:
                    type: array
                    items:
                      type: object
                      properties:
                        channel:
                          type: string
                          enum:
                            - LinkedIn
                            - Facebook
                            - Instagram
                            - TikTok
                            - Discord
                            - Slack
                            - Webflow
                            - YouTubeShorts
                        versions:
                          type: array
                          items:
                            type: object
                            properties:
                              id:
                                type: string
                                description: >-
                                  Version ID. Pass to the get version content
                                  endpoint.
                              createdAt:
                                type: string
                                format: date-time
                              authors:
                                type: array
                                description: >-
                                  Workspace users who edited the draft in this
                                  version. Empty when Ordinal can't resolve the
                                  editor.
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    firstName:
                                      type: string
                                      nullable: true
                                    lastName:
                                      type: string
                                      nullable: true
                                    email:
                                      type: string
                                      nullable: true
                                  required:
                                    - id
                                    - firstName
                                    - lastName
                                    - email
                            required:
                              - id
                              - createdAt
                              - authors
                        nextCursor:
                          type: string
                          nullable: true
                          description: >-
                            Pass as `cursor` (with the same `channel`) to fetch
                            the next page. Null when there are no more versions.
                        error:
                          type: string
                          description: >-
                            Present only if this channel's version history
                            failed to load. `versions` will be empty.
                      required:
                        - channel
                        - versions
                        - nextCursor
                required:
                  - postId
                  - channels
              example:
                postId: d4f8e2a1-3b7c-4e9d-8f2a-1c5b9e7d3a6f
                channels:
                  - channel: LinkedIn
                    versions:
                      - id: 01HQZ3VXK9E8R4M2N6P7T8W9Y0
                        createdAt: '2026-02-04T14:22:00.000Z'
                        authors:
                          - id: 550e8400-e29b-41d4-a716-446655440001
                            firstName: Jane
                            lastName: Smith
                            email: jane@example.com
                      - id: 01HQZ3T2M4N5P6Q7R8S9T0U1V2
                        createdAt: '2026-02-04T13:58:00.000Z'
                        authors:
                          - id: 550e8400-e29b-41d4-a716-446655440002
                            firstName: John
                            lastName: Doe
                            email: john@example.com
                    nextCursor: eyJvZmZzZXQiOjE1fQ==
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  responses:
    BadRequest:
      description: Bad Request - Invalid input parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ValidationError'
          example:
            code: BAD_REQUEST
            message: Bad Request
            data:
              errors:
                publishAt:
                  - Invalid date format
                status:
                  - Invalid enum value
    Unauthorized:
      description: Unauthorized - Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: UNAUTHORIZED
            message: Invalid or unauthorized API key
    NotFound:
      description: Not Found - Resource does not exist
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: NOT_FOUND
            message: Post not found or does not belong to this workspace
  schemas:
    ValidationError:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
        data:
          type: object
          properties:
            errors:
              type: object
              additionalProperties:
                type: array
                items:
                  type: string
    Error:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key authentication. Generate an API key from your workspace
        settings.

````