---
title: "List Organization Members"
method: GET
path: "/api/me/organizations/{tenant_id}/members"
tags: ["me"]
---

# List Organization Members

`GET /api/me/organizations/{tenant_id}/members`

## Request

- Base URL: `https://app.thinqos.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.thinqos.com/api/me/organizations/{tenant_id}/members`
- Auth: none declared

Who the caller may seat in a chat belonging to this organization.

Backs the new-chat people-picker's filter. That filter is a COURTESY, not a
boundary: ``ChatService.create_chat`` refuses a non-member regardless, and it
has to, because a picker is not an authorization gate. Without the filter the
ordinary flow is to pick a colleague, press Create, and get a 403 naming a
UUID.

The roster comes from ``org_admitted_identities``, one bounded query whose
row count is the ORGANIZATION's size. It is deliberately not a scan of every
active identity with a membership check per row, which is what shipped first
and is O(identities) queries on an endpoint a picker opens.

403 for a non-member caller. Membership of an organization is not public: the
roster names who works there, and handing it to anyone who can guess a tenant
id would make this endpoint a directory.

## Path parameters

- `tenant_id` string, uuid, required

## Headers

- `x-impersonate-identity-id` string, nullable

## Response `200`

Successful Response

- OrganizationMemberOut[]
  - `identity_id` string, uuid, required
  - `display_name` string, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/thinqos/apis/thinqos-api.md) · [All operations](https://skmtc.dev/thinqos/apis/thinqos-api/llms.txt) · [OpenAPI document](https://skmtc.dev/thinqos/apis/thinqos-api/revisions/5387b4ded614?raw)
