ESC
Type to search...

Contacts.ReadWrite

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

Allows the app to create, read, update, and delete all contacts in all mailboxes without a signed-in user.

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

Permission Details

Application Permission

Read and write contacts in all mailboxes

Allows the app to create, read, update, and delete all contacts in all mailboxes without a signed-in user.

Delegated Permission User consent allowed

Have full access to user contacts

Allows the app to create, read, update, and delete user contacts.

Properties

Microsoft Graph v1.0 mapped-docs

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

Property Type Description
assistantName StringNullable The name of the contact's assistant.
birthday DateTimeOffsetNullable The contact's birthday. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z
businessAddress physicalAddress The contact's business address.
businessHomePage StringNullable The business home page of the contact.
businessPhones String collection The contact's business phone numbers.
categories String collection The categories associated with the contact.
changeKey StringNullable Identifies the version of the contact. Every time the contact is changed, ChangeKey changes as well. This allows Exchange to apply changes to the correct version of the object.
children String collection The names of the contact's children.
companyName StringNullable The name of the contact's company.
createdDateTime DateTimeOffsetNullable The time the contact was created. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z
department StringNullable The contact's department.
displayName StringNullable The contact's display name. You can specify the display name in a create or update operation. Note that later updates to other properties may cause an automatically generated value to overwrite the displayName value you have specified. To preserve a pre-existing value, always include it as displayName in an update operation.
emailAddresses emailAddress collection The contact's email addresses.
fileAs StringNullable The name the contact is filed under.
generation StringNullable The contact's suffix.

Showing 15 of 42 properties.

JSON Representation

Microsoft Graph v1.0 mapped-docs

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

JSON representation
{
  "assistantName": "string",
  "birthday": "String (timestamp)",
  "businessAddress": {
    "@odata.type": "microsoft.graph.physicalAddress"
  },
  "businessHomePage": "string",
  "businessPhones": [
    "string"
  ],
  "categories": [
    "string"
  ],
  "changeKey": "string",
  "children": [
    "string"
  ],
  "companyName": "string",
  "createdDateTime": "String (timestamp)",
  "department": "string",
  "displayName": "string",
  "emailAddresses": [
    {
      "@odata.type": "microsoft.graph.emailAddress"
    }
  ],
  "fileAs": "string",
  "generation": "string",
  "givenName": "string",
  "homeAddress": {
    "@odata.type": "microsoft.graph.physicalAddress"
  },
  "homePhones": [
    "string"
  ],
  "id": "string (identifier)",
  "imAddresses": [
    "string"
  ],
  "initials": "string",
  "jobTitle": "string",
  "lastModifiedDateTime": "String (timestamp)",
  "manager": "string",
  "middleName": "string",
  "mobilePhone": "string",
  "nickName": "string",
  "officeLocation": "string",
  "otherAddress": {
    "@odata.type": "microsoft.graph.physicalAddress"
  },
  "parentFolderId": "string",
  "personalNotes": "string",
  "photo": {
    "@odata.type": "microsoft.graph.profilePhoto"
  },
  "primaryEmailAddress": {
    "@odata.type": "microsoft.graph.emailAddress"
  },
  "profession": "string",
  "secondaryEmailAddress": {
    "@odata.type": "microsoft.graph.emailAddress"
  },
  "spouseName": "string",
  "surname": "string",
  "tertiaryEmailAddress": {
    "@odata.type": "microsoft.graph.emailAddress"
  },
  "title": "string",
  "yomiCompanyName": "string",
  "yomiGivenName": "string",
  "yomiSurname": "string"
}

Relationships

Microsoft Graph v1.0 mapped-docs

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

