ESC
Type to search...

VirtualEvent.ReadWrite

Export JSON
Export CSV
Copy URL
Print
Delegated Read/Write User Scope

Allows the app to read and write virtual events for you

Permission data: April 6, 2026 at 4:06 AM UTC
Delegated Access App-Only Access

Permission Details

Delegated Permission Admin consent required

Read and write your virtual events

Allows the app to read and write virtual events for you

Properties

Microsoft Graph v1.0 exact-category-docs

Properties is shown from stable Microsoft Graph v1.0 metadata.

Property Type Description
createdBy communicationsIdentitySet The identity information for the creator of the virtual event. Inherited from virtualEvent.
description itemBody A description of the virtual event.
displayName StringNullable The display name of the virtual event.
endDateTime dateTimeTimeZone The end time of the virtual event. The timeZone property can be set to any of the time zones currently supported by Windows. For details on how to get all available time zones using PowerShell, see Get-TimeZone.
externalEventInformation virtualEventExternalInformation collection The external information of a virtual event. Returned only for event organizers or coorganizers; otherwise, null.
id String The unique identifier of the virtual event. Inherited from entity.
settings virtualEventSettings The virtual event settings.
startDateTime dateTimeTimeZone Start time of the virtual event. The timeZone property can be set to any of the time zones currently supported by Windows. For details on how to get all available time zones using PowerShell, see Get-TimeZone.
status virtualEventStatus The status of the virtual event. The possible values are: draft, published, canceled, and unknownFutureValue.
presenters virtualEventPresenter collection The virtual event presenters.
sessions virtualEventSession collection The sessions for the virtual event.

JSON Representation

Microsoft Graph v1.0 exact-category-docs

JSON representation is shown from stable Microsoft Graph v1.0 metadata.

JSON representation
{
  "@odata.type": "#microsoft.graph.virtualEvent",
  "createdBy": {
    "@odata.type": "microsoft.graph.communicationsIdentitySet"
  },
  "description": {
    "@odata.type": "microsoft.graph.itemBody"
  },
  "displayName": "String",
  "endDateTime": {
    "@odata.type": "microsoft.graph.dateTimeTimeZone"
  },
  "externalEventInformation": [
    {
      "@odata.type": "microsoft.graph.virtualEventExternalInformation"
    }
  ],
  "id": "String (identifier)",
  "settings": {
    "@odata.type": "microsoft.graph.virtualEventSettings"
  },
  "startDateTime": {
    "@odata.type": "microsoft.graph.dateTimeTimeZone"
  },
  "status": "String"
}

Relationships

Microsoft Graph v1.0 exact-category-docs

Relationships is shown from stable Microsoft Graph v1.0 metadata.

Relationship Type Description
presenters virtualEventPresenter collection The virtual event presenters.
sessions virtualEventSession collection The sessions for the virtual event.
events virtualEvent collection Virtual events in the tenant.
townhalls virtualEventTownhall collection Virtual event town halls.
webinars virtualEventWebinar collection Virtual event webinars.
externalEventInformation virtualEventExternalInformation collection The external information of a virtual event. Returned only for event organizers or coorganizers; otherwise, null.

Graph Methods

Delegated access App-only access
Exact Microsoft Learn match

Microsoft Graph v1.0 endpoints are mapped directly from refreshed Microsoft Learn permissions tables.

