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

# team.user.detail

> Looks up a single team member by `email` or `team_user_id`. When both are supplied, `team_user_id` wins. The response always expands `delegated_profiles[]` for users that have profiles delegated to them.

<sup>Questions or issues? Contact us at [api-support@manus.ai](mailto:api-support@manus.ai).</sup>

<Tip>
  **Identifier:** Provide either `email` or `team_user_id`. When both are supplied, `team_user_id` wins.

  **Use `team_user_id` for delegated profiles:** After delegation a profile's email is rewritten to `delegate-<id>@manus.im` — the original is preserved in `original_email` but the `email` field no longer matches what your IDP knows about. Look up by `team_user_id` to avoid surprises.

  **Delegation expansion:** Unlike [team.user.list](/enterprise/v2/team.user.list), this endpoint always populates `delegated_profiles[]` for users that have profiles delegated to them.

  **Protocols:** Also callable via Connect RPC. See [Protocols](/enterprise/v2/protocols).
</Tip>


## OpenAPI

````yaml GET /v2/team.user.detail
openapi: 3.1.0
info:
  title: Manus Team User Management OpenAPI v2
  description: >-
    API for enterprise tenant administrators to manage team members
    programmatically (SailPoint, Okta, custom IDP integrations). All responses
    are wrapped with `{"ok": true, "request_id": "...", ...}` for success and
    `{"ok": false, "request_id": "...", "error": {"code": "...", "message":
    "..."}}` for errors. Every operation is callable via REST (paths below) or
    via Connect RPC at `/team.v2.TeamUserManagementApiV2Service/<Method>`.
  version: 2.0.0
servers:
  - url: https://api.manus.im
security:
  - ApiKeyAuth: []
paths:
  /v2/team.user.detail:
    get:
      summary: GetUser
      description: >-
        Looks up a single team member by `email` or `team_user_id`. When both
        are supplied, `team_user_id` wins. The response always expands
        `delegated_profiles[]` for users that have profiles delegated to them.
      operationId: team.v2.TeamUserManagementApiV2Service.GetUser
      parameters:
        - name: email
          in: query
          schema:
            type: string
            format: email
            maxLength: 254
            example: user@example.com
            description: >-
              Team member email. Either `email` or `team_user_id` must be
              provided. Must be a valid RFC 5321 address when present.
        - name: team_user_id
          in: query
          schema:
            type: string
            maxLength: 64
            example: '123456'
            description: >-
              Team member ID (stable identifier). Either `email` or
              `team_user_id` must be provided. After a profile is delegated its
              `email` becomes `delegate-xxx@manus.im`, so use `team_user_id` to
              look up delegated profiles.
      responses:
        '200':
          description: Team member retrieved successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                    example: true
                  request_id:
                    type: string
                  user:
                    $ref: '#/components/schemas/User'
        4XX:
          description: Error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    User:
      type: object
      description: A team member.
      properties:
        email:
          type: string
          description: >-
            Email address. After delegation this field becomes
            `delegate-xxx@manus.im` — the pre-delegation address is preserved in
            `original_email`.
        status:
          $ref: '#/components/schemas/UserStatus'
        role:
          $ref: '#/components/schemas/TeamMemberRole'
        user_name:
          type: string
          description: >-
            Display name. Sourced from `team_user_relation.Name` (set via
            [team.user.rename](/enterprise/v2/team.user.rename)) when present,
            otherwise falls back to the underlying user's name. Omitted when
            neither is set.
        team_user_id:
          type: string
          description: >-
            Stable identifier for the team member, unique within the team. Use
            this (not `email`) for any subsequent profile-management call.
        delegated_to:
          type: string
          description: >-
            If this profile is currently delegated, the `team_user_id` of the
            assignee.
        delegated_profiles:
          type: array
          items:
            $ref: '#/components/schemas/DelegatedProfile'
          description: >-
            Profiles delegated to this user. Only populated by single-record
            responses ([team.user.detail](/enterprise/v2/team.user.detail),
            [team.user.update](/enterprise/v2/team.user.update), etc.).
            [team.user.list](/enterprise/v2/team.user.list) omits this field to
            avoid N+1 fan-out.
        original_email:
          type: string
          description: Pre-delegation email. Only present for currently-delegated profiles.
    ErrorResponse:
      type: object
      description: Standard error response format returned when a request fails.
      properties:
        ok:
          type: boolean
          example: false
          description: Always false for error responses.
        request_id:
          type: string
          description: >-
            Unique identifier for this API request, useful for debugging with
            support.
        error:
          type: object
          description: Error details.
          properties:
            code:
              type: string
              description: >-
                Machine-readable error code: `invalid_argument`, `not_found`,
                `already_exists`, `permission_denied`, `failed_precondition`, or
                `internal`.
            message:
              type: string
              description: Human-readable error description.
    UserStatus:
      type: string
      description: Status of a team member.
      enum:
        - USER_STATUS_ACTIVE
        - USER_STATUS_INACTIVE
        - USER_STATUS_REMOVED
    TeamMemberRole:
      type: string
      description: >-
        Team role. `TEAM_MEMBER_ROLE_OWNER` is read-only and cannot be granted
        via API (transfer ownership in the UI). Guest members do not consume a
        paid seat.
      enum:
        - TEAM_MEMBER_ROLE_OWNER
        - TEAM_MEMBER_ROLE_ADMIN
        - TEAM_MEMBER_ROLE_MEMBER
        - TEAM_MEMBER_ROLE_SUPER_ADMIN
        - TEAM_MEMBER_ROLE_GUEST
    DelegatedProfile:
      type: object
      description: A profile delegated to another team member.
      properties:
        team_user_id:
          type: string
          description: ID of the delegated profile.
        display_name:
          type: string
          description: >-
            Display name. Falls back to the original (pre-delegation) email when
            the profile has no name set.
        role:
          $ref: '#/components/schemas/TeamMemberRole'
        delegated_at:
          type: string
          format: date-time
          description: When the delegation was created.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key

````