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

# Get User

> Retrieves a user by their Clerk user ID

Retrieves the full details of a user by their Clerk user ID. This endpoint returns user profile information including contact details, profile picture, and metadata.

<Note>
  User management (creation, updates, deletion) is handled directly through
  Clerk. This endpoint provides read-only access to user data.
</Note>

## Authentication

This endpoint requires authentication. The user must be signed in.

## Request

<ParamField path="id" type="string" required>
  The Clerk user ID of the user to retrieve (e.g., `user_abc123`).
</ParamField>

## Response

Returns the complete Clerk user object.

<ResponseField name="id" type="string" required>
  Unique Clerk user identifier.
</ResponseField>

<ResponseField name="firstName" type="string | null" required>
  The user's first name. May be `null` if not set.
</ResponseField>

<ResponseField name="lastName" type="string | null" required>
  The user's last name. May be `null` if not set.
</ResponseField>

<ResponseField name="username" type="string | null" required>
  The user's username. May be `null` if not set.
</ResponseField>

<ResponseField name="primaryEmailAddressId" type="string | null" required>
  ID of the user's primary email address.
</ResponseField>

<ResponseField name="primaryEmailAddress" type="object | null">
  The user's primary email address object.

  <Expandable title="Email address object properties">
    <ResponseField name="id" type="string" required>
      Unique identifier for the email address.
    </ResponseField>

    <ResponseField name="emailAddress" type="string" required>
      The email address string.
    </ResponseField>

    <ResponseField name="verification" type="object | null">
      Verification status of the email address.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="emailAddresses" type="array" required>
  Array of all email addresses associated with this user.
</ResponseField>

<ResponseField name="primaryPhoneNumberId" type="string | null" required>
  ID of the user's primary phone number. May be `null` if not set.
</ResponseField>

<ResponseField name="phoneNumbers" type="array" required>
  Array of all phone numbers associated with this user.
</ResponseField>

<ResponseField name="imageUrl" type="string" required>
  URL to the user's profile image.
</ResponseField>

<ResponseField name="hasImage" type="boolean" required>
  Whether the user has uploaded a custom profile image.
</ResponseField>

<ResponseField name="externalId" type="string | null" required>
  External identifier for the user if set. May be `null`.
</ResponseField>

<ResponseField name="publicMetadata" type="object" required>
  Public metadata object for the user. Accessible from frontend.
</ResponseField>

<ResponseField name="privateMetadata" type="object" required>
  Private metadata object for the user. Only accessible from backend.

  <Expandable title="Private metadata properties">
    <ResponseField name="bullhornUserId" type="number | null">
      The user's associated Bullhorn CRM user ID if connected.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="unsafeMetadata" type="object" required>
  Unsafe metadata object that can be modified from frontend.
</ResponseField>

<ResponseField name="createdAt" type="number" required>
  Unix timestamp (milliseconds) of when the user was created.
</ResponseField>

<ResponseField name="updatedAt" type="number" required>
  Unix timestamp (milliseconds) of when the user was last updated.
</ResponseField>

<ResponseField name="lastSignInAt" type="number | null" required>
  Unix timestamp (milliseconds) of the user's last sign-in. May be `null` if
  never signed in.
</ResponseField>

<ResponseField name="twoFactorEnabled" type="boolean" required>
  Whether the user has two-factor authentication enabled.
</ResponseField>

<ResponseField name="banned" type="boolean" required>
  Whether the user is banned from the organization.
</ResponseField>

<ResponseField name="locked" type="boolean" required>
  Whether the user account is locked.
</ResponseField>

## Response Examples

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "user_abc123def456",
    "firstName": "John",
    "lastName": "Doe",
    "username": null,
    "primaryEmailAddressId": "idn_xyz789",
    "primaryEmailAddress": {
      "id": "idn_xyz789",
      "emailAddress": "john.doe@example.com",
      "verification": {
        "status": "verified"
      }
    },
    "emailAddresses": [
      {
        "id": "idn_xyz789",
        "emailAddress": "john.doe@example.com",
        "verification": {
          "status": "verified"
        }
      }
    ],
    "primaryPhoneNumberId": null,
    "phoneNumbers": [],
    "imageUrl": "https://img.clerk.com/user_abc123def456",
    "hasImage": true,
    "externalId": null,
    "publicMetadata": {},
    "privateMetadata": {
      "bullhornUserId": 12345
    },
    "unsafeMetadata": {},
    "createdAt": 1704067200000,
    "updatedAt": 1704153600000,
    "lastSignInAt": 1704153600000,
    "twoFactorEnabled": false,
    "banned": false,
    "locked": false
  }
  ```

  ```json 404 theme={null}
  {
    "error": {
      "code": "NOT_FOUND",
      "message": "User with id user_abc123def456 not found"
    }
  }
  ```
</ResponseExample>

## Error Codes

| Status Code | Error Code       | Description                                               |
| ----------- | ---------------- | --------------------------------------------------------- |
| 401         | `UNAUTHORIZED`   | User is not authenticated. Ensure a valid session exists. |
| 404         | `NOT_FOUND`      | No user exists with the specified Clerk ID.               |
| 500         | `INTERNAL_ERROR` | An unexpected server error occurred.                      |
