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

# List Customer Profiles

> Retrieve all customer profiles accessible to the current session, including the active user account and all associated customer profiles.

# List Customer Profiles

Returns all customer profiles linked to the authenticated user account, together with the user record and default business. A single user account can have multiple profiles — for example, an individual member profile and a company profile — and can switch between them. The portal fetches this on every authenticated session bootstrap to populate the account switcher.

<Note>
  A **profile** in Nexudus represents a customer record tied to a specific location. One user can have profiles across multiple locations or multiple
  profile types (individual, company) within the same location.
</Note>

## Authentication

Requires a valid customer bearer token.

## Query Parameters

<ParamField query="_shape" type="string">
  Comma-separated list of field paths to include in the response. When provided, only the
  specified fields are returned — useful for reducing payload size. Supports nested paths
  using dot notation. Example: `_shape=Records.FullName,Records.CompanyName,Records.Avatar`.
</ParamField>

## Response

<ResponseField name="User" type="object">
  The authenticated user account record.
</ResponseField>

<ResponseField name="User.Id" type="number">
  Unique numeric identifier for the user account.
</ResponseField>

<ResponseField name="User.FullName" type="string">
  Display name for the user account.
</ResponseField>

<ResponseField name="User.Email" type="string">
  Email address used to sign in.
</ResponseField>

<ResponseField name="User.Active" type="boolean">
  `true` when the account is active and not suspended.
</ResponseField>

<ResponseField name="User.IsAdmin" type="boolean">
  `true` when the user has operator-level admin access.
</ResponseField>

<ResponseField name="User.AccessToken" type="string">
  Current bearer token for the session (mirrors the `Authorization` header value).
</ResponseField>

<ResponseField name="DefaultBusiness" type="object">
  The default location associated with this user.
</ResponseField>

<ResponseField name="DefaultBusiness.Id" type="number">
  Numeric identifier of the default location.
</ResponseField>

<ResponseField name="DefaultBusiness.Name" type="string">
  Display name of the default location.
</ResponseField>

<ResponseField name="DefaultBusiness.WebAddress" type="string">
  Subdomain identifier for the default location.
</ResponseField>

<ResponseField name="Profiles" type="array">
  All customer profiles accessible to this user.
</ResponseField>

<ResponseField name="Profiles[].Id" type="number">
  Numeric identifier of the customer profile. Use this as `coworkerId` in profile-scoped endpoints.
</ResponseField>

<ResponseField name="Profiles[].FullName" type="string">
  Display name for this profile.
</ResponseField>

<ResponseField name="Profiles[].CompanyName" type="string">
  Company name for this profile.
</ResponseField>

<ResponseField name="Profiles[].Active" type="boolean">
  `true` when this profile is active.
</ResponseField>

<ResponseField name="Profiles[].IsDefaultProfile" type="boolean">
  `true` when this is the currently active profile for the session.
</ResponseField>

<ResponseField name="Profiles[].CoworkerType" type="number">
  Profile type: `1` = Individual, `2` = Company.
</ResponseField>

<ResponseField name="Profiles[].HasVirtualOffice" type="boolean">
  `true` when a Virtual Office contract is active for this profile.
</ResponseField>

<ResponseField name="Profiles[].VirtualOfficePaused" type="boolean | null">
  `true` when the Virtual Office contract is currently paused.
</ResponseField>

<ResponseField name="Profiles[].VirtualOfficeContractId" type="number | null">
  ID of the Virtual Office contract, if one exists. Use with `GET /api/public/billing/coworkerContracts/{contractId}`.
</ResponseField>

## Example Response

```json theme={null}
{
  "User": {
    "Id": 42,
    "FullName": "Jane Doe",
    "Email": "jane.doe@example.com",
    "Active": true,
    "IsAdmin": false,
    "AccessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
  },
  "DefaultBusiness": {
    "Id": 7,
    "Name": "Nexudus HQ",
    "WebAddress": "nexudushq"
  },
  "Profiles": [
    {
      "Id": 101,
      "FullName": "Jane Doe",
      "CompanyName": "",
      "Active": true,
      "IsDefaultProfile": true,
      "CoworkerType": 1,
      "HasVirtualOffice": false,
      "VirtualOfficePaused": null,
      "VirtualOfficeContractId": null
    },
    {
      "Id": 102,
      "FullName": "Acme Design Co.",
      "CompanyName": "Acme Design Co.",
      "Active": true,
      "IsDefaultProfile": false,
      "CoworkerType": 2,
      "HasVirtualOffice": true,
      "VirtualOfficePaused": false,
      "VirtualOfficeContractId": 55
    }
  ]
}
```

## TypeScript Integration

```typescript theme={null}
import endpoints from '@/api/endpoints'
import { CoworkerProfiles } from '@/types/sys/CoworkerProfiles'
import { useData } from '@/api/fetchData'

const { resource: profiles } = useData<CoworkerProfiles>(httpClient, endpoints.coworkers.profiles)

const activeProfile = profiles?.Profiles.find((p) => p.IsDefaultProfile)
```

## Usage in Portal

| Context                                           | Source file                                 |
| ------------------------------------------------- | ------------------------------------------- |
| Session bootstrap — loads all profiles on sign-in | `src/states/useAuthContext.tsx`             |
| Account switcher dropdown in navigation           | `src/components/NavBar/AccountDropdown.tsx` |

## Error Responses

<ResponseField name="401 Unauthorized" type="error">
  The bearer token is missing, expired, or invalid.
</ResponseField>

## Related Endpoints

| Method | Endpoint                                          | Description                               |
| ------ | ------------------------------------------------- | ----------------------------------------- |
| `PUT`  | `/api/public/coworkers/profiles/current`          | Switch the active profile for the session |
| `GET`  | `/api/public/coworkers/profiles/current/benefits` | Get plan benefits for the active profile  |
| `GET`  | `/en/profile?_resource=Coworker`                  | Retrieve full editable customer profile   |