Methods
GET /solutions/virtualEvents/townhalls/{id}
GET /solutions/virtualEvents/townhalls/{townhallId}/presenters
GET /solutions/virtualEvents/townhalls/{townhallId}/presenters/{presenterId}
GET /solutions/virtualEvents/townhalls/{townhallId}/sessions
GET /solutions/virtualEvents/townhalls/{townhallId}/sessions/{sessionId}
GET /solutions/virtualEvents/townhalls/getByUserRole(role='{role}')
GET /solutions/virtualEvents/webinars/{webinarId}
GET /solutions/virtualEvents/webinars/{webinarId}/presenters
GET /solutions/virtualEvents/webinars/{webinarId}/presenters/{presenterId}
GET /solutions/virtualEvents/webinars/{webinarId}/registrationConfiguration
GET /solutions/virtualEvents/webinars/{webinarId}/registrations/{registrationId}
GET /solutions/virtualEvents/webinars/{webinarId}/sessions
GET /solutions/virtualEvents/webinars/{webinarId}/sessions/{sessionId}
GET /solutions/virtualEvents/webinars/getByUserIdAndRole(userId='{userId}', role='{role}')
GET /solutions/virtualEvents/webinars/getByUserRole(role='{role}')
POST /solutions/virtualEvents/townhalls
POST /solutions/virtualEvents/townhalls/{id}/cancel
POST /solutions/virtualEvents/townhalls/{id}/publish
POST /solutions/virtualEvents/townhalls/{id}/setExternalEventInformation
POST /solutions/virtualEvents/townhalls/{townhallId}/presenters
POST /solutions/virtualEvents/webinars
POST /solutions/virtualEvents/webinars/{id}/cancel
POST /solutions/virtualEvents/webinars/{id}/publish
POST /solutions/virtualEvents/webinars/{id}/setExternalEventInformation
POST /solutions/virtualEvents/webinars/{webinarId}/presenters
POST /solutions/virtualEvents/webinars/{webinarId}/registrationConfiguration/questions
POST /solutions/virtualEvents/webinars/{webinarId}/registrations
POST /solutions/virtualEvents/webinars/{webinarId}/registrations/{registrationId}/cancel
PATCH /solutions/virtualEvents/townhalls/{id}
PATCH /solutions/virtualEvents/webinars/{id}
PATCH /solutions/virtualEvents/webinars/{webinarId}/presenters/{presenterId}
DELETE /solutions/virtualEvents/townhalls/{townhallId}/presenters/{presenterId}
DELETE /solutions/virtualEvents/webinars/{webinarId}/presenters/{presenterId}
DELETE /solutions/virtualEvents/webinars/{webinarId}/registrationConfiguration/questions/{questionId}
Exact Microsoft Learn match

Microsoft Graph beta endpoints are mapped directly from refreshed Microsoft Learn permissions tables.

Methods
GET /solutions/virtualEvents/townhalls/{id}
GET /solutions/virtualEvents/townhalls/{townhallId}/presenters
GET /solutions/virtualEvents/townhalls/{townhallId}/presenters/{presenterId}
GET /solutions/virtualEvents/townhalls/{townhallId}/sessions
GET /solutions/virtualEvents/townhalls/{townhallId}/sessions/{sessionId}
GET /solutions/virtualEvents/townhalls/getByUserRole(role='{role}')
GET /solutions/virtualEvents/webinars/{id}
GET /solutions/virtualEvents/webinars/{webinarId}/presenters
GET /solutions/virtualEvents/webinars/{webinarId}/presenters/{presenterId}
GET /solutions/virtualEvents/webinars/{webinarId}/registrationConfiguration
GET /solutions/virtualEvents/webinars/{webinarId}/registrations/{registrationId}
GET /solutions/virtualEvents/webinars/{webinarId}/sessions
GET /solutions/virtualEvents/webinars/{webinarId}/sessions/{sessionId}
GET /solutions/virtualEvents/webinars/getByUserIdAndRole(userId='{userId}', role='{role}')
GET /solutions/virtualEvents/webinars/getByUserRole(role='{role}')
POST /solutions/virtualEvents/townhalls
POST /solutions/virtualEvents/townhalls/{id}/cancel
POST /solutions/virtualEvents/townhalls/{id}/publish
POST /solutions/virtualEvents/townhalls/{id}/setExternalEventInformation
POST /solutions/virtualEvents/townhalls/{townhallId}/presenters
POST /solutions/virtualEvents/webinars
POST /solutions/virtualEvents/webinars/{id}/cancel
POST /solutions/virtualEvents/webinars/{id}/publish
POST /solutions/virtualEvents/webinars/{id}/setExternalEventInformation
POST /solutions/virtualEvents/webinars/{webinarId}/presenters
POST /solutions/virtualEvents/webinars/{webinarId}/registrationConfiguration/questions
POST /solutions/virtualEvents/webinars/{webinarId}/registrations
POST /solutions/virtualEvents/webinars/{webinarId}/registrations/{registrationId}/cancel
PATCH /solutions/virtualEvents/townhalls/{id}
PATCH /solutions/virtualEvents/webinars/{id}
PATCH /solutions/virtualEvents/webinars/{webinarId}/presenters/{presenterId}
DELETE /solutions/virtualEvents/townhalls/{townhallId}/presenters/{presenterId}
DELETE /solutions/virtualEvents/webinars/{webinarId}/presenters/{presenterId}
DELETE /solutions/virtualEvents/webinars/{webinarId}/registrationConfiguration/questions/{questionId}
Exact Microsoft Learn PowerShell match

Microsoft Graph PowerShell v1.0 commands are mapped directly from refreshed Microsoft Learn PowerShell snippets.

