> ## Documentation Index
> Fetch the complete documentation index at: https://docs.searchcompany.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Team Members

> Get all team members and pending invitations for an organization

Returns all active team members and pending invitations for the Settings - Team page.

<Note>
  This endpoint uses intelligent caching. Member data is cached for 5 minutes
  and automatically refreshed via Clerk webhooks when members join/leave. Most
  requests respond in \~10ms using cached data.
</Note>

## Path Parameters

<ParamField path="org_id" type="string" required>
  The Clerk organization ID
</ParamField>

## Query Parameters

<ParamField query="limit" type="integer" default="100">
  Maximum number of members to return
</ParamField>

<ParamField query="offset" type="integer" default="0">
  Pagination offset
</ParamField>

<ParamField query="include_pending" type="boolean" default="true">
  Whether to include pending invitations
</ParamField>

<ParamField query="force_refresh" type="boolean" default="false">
  Bypass cache and fetch fresh data from Clerk API. Use sparingly as this is
  slower (\~200ms vs \~10ms).
</ParamField>

## Response

<ResponseField name="organization_id" type="string">
  The organization ID
</ResponseField>

<ResponseField name="from_cache" type="boolean">
  Whether the data was served from cache (true) or fetched fresh from Clerk
  (false)
</ResponseField>

<ResponseField name="members" type="array">
  List of active team members
</ResponseField>

<ResponseField name="total_members" type="integer">
  Total count of active members
</ResponseField>

<ResponseField name="pending_invitations" type="array">
  List of pending invitations (if `include_pending=true`)
</ResponseField>

### Member Object

| Field           | Type    | Description                     |
| --------------- | ------- | ------------------------------- |
| `membership_id` | string  | Membership ID                   |
| `user_id`       | string  | Clerk user ID                   |
| `first_name`    | string  | User's first name               |
| `last_name`     | string  | User's last name                |
| `email`         | string  | User's email address            |
| `image_url`     | string  | URL to user's profile image     |
| `role`          | string  | `"org:admin"` or `"org:member"` |
| `created_at`    | integer | Unix timestamp when user joined |

### Pending Invitation Object

| Field        | Type    | Description                         |
| ------------ | ------- | ----------------------------------- |
| `id`         | string  | Invitation ID                       |
| `email`      | string  | Invited email address               |
| `role`       | string  | Role they'll have when they join    |
| `status`     | string  | `"pending"`                         |
| `created_at` | integer | Unix timestamp when invitation sent |

<RequestExample>
  ```bash cURL theme={null}
  curl "https://searchcompany-main.up.railway.app/api/organization/org_2abc123/members" \
    -H "Authorization: Bearer <token>"
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "organization_id": "org_2abc123",
    "from_cache": true,
    "members": [
      {
        "membership_id": "orgmem_xyz789",
        "user_id": "user_abc123",
        "first_name": "Colin",
        "last_name": "Snyder",
        "email": "colin@colinsnyder.com",
        "image_url": "https://img.clerk.com/...",
        "role": "org:admin",
        "created_at": 1702234567
      },
      {
        "membership_id": "orgmem_def456",
        "user_id": "user_def456",
        "first_name": "Jane",
        "last_name": "Doe",
        "email": "jane@company.com",
        "image_url": "https://img.clerk.com/...",
        "role": "org:member",
        "created_at": 1702345678
      }
    ],
    "total_members": 2,
    "pending_invitations": [
      {
        "id": "inv_pending123",
        "email": "newteammate@company.com",
        "role": "org:member",
        "status": "pending",
        "created_at": 1702456789
      }
    ]
  }
  ```
</ResponseExample>

## Performance

This endpoint uses smart caching for optimal performance:

* **Cache Hit** (\~95% of requests): \~10-20ms response time
* **Cache Miss**: \~200-300ms (fetches from Clerk, then caches)
* **Cache Duration**: 5 minutes
* **Auto-Refresh**: Clerk webhooks update cache in real-time when members change

Use `force_refresh=true` only when you need guaranteed fresh data (e.g., immediately after bulk operations).

## Notes

* Requires authentication with a valid Clerk JWT token
* User must be a member of the organization to view members
* Pending invitations are only returned if `include_pending=true`
* Member data is automatically synced via [Clerk webhook](/api-reference/endpoint/webhooks/clerk-webhook)
