> ## 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.

# DailyParticipantPermissions

> The send, receive, and admin permissions for a participant in a Daily call.

`DailyParticipantPermissions` describes what a participant is allowed to do in a call. It is exposed as `DailyParticipant.permissions` and can be updated at runtime via [`updateParticipant()`](/reference/daily-js/instance-methods/update-participant).

```typescript theme={null}
interface DailyParticipantPermissions {
  hasPresence: boolean;
  canSend: boolean | Set<'video' | 'audio' | 'screenVideo' | 'screenAudio' | 'customVideo' | 'customAudio'>;
  canReceive: DailyParticipantCanReceivePermission;
  canAdmin: boolean | Set<'participants' | 'streaming' | 'transcription'>;
}
```

## Properties

<ResponseField name="hasPresence" type="boolean">
  When `false`, the participant is hidden from all other participants. They do not appear in `participants()` for others, cannot be seen or heard, and their events are not broadcast. Useful for silent observers or bots.
</ResponseField>

<ResponseField name="canSend" type="boolean | Set<string>">
  Controls which media tracks the participant may publish. `true` allows all, `false` blocks all, or a `Set` of specific track types.

  <Expandable title="allowed values">
    <ResponseField name="&#x22;video&#x22;">Camera video track.</ResponseField>
    <ResponseField name="&#x22;audio&#x22;">Microphone audio track.</ResponseField>
    <ResponseField name="&#x22;screenVideo&#x22;">Screen share video.</ResponseField>
    <ResponseField name="&#x22;screenAudio&#x22;">Screen share audio.</ResponseField>
    <ResponseField name="&#x22;customVideo&#x22;">Any custom video track started with `startCustomTrack()`.</ResponseField>
    <ResponseField name="&#x22;customAudio&#x22;">Any custom audio track started with `startCustomTrack()`.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="canReceive" type="DailyParticipantCanReceivePermission">
  Controls which participants' media this participant may subscribe to. Overrides cascade from most general (`base`) to most specific (`byParticipantId`).

  <Expandable title="canReceive properties">
    <ResponseField name="base" type="boolean | object">
      Default receive permission that applies to all remote participants unless overridden. `true` allows all media, `false` blocks all. Or provide a granular object:

      ```typescript theme={null}
      {
        video: boolean;
        audio: boolean;
        screenVideo: boolean;
        screenAudio: boolean;
        customVideo: { '*': boolean; [trackName: string]: boolean };
        customAudio: { '*': boolean; [trackName: string]: boolean };
      }
      ```
    </ResponseField>

    <ResponseField name="byUserId" type="object">
      Per-`user_id` overrides. A mapping from `user_id` to `true`, `false`, or a partial per-media-type object. Overrides `base` for the matched participant.
    </ResponseField>

    <ResponseField name="byParticipantId" type="object">
      Per-`session_id` overrides. A mapping from `session_id` to `true`, `false`, or a partial per-media-type object. Overrides both `base` and `byUserId` for the matched participant.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="canAdmin" type="boolean | Set<string>">
  Controls which administrative capabilities the participant holds. `true` grants all, `false` grants none, or a `Set` of specific capabilities.

  <Expandable title="allowed values">
    <ResponseField name="&#x22;participants&#x22;">Can mute, eject, and update permissions of other participants. Can also admit waiting participants.</ResponseField>
    <ResponseField name="&#x22;streaming&#x22;">Can start and stop cloud recordings and live streams.</ResponseField>
    <ResponseField name="&#x22;transcription&#x22;">Can start and stop transcription.</ResponseField>
  </Expandable>
</ResponseField>

## See also

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

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

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

  <Card title="REST API" icon="server" iconType="solid">
    * [Create meeting token](/reference/rest-api/meeting-tokens/create-meeting-token)
    * [Update participant permissions](/reference/rest-api/rooms/session/update-permissions)
  </Card>

  <Card title="Guides" icon="book-open" iconType="solid">
    * [Permissions](/docs/daily-js/guides/permissions)
  </Card>
</CardGroup>
