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

# List the organization's members

> Same roster and response as `GET /marketplace/members`: every member of the organization that installed your app in one response, not a page. `userId` is the Max AI user id in exactly the form the App Bridge token's `sub` claim carries (a raw uuid on every API version), or null for a member whose Max AI user record has not been created yet. Requires the `read:members` scope.



## OpenAPI

````yaml /openapi-v1.json get /org/members
openapi: 3.0.0
info:
  title: Max AI Public API
  description: API for third-party marketplace apps
  version: '1.0'
  contact: {}
servers:
  - url: https://api.maxcare.ai/v1
security: []
tags: []
paths:
  /org/members:
    get:
      tags:
        - Organization
      summary: List the organization's members
      description: >-
        Same roster and response as `GET /marketplace/members`: every member of
        the organization that installed your app in one response, not a page.
        `userId` is the Max AI user id in exactly the form the App Bridge
        token's `sub` claim carries (a raw uuid on every API version), or null
        for a member whose Max AI user record has not been created yet. Requires
        the `read:members` scope.
      operationId: OrgMembersPublicController_listMembers
      parameters:
        - name: X-Organization-Id
          in: header
          required: true
          schema:
            type: string
          description: Target clinic organization ID
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListMembersSuccessResponse'
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiUnauthorizedResponse'
        '403':
          description: Insufficient scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiForbiddenResponse'
        '404':
          description: Resource not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiNotFoundResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiRateLimitResponse'
      security:
        - api-key: []
components:
  schemas:
    ListMembersSuccessResponse:
      type: object
      properties:
        code:
          type: string
          description: Response code
          example: success
        data:
          $ref: '#/components/schemas/ListMembersDataResponse'
      required:
        - code
        - data
    PublicApiUnauthorizedResponse:
      type: object
      properties:
        code:
          type: string
          description: Error code
          example: unauthorized
        message:
          type: string
          description: Human-readable error message
          example: Invalid or missing API key
        trace_id:
          type: string
          description: Trace ID for debugging
          example: 550e8400-e29b-41d4-a716-446655440000
      required:
        - code
        - message
        - trace_id
    PublicApiForbiddenResponse:
      type: object
      properties:
        code:
          type: string
          description: Error code
          example: forbidden
        message:
          type: string
          description: Human-readable error message
          example: Insufficient scope
        trace_id:
          type: string
          description: Trace ID for debugging
          example: 550e8400-e29b-41d4-a716-446655440000
      required:
        - code
        - message
        - trace_id
    PublicApiNotFoundResponse:
      type: object
      properties:
        code:
          type: string
          description: Error code
          example: not_found
        message:
          type: string
          description: Human-readable error message
          example: Resource not found
        trace_id:
          type: string
          description: Trace ID for debugging
          example: 550e8400-e29b-41d4-a716-446655440000
      required:
        - code
        - message
        - trace_id
    PublicApiRateLimitResponse:
      type: object
      properties:
        code:
          type: string
          description: Error code
          example: rate_limit_exceeded
        message:
          type: string
          description: Human-readable error message
          example: Rate limit exceeded. Maximum 1000 requests per 60 seconds.
        trace_id:
          type: string
          description: Trace ID for debugging
          example: 550e8400-e29b-41d4-a716-446655440000
      required:
        - code
        - message
        - trace_id
    ListMembersDataResponse:
      type: object
      properties:
        members:
          type: array
          items:
            $ref: '#/components/schemas/ExternalAppMemberResponse'
      required:
        - members
    ExternalAppMemberResponse:
      type: object
      properties:
        userId:
          type: string
          description: >-
            Max AI user id, in exactly the form the App Bridge token's `sub`
            claim carries: a raw, dashed uuid (`scraping.users.id`) on every API
            version. Never the `usr_…` readable form and never a Clerk id — join
            this against a verified `sub`. Null when the person is a member in
            Clerk but their Max AI user record has not been created yet (it
            follows Clerk within seconds to minutes); they are still listed so
            the roster is complete. Such a person cannot yet open your app,
            because a token cannot be minted for them either. Key on
            `clerkUserId` if you need a stable handle before `userId` appears.
          nullable: true
          example: 5f0c8a2e-3b1d-4c6e-9a7f-2d8b1e4c6a90
        clerkUserId:
          type: string
          description: Clerk user id. Carries Clerk's `user_` prefix on every version.
          example: user_36uZihkXH7t0iB5RWRTbhPh1N2W
        email:
          type: string
          description: >-
            The member's primary email address. Null when none is known — a
            member who signs in with a phone number or username and has no email
            on record.
          nullable: true
          example: jordan@downtowndermatology.com
        firstName:
          type: string
          nullable: true
          example: Jordan
        lastName:
          type: string
          nullable: true
          example: Rivera
        imageUrl:
          type: string
          description: Profile image URL
          nullable: true
          example: https://img.clerk.com/eyJ0eXBlIjoicHJveHkifQ
        role:
          type: string
          description: >-
            Organization role, verbatim as Clerk spells it (`org:admin`,
            `org:member`, or a custom role key). Open vocabulary — the same
            contract as the App Bridge token's `org_role` claim. Compare exact
            strings; do not assume the list is closed.
          example: org:admin
        hasAppAccess:
          type: boolean
          description: >-
            Whether an organization admin has granted this member access to your
            app (Store › Manage access). A member without it cannot open the
            app.
          example: true
      required:
        - userId
        - clerkUserId
        - email
        - firstName
        - lastName
        - imageUrl
        - role
        - hasAppAccess
  securitySchemes:
    api-key:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Marketplace API key

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.