Tool · Power Automate · Teams

Adaptive Card Builder

Build a Microsoft Teams card for Power Automate from a template, see it exactly as Teams shows it, and copy the JSON plus the expressions to read the reply.

Works with
  • Power Automate
  • Teams

Header

Facts

Inputs

Buttons

Teams preview

Use it in Power Automate

  1. Add the Teams action Post adaptive card and wait for a response (people reply with the buttons or inputs).
  2. Choose who it goes to, then paste this JSON into the Message / Adaptive Card box. Swap sample text for dynamic content where you need it.
{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.4",
  "body": [
    {
      "type": "Container",
      "style": "accent",
      "bleed": true,
      "items": [
        {
          "type": "TextBlock",
          "text": "Purchase request",
          "weight": "Bolder",
          "size": "Large",
          "wrap": true
        },
        {
          "type": "TextBlock",
          "text": "Needs your approval",
          "isSubtle": true,
          "spacing": "None",
          "wrap": true
        }
      ]
    },
    {
      "type": "TextBlock",
      "text": "Alex Morgan has asked for approval to buy new laptops for the design team.",
      "wrap": true
    },
    {
      "type": "FactSet",
      "facts": [
        {
          "title": "Requested by",
          "value": "Alex Morgan"
        },
        {
          "title": "Amount",
          "value": "$1,250.00"
        },
        {
          "title": "Needed by",
          "value": "30 October 2026"
        }
      ]
    },
    {
      "type": "Input.Text",
      "id": "comment",
      "label": "Comment (optional)",
      "isRequired": false,
      "isMultiline": true
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "id": "approve",
      "title": "Approve",
      "data": {
        "action": "approve"
      }
    },
    {
      "type": "Action.Submit",
      "id": "reject",
      "title": "Reject",
      "data": {
        "action": "reject"
      }
    }
  ]
}

Read the reply in later steps

Which button was pressed

body('Post_adaptive_card_and_wait_for_a_response')?['data']?['action']

Comment (optional)

body('Post_adaptive_card_and_wait_for_a_response')?['data']?['comment']

Who responded (email)

body('Post_adaptive_card_and_wait_for_a_response')?['responder']?['userPrincipalName']

Questions

FAQ

Which Power Automate action do I use?
For a card that only shows information, use "Post card in a chat or channel". For approvals and forms, use "Post adaptive card and wait for a response": the flow pauses until someone presses a button, then continues with their answer.
How do I put dynamic content in the card?
Paste the JSON into the action first, then replace the sample text inside the quotes with dynamic content or an expression such as @{triggerBody()?['name']}. Keep the quotes around it.
My card breaks when the data has quotes or line breaks. Why?
Card JSON is text, so a quote inside your data ends the string early. Wrap risky values in an expression that escapes them, for example replace(variables('comment'), '"', '\"').
Why version 1.4?
Teams supports newer features in some places, but version 1.4 works reliably with the Power Automate Teams actions on desktop, web and mobile.
Is the preview exact?
It uses Microsoft’s official Adaptive Cards renderer with colors and spacing close to Teams. Fonts and small details can differ slightly between the Teams desktop, web and mobile apps.

↑ ↓ moveEnter open