Relationship Type Description
extensions extension collection The collection of open extensions defined for the contact. Read-only. Nullable.
multiValueExtendedProperties multiValueLegacyExtendedProperty collection The collection of multi-value extended properties defined for the contact. Read-only. Nullable.
photo profilePhoto Optional contact picture. You can get or set a photo for a contact.
singleValueExtendedProperties singleValueLegacyExtendedProperty collection The collection of single-value extended properties defined for the contact. Read-only. Nullable.
businessPhones string collection The contact's business phone numbers.
categories string collection The categories associated with the item
children string collection The names of the contact's children.
emailAddresses emailAddress collection The contact's email addresses.
homePhones string collection The contact's home phone numbers.
imAddresses string collection The contact's instant messaging (IM) addresses.
phones phone collection Phone numbers associated with the contact, for example, home phone, mobile phone, and business phone.
postalAddresses physicalAddress collection Addresses associated with the contact, for example, home address and business address.
websites website collection Web sites associated with the contact.

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 /groups/{id}/photo
GET /groups/{id}/photo/$value
GET /groups/{id}/photos/{size}
GET /me/contactFolders
GET /me/contactfolders/{contactFolderId}/contacts/{id}/photo
GET /me/contactfolders/{contactFolderId}/contacts/{id}/photo/$value
GET /me/contactFolders/{id}
GET /me/contactFolders/{id}/childFolders
GET /me/contactFolders/{id}/childFolders/{id}/.../contacts
GET /me/contactFolders/{id}/childFolders/{id}/.../contacts/{id}
GET /me/contactfolders/{Id}/contacts
GET /me/contactFolders/{id}/contacts
GET /me/contactfolders/{Id}/contacts/{id}
GET /me/contactFolders/{id}/contacts/delta
GET /me/contactFolders/delta
GET /me/contacts
GET /me/contacts/{id}
GET /me/contacts/{id}/photo
GET /me/contacts/{id}/photo/$value
GET /me/photo
GET /me/photo/$value
GET /me/photos
GET /me/photos/{size}
GET /teams/{id}/photo
GET /teams/{id}/photo/$value
GET /users/{id | userPrincipalName}/contactFolders
GET /users/{id | userPrincipalName}/contactfolders/{contactFolderId}/contacts/{id}/photo
GET /users/{id | userPrincipalName}/contactfolders/{contactFolderId}/contacts/{id}/photo/$value
GET /users/{id | userPrincipalName}/contactFolders/{id}
GET /users/{id | userPrincipalName}/contactFolders/{id}/childFolders
GET /users/{id | userPrincipalName}/contactFolders/{id}/childFolders/{id}/contacts
GET /users/{id | userPrincipalName}/contactFolders/{id}/childFolders/{id}/contacts/{id}
GET /users/{id | userPrincipalName}/contactfolders/{id}/contacts
GET /users/{id | userPrincipalName}/contactFolders/{id}/contacts
GET /users/{id | userPrincipalName}/contactfolders/{id}/contacts/{id}
GET /users/{id | userPrincipalName}/contactFolders/{id}/contacts/delta
GET /users/{id | userPrincipalName}/contacts
GET /users/{id | userPrincipalName}/contacts/{id}
GET /users/{id | userPrincipalName}/contacts/{id}/photo
GET /users/{id | userPrincipalName}/contacts/{id}/photo/$value
GET /users/{id | userPrincipalName}/photo
GET /users/{id | userPrincipalName}/photo/$value
GET /users/{id | userPrincipalName}/photos/{size}
GET /users/{id}/contactFolders/delta
POST /me/contactFolders
POST /me/contactFolders/{contactFolderId}/contacts
POST /me/contactFolders/{id}/childFolders
POST /me/contactFolders/{id}/contacts
POST /me/contacts
POST /users/{id | userPrincipalName}/contactFolders
POST /users/{id | userPrincipalName}/contactFolders/{contactFolderId}/contacts
POST /users/{id | userPrincipalName}/contactFolders/{contactFolderId}/contacts/{contactId}/permanentDelete
POST /users/{id | userPrincipalName}/contactFolders/{id}/childFolders
POST /users/{id | userPrincipalName}/contactFolders/{id}/contacts
POST /users/{id | userPrincipalName}/contacts
POST /users/{id | userPrincipalName}/contacts/{contactId}/permanentDelete
POST /users/{usersId}/contactFolders/{contactFolderId}/childFolders/{contactFolderId}/permanentDelete
POST /users/{usersId}/contactFolders/{contactFolderId}/permanentDelete
PATCH /groups/{id}/photo/$value
PATCH /me/contactfolders/{contactFolderId}/contacts/{id}/photo/$value
PATCH /me/contactFolders/{id}
PATCH /me/contactFolders/{id}/childFolders/{id}/.../contacts/{id}
PATCH /me/contactFolders/{id}/contacts/{id}
PATCH /me/contacts/{id}
PATCH /me/contacts/{id}/photo/$value
PATCH /me/photo/$value
PATCH /users/{id | userPrincipalName}/contactfolders/{contactFolderId}/contacts/{id}/photo/$value
PATCH /users/{id | userPrincipalName}/contactFolders/{id}
PATCH /users/{id | userPrincipalName}/contactFolders/{id}/childFolders/{id}/contacts/{id}
PATCH /users/{id | userPrincipalName}/contactFolders/{id}/contacts/{id}
PATCH /users/{id | userPrincipalName}/contacts/{id}
PATCH /users/{id | userPrincipalName}/contacts/{id}/photo/$value
PATCH /users/{id | userPrincipalName}/photo/$value
PUT /groups/{id}/photo/$value
PUT /me/contactfolders/{contactFolderId}/contacts/{id}/photo/$value
PUT /me/contacts/{id}/photo/$value
PUT /me/photo/$value
PUT /teams/{id}/photo/$value
PUT /users/{id | userPrincipalName}/contactfolders/{contactFolderId}/contacts/{id}/photo/$value
PUT /users/{id | userPrincipalName}/contacts/{id}/photo/$value
PUT /users/{id | userPrincipalName}/photo/$value
DELETE /me/contactFolders/{id}
DELETE /me/contactFolders/{id}/childFolders/{id}/.../contacts/{id}
DELETE /me/contactFolders/{id}/contacts/{id}
DELETE /me/contacts/{id}
DELETE /users/{id | userPrincipalName}/contactFolders/{id}
DELETE /users/{id | userPrincipalName}/contactFolders/{id}/childFolders/{id}/contacts/{id}
DELETE /users/{id | userPrincipalName}/contactFolders/{id}/contacts/{id}
DELETE /users/{id | userPrincipalName}/contacts/{id}
Exact Microsoft Learn match

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

