Messaging and Approvals Seem Like a Natural Pair

Messaging and approvals have a long history. I worked on several email-based approval applications in the 1980s and a Digital Equipment Corporation product called Electronic Business Documents in the early 1990s (this now-expired patent for electronic signatures is the last vestige of that project). Microsoft tried with Exchange Routing Objects, a technology first shipped in Exchange 5.5 Service Pack 1. Exchange Routing Objects failed to gain any traction in the market and Microsoft deprecated the feature after Exchange 2000.

The problem was not that organizations did not need approvals in email. That claim is easily disproved by the number of custom-built approval applications which exist. The difficulty for Microsoft was to build an easy-to-use approval framework which email could leverage. Other technical challenges became more important for Exchange, like driving down the cost of storage and delivering native data protection, and Microsoft never attempted to build business logic into message approvals in Exchange again.

Teams Approvals App

Which brings us to today and Approvals, a new app for Teams launched in January 2021 (MC231205). Users with an Office 365 F3 license or above can use Approvals unless an admin blocks the app or an app permissions policy denies access to users.

The keyword for Approvals is simplicity. This app does not try to boil the ocean. Instead, the app concentrates on helping users to create and manage simple approval interactions. I was going to say flow, but that implies the flows created through Power Automate. The items created by the Teams Approvals app use the Power Automate infrastructure but do not create flows with an approvals action. Instead, Power Automate manages the processing of requests from initiation to completion.

There’s no doubt that full-fledged flows can be very powerful (here’s a good example of a flow to control requests for new teams). The Teams Approval apps is suited for more basic scenarios, like asking for the issue of a replacement employee badge. Microsoft postulates that you could use Approvals to file expense reports, ask for time off, or request a discount for a customer. Although possible, these scenarios often need more oversight and regulation than Approvals can deliver (depending on applicable regulations) and other applications probably exist to handle these needs.

Basic Approval Flow

To allow users to access Approvals, you’ll need to use a Teams setup policy to install the app for them. They’ll then be able to:

  • Create and approve requests in chats and channel conversations. Requested can be viewed and approved using any Teams client, but only the desktop and browser clients can initiate new requests.
  • Review requests made and approved in the Approvals hub. Along with the requests made through Teams, users see workflow requests with approval actions created using Power Automate.
  • Receive notifications for approvals in their Activity feed (you can disable these notifications like other Teams notifications).

The best way to understand the value of an app is to see how it works. In Figure 1, a user has created an approval request after adding the Approvals app to a chat (the same process applies in channel conversations). Some points to note:

  • Only people already in the chat can be approvers. If you need someone specific to approve a request, start a new chat and create the approval request there or add them to an existing chat. For channel conversations, only team members can be approvers.
  • If the requester adds more than one approver to a request, Approvals sets Require a response from all approvers to On. If just one of the approvers is enough to OK a request, remember to set the option back to Off.
  • Add attachment browses for files from My Computer, not Teams Files.
Creating an Approvals request
Figure 1: Creating an Approvals request

Figure 1 doesn’t show the option to add custom responses. By default, an approver sees buttons to Reject or Approve. Sometimes, more tailored responses work better, so a requester can add their own custom responses, such as Yes and No, which the approver then sees in place of the standard buttons. After the approver selects an option, the requester will see which of the custom responses they choose.

Once the request is ready, click Send to dispatch it to Power Automate.

Viewing Requests

Power Automate stores requests in Dataverse (previously called the Common Data Service). Only the people involved in a request can interact with the request. Approvers access requests in the chat or channel where the Approvals app posts cards giving summary of the requests. Figure 2 shows a typical approval card.

An Approvals card in a channel conversation
Figure 2: An Approvals card in a channel conversation

Other people who aren’t involved in the request can see the card (and express their opinion with a reaction). For instance, any team member can see the approval cards posted in a channel, including guest members.

Although guest members can see approval cards and requesters can add guest members as approvers for a request, guests can’t respond to requests or create new requests. The root cause is possibly something to do with Power Automate licensing or lack of support in Power Automate for Azure B2B Collaboration, the basis for guest accounts. In this situation, the only thing the requester can do is to amend the request to have a tenant user deal with it or cancel the request..

Approving Requests

To deal with a request, the assigned approvers click the View details button to open the request. The Approvals app fetches the request from Dataverse and displays it for the approver (Figure 2), who can then approve or reject the item.

 Deciding to approve or reject a request
Figure 3: Deciding to approve or reject a request

In their original September 2020 announcement, Microsoft said that they are working with partners to include electronic signature capability in the Approvals app. So far, that hasn’t shown up.

Approvals Hub

