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

# Get Owner

> Fetch one entry from the owner directory

Fetch a single owner by ID. Use [List Owners](/api-reference/list-owners) to find the ID, or keep the `id` returned by [Create Owner](/api-reference/create-owner).

Deletes are soft, but a deleted owner is gone from this endpoint. It returns 404, exactly as it would for an ID that never existed.

<Note>
  `opportunity_count` is always `0` here. Counting the opportunities an owner holds costs a lookup per owner, so it is only done by [List Owners](/api-reference/list-owners) with `with_counts=true`.
</Note>

## Path Parameters

<ParamField path="id" type="string" required>
  Owner UUID. A value that is not a UUID returns 400, not 404.
</ParamField>

## Response Fields

<ResponseField name="owner" type="object">
  The owner.
</ResponseField>

<ResponseField name="owner.id" type="string">
  Owner UUID. Pass this as `owner_id` when updating an opportunity.
</ResponseField>

<ResponseField name="owner.email" type="string">
  Email address. Pass this as `owner_email` when updating an opportunity.
</ResponseField>

<ResponseField name="owner.first_name" type="string">
  First name, empty when the owner has none.
</ResponseField>

<ResponseField name="owner.last_name" type="string">
  Last name, empty when the owner has none.
</ResponseField>

<ResponseField name="owner.name" type="string">
  Display name. First and last name joined, falling back to the email address when the owner has no name, and to `Unknown owner` when it has neither.
</ResponseField>

<ResponseField name="owner.avatar_url" type="string">
  Profile picture URL, empty when the owner has no picture.
</ResponseField>

<ResponseField name="owner.is_member" type="boolean">
  `true` when the owner is also a member of your workspace with a login, `false` for a directory-only owner.
</ResponseField>

<ResponseField name="owner.source" type="string">
  How the owner got into the directory: `user` for one provisioned automatically from a workspace member, `manual` for [Create Owner](/api-reference/create-owner), `csv` for [Import Owners](/api-reference/import-owners), `api` for one created by passing `owner_email` with `create_owner_if_missing` to [Update Opportunity](/api-reference/update-opportunity).
</ResponseField>

<ResponseField name="owner.opportunity_count" type="integer">
  Always `0` on this endpoint. See the note above.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.clustr-ai.com/api/public/owners/9c8e77d1-4b2a-4c8f-9a30-6e21d4f0aa57" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "data": {
      "owner": {
        "id": "9c8e77d1-4b2a-4c8f-9a30-6e21d4f0aa57",
        "email": "sam@northstar.vc",
        "first_name": "Sam",
        "last_name": "Okafor",
        "name": "Sam Okafor",
        "avatar_url": "",
        "is_member": false,
        "source": "manual",
        "opportunity_count": 0
      }
    }
  }
  ```

  ```json 400 theme={null}
  {
    "success": false,
    "error": { "message": "Invalid id format", "code": "BAD_REQUEST" }
  }
  ```

  ```json 404 theme={null}
  {
    "success": false,
    "error": { "message": "owner not found", "code": "NOT_FOUND" }
  }
  ```

  ```json 401 theme={null}
  {
    "success": false,
    "error": { "message": "Invalid or missing API key", "code": "UNAUTHORIZED" }
  }
  ```
</ResponseExample>
