---
title: "List workspace approvals"
method: GET
path: "/approvals"
tags: ["Approvals"]
---

# List workspace approvals

`GET /approvals`

## Request

- Base URL: `https://app.tryordinal.com/api/v1`
- URL: `https://app.tryordinal.com/api/v1/approvals`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/tryordinal/apis/ordinal-api/docs/approvals/get.ts> (a function with typed inputs; its response is checked against the schema)

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.

## Query parameters

- `limit` integer
- `cursor` string
- `sortBy` 'createdAt' | 'updatedAt'
- `sortOrder` 'asc' | 'desc'
- `updatedAtMin` string, date-time
- `updatedAtMax` string, date-time
- `createdAtMin` string, date-time
- `createdAtMax` string, date-time
- `statuses` string[]
- `postIds` string[]
- `approverIds` string[]
- `requestedByIds` string[]

## Response `200`

Paginated list of workspace approvals

- object
  - `approvals` WorkspaceApproval[]
    - `id` string, uuid
    - `status` 'Requested' | 'Approved'
    - `isBlocking` boolean: Whether the post is blocked from publishing until this approval is granted
    - `message` string, nullable
    - `dueDate` string, date-time, nullable
    - `approvedAt` string, date-time, nullable
    - `createdAt` string, date-time
    - `updatedAt` string, date-time: Last time the approval changed. Use with `updatedAtMin` and `sortBy=updatedAt` for incremental sync.
    - `postId` string, uuid
    - `approver` ApprovalUser
      - `id` string, uuid
      - `email` string, email
      - `firstName` string, nullable
      - `lastName` string, nullable
      - `createdAt` string, date-time
    - `requestedBy` ApprovalUser
      - `id` string, uuid
      - `email` string, email
      - `firstName` string, nullable
      - `lastName` string, nullable
      - `createdAt` string, date-time
    - `post` object: Summary of the post this approval belongs to
      - `id` string, uuid
      - `url` string, uri: Deep link to the post in the Ordinal dashboard
      - `title` string
      - `status` 'Tentative' | 'ToDo' | 'InProgress' | 'ForReview' | 'Blocked' | 'Finalized' | 'Scheduled' | 'Posted'
      - `channels` string[]: Channels the post targets (for example `LinkedIn`, `Twitter`)
      - `publishDate` string, nullable: Scheduled publish date (`YYYY-MM-DD`) in the workspace timezone, when set
      - `publishAt` string, date-time, nullable: Scheduled publish timestamp when a specific time is set
      - `isIdea` boolean: Whether the post is an idea rather than a scheduled or published post
      - `archivedAt` string, date-time, nullable: When the post was archived, if applicable
  - `nextCursor` string, nullable: Cursor for the next page, or `null` when there are no more results
  - `hasMore` boolean: Whether more approvals are available

## Other responses

- `400`: Bad Request - Invalid input parameters
- `401`: Unauthorized - Missing or invalid API key
- `403`: Forbidden - Insufficient permissions

## Changes

- **2026-09-12** `7b41305b8293`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/tryordinal/apis/ordinal-api/changes/approvals/get.md)

---

[API](https://skmtc.dev/tryordinal/apis/ordinal-api.md) - [All operations](https://skmtc.dev/tryordinal/apis/ordinal-api/llms.txt) - [OpenAPI document](https://skmtc.dev/tryordinal/apis/ordinal-api/revisions/130324ebc97a?raw)
