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

List workspace approvals

List all approval requests across the workspace in one paginated stream. Use for incremental sync by external integrations instead of polling each post individually. Supports keyset pagination and filters by status, post, approver, requester, and date range. Approvals on archived posts are included; filter client-side with post.archivedAt. Soft-deleted approvals are omitted from results.

GET/approvals
Authorization
AuthorizationBearer token · headerrequired

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

Query parameters
limitinteger

Maximum number of approvals to return (1-100)

min 1 · max 100 · default: 20
cursorstring

Pagination cursor from the previous response's nextCursor. Format is timestampMs:approvalId. When paginating, pass the same sortBy and sortOrder as the initial request.

sortBystring

Field to sort results by. Use updatedAt for incremental sync so newly-updated approvals stream in order.

default: "createdAt"
Allowed:createdAtupdatedAt
sortOrderstring

Sort order. Use asc with sortBy=updatedAt for incremental sync.

default: "desc"
Allowed:ascdesc
updatedAtMinstring<date-time>

Return approvals updated at or after this time. Pair with sortBy=updatedAt and sortOrder=asc for incremental sync from a saved checkpoint.

updatedAtMaxstring<date-time>

Return approvals updated at or before this time.

createdAtMinstring<date-time>

Return approvals created at or after this time.

createdAtMaxstring<date-time>

Return approvals created at or before this time.

statusesstring[]

Filter by approval statuses. Repeat the parameter to match any of multiple values.

postIdsstring<uuid>[]

Filter by post IDs. Repeat the parameter to match any of multiple values.

approverIdsstring<uuid>[]

Filter by approver user IDs. Repeat the parameter to match any of multiple values.

requestedByIdsstring<uuid>[]

Filter by IDs of users who requested the approval. Repeat the parameter to match any of multiple values.

Responses
200

Paginated list of workspace approvals

approvalsWorkspaceApproval[]
Show properties
Array of WorkspaceApproval
idstring<uuid>
statusstring
Allowed:RequestedApproved
isBlockingboolean

Whether the post is blocked from publishing until this approval is granted

messagestring | null
dueDatestring<date-time> | null
approvedAtstring<date-time> | null
createdAtstring<date-time>
updatedAtstring<date-time>

Last time the approval changed. Use with updatedAtMin and sortBy=updatedAt for incremental sync.

postIdstring<uuid>
approverApprovalUser
Show properties
idstring<uuid>
emailstring<email>
firstNamestring | null
lastNamestring | null
createdAtstring<date-time>
requestedByApprovalUser
Show properties
idstring<uuid>
emailstring<email>
firstNamestring | null
lastNamestring | null
createdAtstring<date-time>
postobject

Summary of the post this approval belongs to

Show properties
idstring<uuid>
urlstring<uri>

Deep link to the post in the Ordinal dashboard

titlestring
statusPostStatus
Allowed:TentativeToDoInProgressForReviewBlockedFinalizedScheduledPosted
channelsstring[]

Channels the post targets (for example LinkedIn, Twitter)

publishDatestring | null

Scheduled publish date (YYYY-MM-DD) in the workspace timezone, when set

publishAtstring<date-time> | null

Scheduled publish timestamp when a specific time is set

isIdeaboolean

Whether the post is an idea rather than a scheduled or published post

archivedAtstring<date-time> | null

When the post was archived, if applicable

nextCursorstring | null

Cursor for the next page, or null when there are no more results

hasMoreboolean

Whether more approvals are available

400

Bad Request - Invalid input parameters

codestring
messagestring
dataobject
Show properties
errorsobject
401

Unauthorized - Missing or invalid API key

codestring
messagestring
403

Forbidden - Insufficient permissions

codestring
messagestring
Try it
Server
Authorization
Parameters
Request
curl -X GET 'https://app.tryordinal.com/api/v1/approvals' \
  -H 'Authorization: Bearer YOUR_TOKEN'
Response
{
  "approvals": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440200",
      "status": "Requested",
      "isBlocking": true,
      "message": "Please review the messaging before we publish",
      "dueDate": "2026-01-14T17:00:00.000Z",
      "approvedAt": null,
      "createdAt": "2026-01-05T10:30:00.000Z",
      "updatedAt": "2026-01-05T10:30:00.000Z",
      "postId": "550e8400-e29b-41d4-a716-446655440000",
      "approver": {
        "id": "550e8400-e29b-41d4-a716-446655440011",
        "email": "jane.smith@example.com",
        "firstName": "Jane",
        "lastName": "Smith",
        "createdAt": "2025-01-01T00:00:00.000Z"
      },
      "requestedBy": {
        "id": "550e8400-e29b-41d4-a716-446655440010",
        "email": "john.doe@example.com",
        "firstName": "John",
        "lastName": "Doe",
        "createdAt": "2025-01-01T00:00:00.000Z"
      },
      "post": {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "url": "https://app.tryordinal.com/your-workspace/posts/550e8400-e29b-41d4-a716-446655440000",
        "title": "Launch announcement",
        "status": "ForReview",
        "channels": [
          "LinkedIn",
          "Twitter"
        ],
        "publishDate": "2026-01-15",
        "publishAt": "2026-01-15T14:00:00.000Z",
        "isIdea": false,
        "archivedAt": null
      }
    }
  ],
  "nextCursor": "1736074200000:550e8400-e29b-41d4-a716-446655440200",
  "hasMore": true
}