ChatMessage.Send
Export JSON
Export CSV
Copy URL
Print
Delegated
Read
User Scope
Allows an app to send one-to-one and group chat messages in Microsoft Teams, on behalf of the signed-in user.
Delegated Access
App-Only Access
Permission Details
Delegated Permission
User consent allowed
Send user chat messages
Allows an app to send one-to-one and group chat messages in Microsoft Teams, on behalf of the signed-in user.
User sees: Allows an app to send one-to-one and group chat messages in Microsoft Teams, on your behalf.
Permission ID:
116b7235-7cc6-461e-b163-8e55691d839e
Properties
| Property | Type | Description |
|---|---|---|
id |
string |
The unique identifier for an entity. Read-only. |
locale |
string |
Locale of the chat message set by the client. Always set to en-us. |
deletedDateTime |
date-timeNullable |
Read only. Timestamp at which the chat message was deleted, or null if not deleted. |
hostedContents |
microsoft.graph.chatMessageHostedContent collection |
Content in a message hosted by Microsoft Teams - for example, images or code snippets. |
body |
microsoft.graph.itemBody |
|
subject |
stringNullable |
The subject of the chat message, in plaintext. |
importance |
microsoft.graph.chatMessageImportance |
|
onBehalfOf |
object |
User attribution of the message when bot sends a message on behalf of a user. |
replyToId |
stringNullable |
Read-only. ID of the parent chat message or root chat message of the thread. (Only applies to chat messages in channels, not chats.) |
etag |
stringNullable |
Read-only. Version number of the chat message. |
createdDateTime |
date-timeNullable |
Timestamp of when the chat message was created. |
mentions |
microsoft.graph.chatMessageMention collection |
List of entities mentioned in the chat message. Supported entities are: user, bot, team, channel, chat, and tag. |
summary |
stringNullable |
Summary text of the chat message that could be used for push notifications and summary views or fall back views. Only applies to channel chat messages, not chat messages in a chat. |
lastEditedDateTime |
date-timeNullable |
Read only. Timestamp when edits to the chat message were made. Triggers an 'Edited' flag in the Teams UI. If no edits are made the value is null. |
webUrl |
stringNullable |
Read-only. Link to the message in Microsoft Teams. |
Showing 15 of 26 properties. View all on Microsoft Learn →
JSON Representation
JSON representation
{
"id": "String",
"locale": "String",
"deletedDateTime": "String",
"hostedContents": "[...]",
"body": "microsoft.graph.itembody",
"subject": "String",
"importance": "microsoft.graph.chatmessageimportance",
"onBehalfOf": "{...}",
"replyToId": "String",
"etag": "String",
"createdDateTime": "String",
"mentions": "[...]",
"summary": "String",
"lastEditedDateTime": "String",
"webUrl": "String",
"messageHistory": "[...]",
"policyViolation": "{...}",
"messageType": "microsoft.graph.chatmessagetype",
"lastModifiedDateTime": "String",
"chatId": "String"
}
Graph Methods
Delegated access
App-only access
| Commands |
|---|
Clear-MgTeamChannelMessageReaction
|
Clear-MgTeamChannelMessageReplyReaction
|
New-MgChatMessage
|
New-MgChatPinnedMessage
|
Set-MgTeamChannelMessageReaction
|
Set-MgTeamChannelMessageReplyReaction
|
Code Examples
C# / .NET SDK
// Install: dotnet add package Microsoft.Graph
// Install: dotnet add package Azure.Identity
using Microsoft.Graph;
using Azure.Identity;
// Delegated permissions - interactive user sign-in
var scopes = new[] { "ChatMessage.Send" };
var options = new InteractiveBrowserCredentialOptions
{
ClientId = "YOUR_CLIENT_ID",
TenantId = "YOUR_TENANT_ID",
RedirectUri = new Uri("http://localhost")
};
var credential = new InteractiveBrowserCredential(options);
var graphClient = new GraphServiceClient(credential, scopes);
// Example: GET /me
var result = await graphClient.Me.GetAsync();
Console.WriteLine($"User: {result?.DisplayName}");
JavaScript / TypeScript
// npm install @azure/msal-browser @microsoft/microsoft-graph-client
import { PublicClientApplication } from "@azure/msal-browser";
import { Client } from "@microsoft/microsoft-graph-client";
import { AuthCodeMSALBrowserAuthenticationProvider } from
"@microsoft/microsoft-graph-client/authProviders/authCodeMsalBrowser";
const msalConfig = {
auth: {
clientId: "YOUR_CLIENT_ID",
authority: "https://login.microsoftonline.com/YOUR_TENANT_ID"
}
};
const pca = new PublicClientApplication(msalConfig);
await pca.initialize();
// Delegated: Login with required scope
const loginResponse = await pca.loginPopup({
scopes: ["ChatMessage.Send"]
});
const authProvider = new AuthCodeMSALBrowserAuthenticationProvider(pca, {
account: loginResponse.account,
scopes: ["ChatMessage.Send"],
interactionType: "popup"
});
const graphClient = Client.initWithMiddleware({ authProvider });
// Example: GET /me
const result = await graphClient.api("/me").get();
console.log(result);
PowerShell
# Install Microsoft Graph PowerShell module
Install-Module Microsoft.Graph -Scope CurrentUser
# Delegated access - interactive sign-in
Connect-MgGraph -Scopes "ChatMessage.Send"
# Verify connection
Get-MgContext | Select-Object Account, TenantId, Scopes
# Example: GET /me
$result = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/v1.0/me"
$result | ConvertTo-Json -Depth 5
# Always disconnect when done
Disconnect-MgGraph
Python
# pip install msgraph-sdk azure-identity
from azure.identity import InteractiveBrowserCredential, ClientSecretCredential
from msgraph import GraphServiceClient
import asyncio
# Delegated permissions - interactive browser sign-in
credential = InteractiveBrowserCredential(
client_id="YOUR_CLIENT_ID",
tenant_id="YOUR_TENANT_ID"
)
scopes = ["ChatMessage.Send"]
client = GraphServiceClient(credential, scopes)
async def get_data():
# Example: GET /me
result = await client.me.get()
print(f"User: {result.display_name}")
return result
asyncio.run(get_data())
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 ChatMessage.Send
4
Grant Admin Consent
Users can consent to this permission themselves during sign-in.