Methods
GET /groups/{id}/photo
GET /groups/{id}/photo/$value
GET /groups/{id}/photos/{size}
GET /me/contactFolders
GET /me/contactfolders/{contactFolderId}/contacts/{id}/photo
GET /me/contactfolders/{contactFolderId}/contacts/{id}/photo/$value
GET /me/contactFolders/{id}
GET /me/contactFolders/{id}/childFolders
GET /me/contactFolders/{id}/childFolders/{id}/.../contacts
GET /me/contactFolders/{id}/childFolders/{id}/.../contacts/{id}
GET /me/contactfolders/{Id}/contacts
GET /me/contactFolders/{id}/contacts
GET /me/contactfolders/{Id}/contacts/{id}
GET /me/contactFolders/{id}/contacts/delta
GET /me/contactFolders/delta
GET /me/contacts
GET /me/contacts/{id}
GET /me/contacts/{id}/photo
GET /me/contacts/{id}/photo/$value
GET /me/photo
GET /me/photo/$value
GET /me/photos
GET /me/photos/{size}
GET /teams/{id}/photo
GET /teams/{id}/photo/$value
GET /users/{id | userPrincipalName}/contactFolders
GET /users/{id | userPrincipalName}/contactfolders/{contactFolderId}/contacts/{id}/photo
GET /users/{id | userPrincipalName}/contactfolders/{contactFolderId}/contacts/{id}/photo/$value
GET /users/{id | userPrincipalName}/contactFolders/{id}
GET /users/{id | userPrincipalName}/contactFolders/{id}/childFolders
GET /users/{id | userPrincipalName}/contactFolders/{id}/childFolders/{id}/contacts
GET /users/{id | userPrincipalName}/contactFolders/{id}/childFolders/{id}/contacts/{id}
GET /users/{id | userPrincipalName}/contactfolders/{id}/contacts
GET /users/{id | userPrincipalName}/contactFolders/{id}/contacts
GET /users/{id | userPrincipalName}/contactfolders/{id}/contacts/{id}
GET /users/{id | userPrincipalName}/contacts
GET /users/{id | userPrincipalName}/contacts/{id}
GET /users/{id | userPrincipalName}/contacts/{id}/photo
GET /users/{id | userPrincipalName}/contacts/{id}/photo/$value
GET /users/{id | userPrincipalName}/photo
GET /users/{id | userPrincipalName}/photo/$value
GET /users/{id | userPrincipalName}/photos/{size}
GET /users/{id}/contactFolders/{id}/contacts/delta
GET /users/{id}/contactFolders/delta
POST /me/contactFolders
POST /me/contactFolders/{contactFolderId}/contacts
POST /me/contactFolders/{id}/childFolders
POST /me/contactFolders/{id}/contacts
POST /me/contacts
POST /users/{id | userPrincipalName}/contactFolders
POST /users/{id | userPrincipalName}/contactFolders/{contactFolderId}/contacts
POST /users/{id | userPrincipalName}/contactFolders/{id}/childFolders
POST /users/{id | userPrincipalName}/contactFolders/{id}/contacts
POST /users/{id | userPrincipalName}/contacts
POST /users/{usersId}/contactFolders/{contactFolderId}/childFolders/{contactFolderId}/permanentDelete
POST /users/{usersId}/contactFolders/{contactFolderId}/contacts/{contactId}/permanentDelete
POST /users/{usersId}/contactFolders/{contactFolderId}/permanentDelete
POST /users/{usersId}/contacts/{contactId}/permanentDelete
PATCH /me/contactfolders/{contactFolderId}/contacts/{id}/photo/$value
PATCH /me/contactFolders/{id}
PATCH /me/contactFolders/{id}/childFolders/{id}/.../contacts/{id}
PATCH /me/contactFolders/{id}/contacts/{id}
PATCH /me/contacts/{id}
PATCH /me/contacts/{id}/photo/$value
PATCH /users/{id | userPrincipalName}/contactfolders/{contactFolderId}/contacts/{id}/photo/$value
PATCH /users/{id | userPrincipalName}/contactFolders/{id}
PATCH /users/{id | userPrincipalName}/contactFolders/{id}/childFolders/{id}/contacts/{id}
PATCH /users/{id | userPrincipalName}/contactFolders/{id}/contacts/{id}
PATCH /users/{id | userPrincipalName}/contacts/{id}
PATCH /users/{id | userPrincipalName}/contacts/{id}/photo/$value
PUT /groups/{id}/photo/$value
PUT /me/contactfolders/{contactFolderId}/contacts/{id}/photo/$value
PUT /me/contacts/{id}/photo/$value
PUT /me/photo/$value
PUT /teams/{id}/photo/$value
PUT /users/{id | userPrincipalName}/contactfolders/{contactFolderId}/contacts/{id}/photo/$value
PUT /users/{id | userPrincipalName}/contacts/{id}/photo/$value
PUT /users/{id | userPrincipalName}/photo/$value
DELETE /me/contactFolders/{id}
DELETE /me/contactFolders/{id}/childFolders/{id}/.../contacts/{id}
DELETE /me/contactFolders/{id}/contacts/{id}
DELETE /me/contacts/{id}
DELETE /users/{id | userPrincipalName}/contactFolders/{id}
DELETE /users/{id | userPrincipalName}/contactFolders/{id}/childFolders/{id}/contacts/{id}
DELETE /users/{id | userPrincipalName}/contactFolders/{id}/contacts/{id}
DELETE /users/{id | userPrincipalName}/contacts/{id}
Exact Microsoft Learn PowerShell match

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