Commands
Get-MgVirtualEventTownhall /solutions/virtualEvents/townhalls/{id}
Get virtualEventTownhall
Get-MgVirtualEventTownhallByUserRole /solutions/virtualEvents/townhalls/getByUserRole(role='{role}')
virtualEventTownhall: getByUserRole
Get-MgVirtualEventTownhallPresenter /solutions/virtualEvents/townhalls/{townhallId}/presenters
List presenters
Get-MgVirtualEventTownhallPresenter /solutions/virtualEvents/townhalls/{townhallId}/presenters/{presenterId}
Get virtualEventPresenter
Get-MgVirtualEventWebinar /solutions/virtualEvents/webinars/{webinarId}
Get virtualEventWebinar
Get-MgVirtualEventWebinar /solutions/virtualEvents/webinars/getByUserIdAndRole(userId='{userId}', role='{role}')
virtualEventWebinar: getByUserIdAndRole
Get-MgVirtualEventWebinarByUserRole /solutions/virtualEvents/webinars/getByUserRole(role='{role}')
virtualEventWebinar: getByUserRole
Get-MgVirtualEventWebinarRegistration /solutions/virtualEvents/webinars/{webinarId}/registrations/{registrationId}
Get virtualEventRegistration
Get-MgVirtualEventWebinarRegistrationConfiguration /solutions/virtualEvents/webinars/{webinarId}/registrationConfiguration
Get virtualEventWebinarRegistrationConfiguration
Get-MgVirtualEventWebinarSession /solutions/virtualEvents/webinars/{webinarId}/sessions
List sessions for a virtual event
Get-MgVirtualEventWebinarSession /solutions/virtualEvents/webinars/{webinarId}/sessions/{sessionId}
Get virtualEventSession
New-MgVirtualEventTownhallPresenter /solutions/virtualEvents/townhalls/{townhallId}/presenters
Create virtualEventPresenter
New-MgVirtualEventWebinarPresenter /solutions/virtualEvents/townhalls/{townhallId}/presenters
Create virtualEventPresenter
New-MgVirtualEventWebinarRegistration /solutions/virtualEvents/webinars/{webinarId}/registrations
Create virtualEventRegistration
New-MgVirtualEventWebinarRegistrationConfigurationQuestion /solutions/virtualEvents/webinars/{webinarId}/registrationConfiguration/questions
Create virtualEventRegistrationCustomQuestion
Remove-MgVirtualEventTownhallPresenter /solutions/virtualEvents/townhalls/{townhallId}/presenters/{presenterId}
Delete virtualEventPresenter
Remove-MgVirtualEventWebinarRegistrationConfigurationQuestion /solutions/virtualEvents/webinars/{webinarId}/registrationConfiguration/questions/{questionId}
Delete virtualEventRegistrationQuestionBase
Update-MgVirtualEventTownhall /solutions/virtualEvents/townhalls/{id}
Update virtualEventTownhall
Update-MgVirtualEventWebinar /solutions/virtualEvents/webinars/{id}
Update virtualEventWebinar
Update-MgVirtualEventWebinarPresenter /solutions/virtualEvents/webinars/{webinarId}/presenters/{presenterId}
Update virtualEventPresenter
Exact Microsoft Learn PowerShell match

Microsoft Graph PowerShell beta commands are mapped directly from refreshed Microsoft Learn PowerShell snippets.

