Skip to content
Ordinal
Esc
↑↓navigate↵open⌘Jpreview

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.

GET/posts/{id}/versions
Authorization
AuthorizationBearer token · headerrequired

API key authentication. Generate an API key from your workspace settings.

Path parameters
idstring<uuid>required

Post ID (UUID)

Query parameters
channelstring

Optional. Only return versions for this channel. Omit to return every channel that has an editor. Required when cursor is set.

Allowed:LinkedInFacebookInstagramTikTokDiscordSlackWebflowYouTubeShorts
limitinteger

Max versions returned per channel, newest first. Default 15, max 100.

min 1 · max 100 · default: 15
cursorstring

Pagination cursor from a previous response's channels[].nextCursor. Requires channel — each channel paginates independently.

Responses
200

Version history grouped by channel

postIdstring<uuid>required
channelsobject[]required
Show properties
Array of object
channelstringrequired
Allowed:LinkedInFacebookInstagramTikTokDiscordSlackWebflowYouTubeShorts
versionsobject[]required
Show properties
Array of object
idstringrequired

Version ID. Pass to the get version content endpoint.

createdAtstring<date-time>required
authorsobject[]required

Workspace users who edited the draft in this version. Empty when Ordinal can't resolve the editor.

Show properties
Array of object
idstringrequired
firstNamestring | nullrequired
lastNamestring | nullrequired
emailstring | nullrequired
nextCursorstring | nullrequired

Pass as cursor (with the same channel) to fetch the next page. Null when there are no more versions.

errorstring

Present only if this channel's version history failed to load. versions will be empty.

400

Bad Request - Invalid input parameters

codestring
messagestring
dataobject
Show properties
errorsobject
401

Unauthorized - Missing or invalid API key

codestring
messagestring
404

Not Found - Resource does not exist

codestring
messagestring
Try it
Server
Authorization
Parameters
Request
curl -X GET 'https://app.tryordinal.com/api/v1/posts/497f6eca-6276-4993-bfeb-53cbbbba6f08/versions' \
  -H 'Authorization: Bearer YOUR_TOKEN'
Response
{
  "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=="
    }
  ]
}