Commands
Get-MgTeamPhoto /me/photo/$value
Get profilePhoto
Get-MgTeamPhotoContent /me/photo/$value
Get profilePhoto
Get-MgUserContact /me/contacts
List contacts
Get-MgUserContact /me/contacts/{id}
Get contact
Get-MgUserContactFolder /me/contactFolders
List contactFolders
Get-MgUserContactFolder /me/contactFolders/{id}
Get contactFolder
Get-MgUserContactFolderChildFolder /me/contactFolders/{id}/childFolders
List childFolders
Get-MgUserContactFolderContact /me/contacts
List contacts
Get-MgUserContactFolderContactDelta /me/contactFolders/{id}/contacts/delta
contact: delta
Get-MgUserContactFolderDelta /me/contactFolders/delta
contactFolder: delta
Get-MgUserPhoto /me/photo/$value
Get profilePhoto
Get-MgUserPhotoContent /me/photo/$value
Get profilePhoto
New-MgUserContact /me/contacts
Create contact
New-MgUserContactFolder /me/contactFolders
Create ContactFolder
New-MgUserContactFolderChildFolder /me/contactFolders/{id}/childFolders
Create ContactFolder
New-MgUserContactFolderContact /me/contacts
Create contact
Remove-MgUserContact /me/contacts/{id}
Delete contact
Remove-MgUserContactFolder /me/contactFolders/{id}
Delete contactFolder
Remove-MgUserContactFolderPermanent /users/{usersId}/contactFolders/{contactFolderId}/permanentDelete
contactFolder: permanentDelete
Remove-MgUserContactPermanent /users/{id | userPrincipalName}/contacts/{contactId}/permanentDelete
contact: permanentDelete
Set-MgTeamPhotoContent /me/contacts/{id}/photo/$value
Update profilePhoto
Set-MgUserPhotoContent /me/contacts/{id}/photo/$value
Update profilePhoto
Update-MgUserContact /me/contacts/{id}
Update contact
Update-MgUserContactFolder /me/contactFolders/{id}
Update contactfolder
Exact Microsoft Learn PowerShell match

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