Commands
Get-MgBetaVirtualEventTownhall /solutions/virtualEvents/townhalls/{id}
Get virtualEventTownhall
Get-MgBetaVirtualEventTownhallByUserRole /solutions/virtualEvents/townhalls/getByUserRole(role='{role}')
virtualEventTownhall: getByUserRole
Get-MgBetaVirtualEventTownhallPresenter /solutions/virtualEvents/townhalls/{townhallId}/presenters
List presenters
Get-MgBetaVirtualEventTownhallPresenter /solutions/virtualEvents/townhalls/{townhallId}/presenters/{presenterId}
Get virtualEventPresenter
Get-MgBetaVirtualEventWebinar /solutions/virtualEvents/webinars/{id}
Get virtualEventWebinar
Get-MgBetaVirtualEventWebinar /solutions/virtualEvents/webinars/getByUserIdAndRole(userId='{userId}', role='{role}')
virtualEventWebinar: getByUserIdAndRole
Get-MgBetaVirtualEventWebinarByUserRole /solutions/virtualEvents/webinars/getByUserRole(role='{role}')
virtualEventWebinar: getByUserRole
Get-MgBetaVirtualEventWebinarRegistration /solutions/virtualEvents/webinars/{webinarId}/registrations/{registrationId}
Get virtualEventRegistration
Get-MgBetaVirtualEventWebinarRegistrationConfiguration /solutions/virtualEvents/webinars/{webinarId}/registrationConfiguration
Get virtualEventWebinarRegistrationConfiguration
Get-MgBetaVirtualEventWebinarSession /solutions/virtualEvents/webinars/{webinarId}/sessions
List sessions for virtualEvent
Get-MgBetaVirtualEventWebinarSession /solutions/virtualEvents/webinars/{webinarId}/sessions/{sessionId}
Get virtualEventSession
New-MgBetaVirtualEventTownhallPresenter /solutions/virtualEvents/townhalls/{townhallId}/presenters
Create virtualEventPresenter
New-MgBetaVirtualEventWebinarRegistration /solutions/virtualEvents/webinars/{webinarId}/registrations
Create virtualEventRegistration
New-MgBetaVirtualEventWebinarRegistrationConfigurationQuestion /solutions/virtualEvents/webinars/{webinarId}/registrationConfiguration/questions
Create question
Remove-MgBetaVirtualEventTownhallPresenter /solutions/virtualEvents/townhalls/{townhallId}/presenters/{presenterId}
Delete virtualEventPresenter
Remove-MgBetaVirtualEventWebinarRegistrationConfigurationQuestion /solutions/virtualEvents/webinars/{webinarId}/registrationConfiguration/questions/{questionId}
Delete virtualEventRegistrationQuestionBase
Update-MgBetaVirtualEventTownhall /solutions/virtualEvents/townhalls/{id}
Update virtualEventTownhall
Update-MgBetaVirtualEventWebinar /solutions/virtualEvents/webinars/{id}
Update virtualEventWebinar
Update-MgBetaVirtualEventWebinarPresenter /solutions/virtualEvents/webinars/{webinarId}/presenters/{presenterId}
Update virtualEventPresenter

Code Examples

C# / .NET SDK
Create virtualEventPresenter
// Code snippets are only available for the latest version. Current version is 5.x

// Dependencies
using Microsoft.Graph.Models;

var requestBody = new VirtualEventPresenter
{
	Identity = new CommunicationsUserIdentity
	{
		OdataType = "#microsoft.graph.communicationsUserIdentity",
		Id = "7b7e1acd-a3e0-4533-8c1d-c1a4ca0b2e2b",
	},
};

// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Solutions.VirtualEvents.Webinars["{virtualEventWebinar-id}"].Presenters.PostAsync(requestBody);
JavaScript
Create virtualEventPresenter
const options = {
	authProvider,
};

const client = Client.init(options);

const virtualEventPresenter = {
  identity: {
    '@odata.type': '#microsoft.graph.communicationsUserIdentity',
    id: '7b7e1acd-a3e0-4533-8c1d-c1a4ca0b2e2b'
  }
};

await client.api('/solutions/virtualEvents/webinars/6b48b5dd-e3a0-428c-b7ad-90896b87a047@09a21d49-f0f3-4b3f-96b6-f381e9430742/presenters')
	.post(virtualEventPresenter);
PowerShell
Create virtualEventPresenter
Import-Module Microsoft.Graph.Bookings

$params = @{
	identity = @{
		"@odata.type" = "#microsoft.graph.communicationsUserIdentity"
		id = "7b7e1acd-a3e0-4533-8c1d-c1a4ca0b2e2b"
	}
}

New-MgVirtualEventWebinarPresenter -VirtualEventWebinarId $virtualEventWebinarId -BodyParameter $params
Python
Create virtualEventPresenter
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.models.virtual_event_presenter import VirtualEventPresenter
from msgraph.generated.models.communications_user_identity import CommunicationsUserIdentity
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = VirtualEventPresenter(
	identity = CommunicationsUserIdentity(
		odata_type = "#microsoft.graph.communicationsUserIdentity",
		id = "7b7e1acd-a3e0-4533-8c1d-c1a4ca0b2e2b",
	),
)

result = await graph_client.solutions.virtual_events.webinars.by_virtual_event_webinar_id('virtualEventWebinar-id').presenters.post(request_body)

App Registration

1

Navigate to Azure Portal

Go to App registrations in Microsoft Entra admin center

2

Add API Permission

Select your app → API permissions → Add a permission → Microsoft Graph

3

Select Permission Type

Choose Delegated permissions and search for VirtualEvent.ReadWrite

4

Grant Admin Consent

This delegated permission requires admin consent.