Use the Microsoft Graph API to work with Microsoft Teams

Microsoft Teams is a chat-based workspace in Microsoft 365 that provides built-in access to team-specific calendars, files, OneNote notes, Planner plans, Shifts schedules, and more.

Key resources in Microsoft Teams

Resource Methods
team List your teams, list all teams, create, read, update, delete, clone, archive, unarchive
group Add member, remove member, add owner, remove owner, get files, get notebook, get plans, get calendar
channel List, create, read, update, delete
teamsTab List, create, read, update, delete
teamsApp List, publish, update, remove
teamsAppInstallation List, install, upgrade, remove
chatMessage List in channel, list in chat, send, read in channel, read in chat
call Answer, reject, redirect, mute, unmute, change screen sharing role, list participants, invite participants
schedule Create or replace, get, share
schedulingGroup Create, list, get, replace, delete
activityFeedNotification Send notification to user in scope of a chat, send notification to user in scope of a team, send notification to user in personal scope
shift Create, list, get, replace, delete
timeOff Create, list, get, replace, delete
timeOffReason Create, list, get, replace, delete

Microsoft Teams limits

The tested performance and capacity limits of Microsoft Teams are documented in Limits and specifications for Microsoft Teams. These limits apply whether using Microsoft Teams directly or using Microsoft Graph APIs. Because every team has a corresponding group, and every group is a directory object, limits on the number of groups and the number of directory objects ("resources") can also come into play.

Files inside channels are stored in SharePoint; SharePoint online limits apply.

See also throttling limits for Microsoft Teams services.

Teams and groups

In Microsoft Graph, Microsoft Teams is represented by a group resource. Both Microsoft Teams and Microsoft 365 groups address the various needs of group collaboration. Almost all the group-based features apply to Microsoft Teams and Microsoft 365 groups, such as group calendar, files, notes, photo, plans, and so on. The main difference between a team and a Microsoft 365 group is the mode of communication between members. Team members communicate by persistent chat in the context of a specific team. Microsoft 365 group members communicate by group conversations, which are email conversations that occur in the context of a group in Outlook.

Any group that has a team has a resourceProvisioningOptions property that contains "Team".

Note: The Group.resourceProvisioningOptions property can be changed. Do not add or remove "Team" from that collection; otherwise, you'll get incorrect results when you list all teams.

The following are the differences at the API level between teams and groups:

Note: If you use the groups API in a Microsoft Teams app rather than in a standalone app - for example as part of a tab or bot running in Microsoft Teams - follow the guidance in the article Using Microsoft Graph in your Microsoft Teams pages.

Membership changes in Microsoft Teams

Use case Verb URL
Add member POST /teams/{team-id}/members
Remove member DELETE /teams/{team-id}/members/{membership-id}
Update member's role PATCH /teams/{team-id}/members/{membership-id}
Update team PATCH /teams/{team-id}

Polling requirements

If your app polls to see whether a resource has changed, you can only do that once per day. (teamsAsyncOperation is an exception in that it's intended to be polled frequently.) If you need to hear about changes more frequently than that, you should create a subscription to that resource and receive change notifications (webhooks). If you don't find support for the type of subscription you need, we encourage you to provide feedback via the Microsoft 365 Developer Platform ideas forum.

When polling for new messages, you must specify a date range where supported. For details, see get channel messages delta.

Polling is doing a GET operation on a resource over and over again to see if that resource has changed. You're allowed to GET the same resource multiple times a day, as long as it's not polling. For example, it is okay to GET /me/joinedTeams every time the user visits/refreshes your web page, but it is not okay to GET /me/joinedTeams in a loop every 30 seconds to refresh that web page.

Apps that don't follow these polling requirements will be considered in violation of the Microsoft APIs Terms of Use. This may result in additional throttling or the suspension or termination of your use of the Microsoft APIs.

What's new

Find out about the latest new features and updates for this API set.

See also