Commands
Get-MgBetaUserContact /me/contacts
List contacts
Get-MgBetaUserContact /me/contacts/{id}
Get contact
Get-MgBetaUserContactFolder /me/contactFolders
List contactFolders
Get-MgBetaUserContactFolder /me/contactFolders/{id}
Get contactFolder
Get-MgBetaUserContactFolderChildFolder /me/contactFolders/{id}/childFolders
List childFolders
Get-MgBetaUserContactFolderContact /me/contacts
List contacts
New-MgBetaUserContact /me/contacts
Create contact
New-MgBetaUserContactFolder /me/contactFolders
Create ContactFolder
New-MgBetaUserContactFolderChildFolder /me/contactFolders/{id}/childFolders
Create ContactFolder
New-MgBetaUserContactFolderContact /me/contacts
Create Contact
Remove-MgBetaUserContact /me/contacts/{id}
Delete contact
Remove-MgBetaUserContactFolder /me/contactFolders/{id}
Delete contactFolder
Remove-MgBetaUserContactFolderPermanent /users/{usersId}/contactFolders/{contactFolderId}/permanentDelete
contactFolder: permanentDelete
Remove-MgBetaUserContactPermanent /users/{usersId}/contacts/{contactId}/permanentDelete
contact: permanentDelete
Set-MgBetaTeamPhotoContent /me/contacts/{id}/photo/$value
Update profilePhoto
Set-MgBetaUserPhotoContent /me/contacts/{id}/photo/$value
Update profilePhoto
Update-MgBetaUserContact /me/contacts/{id}
Update contact
Update-MgBetaUserContactFolder /me/contactFolders/{id}
Update contactfolder

Code Examples

C# / .NET SDK
contact: permanentDelete
// Code snippets are only available for the latest version. Current version is 5.x

// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
await graphClient.Users["{user-id}"].Contacts["{contact-id}"].PermanentDelete.PostAsync();
JavaScript
contact: permanentDelete
const options = {
	authProvider,
};

const client = Client.init(options);

await client.api('/users/b4c80c57-5c59-4a3d-912a-a83985988b82/contacts/AAsdjipajdwnoiwsda=/permanentDelete')
	.post();
PowerShell
contact: permanentDelete
Import-Module Microsoft.Graph.PersonalContacts

Remove-MgUserContactPermanent -UserId $userId -ContactId $contactId
Python
contact: permanentDelete
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python

await graph_client.users.by_user_id('user-id').contacts.by_contact_id('contact-id').permanent_delete.post()

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 Application permissions or delegated permissions and search for Contacts.ReadWrite

4

Grant Admin Consent

Application permissions always require admin consent.