---
title: "List workspace members and pending invites"
method: GET
path: "/api/v1/workspaces/{workspaceId}/members"
tags: ["Team"]
---

# List workspace members and pending invites

`GET /api/v1/workspaces/{workspaceId}/members`

## Request

- Base URL: `https://www.poster.ly`
- URL: `https://www.poster.ly/api/v1/workspaces/{workspaceId}/members`
- Auth: HTTP bearer

Any active member of the workspace (viewer and up). Brand-limited callers only see brand ids they can access. Never returns invite links or tokens.
Access: an API key that a person granted "Manage team" in /dashboard/api (members:read and members:write). Browser sessions are refused with `api_key_required`; the scopes can never be requested through POST /api/v1/api-keys. ChatGPT, Claude and other OAuth connections hold both scopes implicitly (when their grant includes accounts:write) but may call this endpoint only while the person is an owner or admin of the workspace; otherwise 403 `team_management_requires_admin`. A key bound to another workspace, or a caller who is not a member, gets 404; a caller whose seat was removed gets 403 `workspace_access_revoked`.
Scope: members:read.

## Path parameters

- `workspaceId` string, uuid, required

## Response `200`

Members, pending invites and seat usage.

- WorkspaceMembersResponse
  - `workspace_id` string, uuid
  - `members` WorkspaceMember[]
    - `id` string, uuid: Member ID (use in /members/{memberId}).
    - `user_id` string, nullable
    - `email` string, nullable
    - `name` string, nullable
    - `role` 'owner' | 'admin' | 'publisher' | 'editor' | 'viewer'
    - `status` 'active' | 'invited' | 'removed'
    - `brand_ids` string[]: Brands this seat is limited to. Empty means every brand. Missing when a brand-limited caller cannot see this seat assignment.
    - `api_access` boolean: Whether this teammate can use the workspace API plan from their own API keys and AI apps. Off by default; always true for the owner, whose own add-on decides.
    - `api_usage` object: Owners and admins only: live API keys and AI app connections that can act in this workspace for this member.
      - `key_count` integer
      - `last_used_at` string, date-time, nullable
      - `connected_apps` string[]
    - `joined_at` string, date-time, nullable
    - `created_at` string, date-time, nullable
  - `invites` WorkspaceInvite[]
    - `id` string, uuid: Invite ID (use in /invites/{inviteId}).
    - `email` string
    - `role` 'admin' | 'publisher' | 'editor' | 'viewer'
    - `status` 'pending' | 'revoked' | 'accepted' | 'expired'
    - `brand_ids` string[]
    - `expires_at` string, date-time, nullable
    - `created_at` string, date-time, nullable
  - `usage` object
    - `active_members` integer
    - `pending_invites` integer
    - `seats_used` integer: Members plus pending invites. Pending invites hold a seat until accepted, expired or revoked.

## Other responses

- `401`: Invalid or missing API key
- `403`: Request is authenticated but not allowed
- `404`: Resource not found
- `429`: Too many requests

---

[API](https://skmtc.dev/poster/apis/posterly-api.md) · [All operations](https://skmtc.dev/poster/apis/posterly-api/llms.txt) · [OpenAPI document](https://skmtc.dev/poster/apis/posterly-api/revisions/60be02a61f95?raw)
