---
title: "/members"
method: GET
path: "/v1/members"
tags: ["Members"]
---

# /members

`GET /v1/members`

## Request

- Base URL: `api.air.inc` (relative, and the document’s source URL is not known)
- URL: `api.air.inc/v1/members`
- Auth: one of:
  - API key in header `x-api-key` and API key in header `x-air-workspace-id`
  - HTTP bearer and API key in header `x-air-workspace-id`
- TypeScript: <https://skmtc.dev/air/apis/air-api/docs/v1/members/get.ts> (a function with typed inputs; its response is checked against the schema)

List people in the workspace.

`type` chooses who is included:

- `member` — workspace members. This is the default.
- `guest` — board guests.
- `libraryMember` — people who belong to a library and are not
  workspace members.

`email` without `type` searches every type. `email` with `type`
searches only that type. An unknown email is `{ "data": [], "total": 0 }`,
not 404.

`firstJoinedAt` is the first time that person joined, not the latest.
A member who leaves and rejoins keeps the original value. It is the
stored Postgres timestamp text, not an ISO 8601 string like other
timestamps in this API: a space between date and time, up to 6
fraction digits with trailing zeros dropped, and a UTC offset
(currently `+00`). `2024-03-01 12:00:00.123456+00`,
`2024-03-01 12:00:00.12+00`, and `2024-03-01 12:00:00+00` are all
possible. Don't parse a fixed width.

`id` is the account id. It is the same id as `author.id` on a comment
written by a workspace account, and the same id as `mentions[].id` on
a comment and `mentions[].accountId` when writing one.

Any workspace member can list every type. Board guests and
library-only members cannot call this route.

`members.read` is its own scope. `workspace.read` does not grant it.

## Query parameters

- `type` 'member' | 'guest' | 'libraryMember'
- `email` string
- `search` string
- `limit` string
- `cursor` string

## Response `200`

Members listed

- MemberList
  - `data` Member[], required
    - `id` string, uuid, required: Account id.
    - `type` 'member' | 'guest' | 'libraryMember', required
    - `displayName` string, nullable, required
    - `firstName` string, nullable, required
    - `lastName` string, nullable, required
    - `email` string, required
    - `firstJoinedAt` string, required: The first time this person joined. A rejoin does not change it. The stored Postgres timestamp text, not ISO 8601: up to 6 fraction digits with trailing zeros dropped, and a UTC offset (currently `+00`).
    - `avatar` string: Present when the person has an avatar URL.
  - `pagination` CursorPage, required
    - `hasMore` boolean, required
    - `cursor` string, nullable, required: Present when `hasMore` is true. Send it as the next `cursor`.
  - `total` integer, required

## Other responses

- `400`: Invalid type, email, search, limit, or cursor
- `403`: Board guests and library-only members cannot list members

## Changes

- **2026-11-03** `8e6005b272a1`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/air/apis/air-api/changes/v1/members/get.md)

---

[API](https://skmtc.dev/air/apis/air-api.md) - [All operations](https://skmtc.dev/air/apis/air-api/llms.txt) - [OpenAPI document](https://skmtc.dev/air/apis/air-api/revisions/8e6005b272a1?raw)
