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

# DailyParticipant

> The object representing a participant in a Daily call, returned by participants() and emitted on participant events.

`DailyParticipant` represents a single participant in a Daily call. It is returned by [`participants()`](/reference/daily-js/instance-methods/participants) and included in the payload of participant events. Daily keeps this object up to date as media states, permissions, and network conditions change.

```typescript theme={null}
interface DailyParticipant {
  session_id: string;
  user_id: string;
  user_name: string;
  userData?: unknown;
  local: boolean;
  owner: boolean;
  record: boolean;
  joined_at?: Date;
  will_eject_at: Date;
  participantType?: DailyParticipantTypeValues;
  networkQualityState?: 'good' | 'warning' | 'bad' | 'unknown';
  tracks: DailyParticipantTracks;
  permissions: DailyParticipantPermissions;
}
```

## Properties

<ResponseField name="session_id" type="string">
  A unique identifier for this specific join event. Randomly generated on every `join()` call. Used as the key in `participants()` and `updateParticipant()`, and in REST API endpoints. Not stable across reconnects — if a participant leaves and rejoins, they get a new `session_id`.
</ResponseField>

<ResponseField name="user_id" type="string">
  A stable identifier for the user, settable via a meeting token. Persists across reconnects within the same call session. Defaults to `session_id` if not set via token.
</ResponseField>

<ResponseField name="user_name" type="string">
  The participant's display name. Set via a meeting token, [`DailyCallOptions`](/reference/daily-js/types/daily-call-options), or [`setUserName()`](/reference/daily-js/instance-methods/set-user-name).
</ResponseField>

<ResponseField name="userData" type="unknown">
  Arbitrary JSON data associated with the participant. Set via [`DailyCallOptions`](/reference/daily-js/types/daily-call-options) or [`setUserData()`](/reference/daily-js/instance-methods/set-user-data).
</ResponseField>

<ResponseField name="local" type="boolean">
  `true` for the local participant. The local participant is always available at `participants().local`.
</ResponseField>

<ResponseField name="owner" type="boolean">
  `true` when the participant joined with an owner-level meeting token or was granted owner permissions.
</ResponseField>

<ResponseField name="record" type="boolean">
  `true` when the participant is a cloud recording bot.
</ResponseField>

<ResponseField name="joined_at" type="Date">
  Timestamp for when the participant joined the call. Not set until after the `joined-meeting` event. The timestamp reflects the server's clock, so it may differ slightly from the local client's clock.
</ResponseField>

<ResponseField name="will_eject_at" type="Date">
  If the token or room has an expiration with `eject_at_token_exp` or `eject_at_room_exp` set to `true`, this is the timestamp when the participant will be ejected. If no ejection is configured, this is `0` (Dec 31, 1969). Note: this timestamp matches the client clock, not the server clock.
</ResponseField>

<ResponseField name="participantType" type="string | undefined">
  Set for non-human participants. Not present for standard web participants.

  <Expandable title="participantType values">
    | Value                   | Description                                                              |
    | ----------------------- | ------------------------------------------------------------------------ |
    | `'remote-media-player'` | Participant is a remote media player                                     |
    | `'sip-dial-in'`         | Participant joined via a SIP device dialing into the Daily room          |
    | `'sip-dial-out'`        | Participant joined when a SIP endpoint was called using the dial-out API |
    | `'pstn-dial-in'`        | Participant joined via dialing a PIN-based phone number                  |
    | `'pstn-dial-out'`       | Participant joined when a phone number was called using the dial-out API |
    | `'unknown'`             | Participant is SIP/PSTN but Daily cannot determine the exact type        |
  </Expandable>
</ResponseField>

<ResponseField name="networkQualityState" type="'good' | 'warning' | 'bad' | 'unknown'">
  The participant's current network quality as assessed by Daily. Updated via [`network-quality-change`](/reference/daily-js/events/network-events#network-quality-change) events.
</ResponseField>

<ResponseField name="tracks" type="DailyParticipantTracks">
  All media track states for this participant. Keys are `'audio'`, `'video'`, `'screenAudio'`, `'screenVideo'`, and any custom track names. Values are [`DailyTrackState`](/reference/daily-js/types/daily-track-state) objects.

  ```typescript theme={null}
  interface DailyParticipantTracks {
    audio: DailyTrackState;
    video: DailyTrackState;
    screenAudio: DailyTrackState;
    screenVideo: DailyTrackState;
    [customTrackKey: string]: DailyTrackState | undefined;
  }
  ```

  See [`DailyTrackState`](/reference/daily-js/types/daily-track-state) for the full field reference.
</ResponseField>

<ResponseField name="permissions" type="DailyParticipantPermissions">
  The participant's current send, receive, and admin permissions. See [`DailyParticipantPermissions`](/reference/daily-js/types/daily-participant-permissions) for the full field reference.
</ResponseField>

## See also

<CardGroup>
  <Card title="Types" icon="t" iconType="solid">
    * [DailyTrackState](/reference/daily-js/types/daily-track-state)
    * [DailyParticipantPermissions](/reference/daily-js/types/daily-participant-permissions)
  </Card>

  <Card title="Methods" icon="code" iconType="solid">
    * [participants()](/reference/daily-js/instance-methods/participants)
    * [updateParticipant()](/reference/daily-js/instance-methods/update-participant)
  </Card>

  <Card title="Events" icon="bolt" iconType="solid">
    * [participant-joined](/reference/daily-js/events/participant-events#participant-joined)
    * [participant-updated](/reference/daily-js/events/participant-events#participant-updated)
  </Card>

  <Card title="Guides" icon="book-open" iconType="solid">
    * [Participants](/docs/daily-js/concepts/participants)
  </Card>
</CardGroup>