Following a decision, the Approvals app informs the requester about the outcome by posting a notification in their activity feed and updating the approval card with the decision. It’s usual that people only have one or two active requests, so it’s easy for them to track the outcome in the chat or conversation. However, if you’ve got many requests in flight, you might need to open the Approvals app from the app navigation bar to head over to the Approvals hub (Figure 4) and see what’s happening.

The Teams Approval hub
Figure 4: The Teams Approval hub

The items shown in the Approvals hub don’t differentiate between requests made in chat or channel conversations. All workflow requests appear here, including other Power Automate workflows with approval actions that the user is involved with. Approvers can see the requests they’ve received and approve or reject requests from the hub.

Approvals and Environments

In the right-hand corner of Figure 4, you can see a drop-down list with the organization name (default) (Upgrade). This is the Power Automate environment hosting the approvals, which by default are created in your organization’s default Power Automate environment. This shouldn’t be an issue or affect any other Power Automate activity. An environment is simply a partition for work. For instance, if you install the sample Bulletins or Milestones apps for Teams, the installation process creates an environment named after the team which hosts the app, and the drop down list will show that team name as an option. Environments are managed through the Power Platform console.


Despite Microsoft recently announcing the capture of content from app cards for compliance purposes, this initiative does not cover Approvals. eDiscovery searches cannot find text contained in approval cards. This is disappointing. It’s obvious that information of interest to investigations might be communicated in requests which will remain invisible until Microsoft updates the app to generate compliance records like those created for adaptive cards.

On the upside, audit events of limited usefulness are captured for user interaction with the Approvals app, including:

  • ApprovedRequest: Approval was given to a request. No information is logged about who initiated the request or the request title.
  • CanceledApprovalRequest: A user cancelled a request.
  • CreatedApproval: A user initiated a new approval request.
  • RejectedApprovalRequest: An approver rejected a request.
  • ViewedApprovalRequest: A user viewed a request.
  • RespondedWithCustomResponse: An approver responded and used a custom response.

For example, here’s the audit data recorded for the initiation of a new approval request. There’s lots of information, but little of the data is useful in terms of understanding what the app is being used for. Something definitely happened, but this level of audit detail doesn’t tell an investigator anything.

CreationDate : 16/02/2021 15:09:09
UserIds      :
Operations   : CreatedApproval
AuditData    : {
                 "CreationTime": "2021-02-16T15:09:09",
                 "Id": "bdf96ae0-2256-4b02-9acb-08d8d28ccfe8",
                 "Operation": "CreatedApproval",
                 "OrganizationId": "b562313f-14fc-43a2-9a7a-d2e27f4f3478",
                 "RecordType": 92,
                 "UserKey": "eff5cd58-1bb8-4899-94de-795f656b4a18",
                 "UserType": "Regular",
                 "Version": 1,
                 "Workload": "MicrosoftTeams",
                 "ObjectId": "16dd766a-5701-470f-b263-03302a866e61",
                 "UserId": "",
                 "ItemName": "16dd766a-5701-470f-b263-03302a866e61"

These events give some insight into the overall level of activity for the Approvals app across a tenant, such as who’s creating and approving requests, but little else.

Simplicity is Key

If organizations want to create more complex workflows, they can head over to the Power Automate center and benefit from the hundreds of connectors, actions, and templates available there. And while considering which one of the reusable components is most suitable, users can take care of any outstanding requests they’ve been asked to approve (Figure 5). Isn’t integration wonderful!

An Approvals request waiting a response in the Power Automate center
Figure 5: An Approvals request waiting a response in the Power Automate center

The Teams Approvals app delivers very simple workflow. Although some might expect more, the simplicity of Approvals is attractive. It is very easy to use and requires no effort to set up and manage once deployed to users. The biggest flaw is the lack of support for guest users, which is a surprising omission given the number of guest accounts in many organizations.

Overall, I’m not sure how often I’ll use the Approvals app, but I do see the gem of something good here. Perhaps Microsoft could even use Approvals to create an out-of-the-box approval flow for new Teams to help tenants gain some control over group sprawl?

Interested in learning about some common mistakes made in Teams deployments? Join the February 24 webinar on the “Top Five Mistakes in Rushed Teams Deployments“!

About the Author

Tony Redmond

Tony Redmond has written thousands of articles about Microsoft technology since 1996. He is the lead author for the Office 365 for IT Pros eBook, the only book covering Office 365 that is updated monthly to keep pace with change in the cloud. Apart from contributing to, Tony also writes at to support the development of the eBook. He has been a Microsoft MVP since 2004.


  1. Tony Redmond

    There’s nothing in MC231205 to say that GCC can’t use the Approvals app. Have a look in the Teams admin center to see if the app shows up there.

  2. Chris Fadden

    Is this available to GCC tenants yet?

Leave a Reply