![]()
Adaptive Cards are flexible, lightweight UI snippets for presenting information in a visually rich way. While Power Pages (formerly Power Apps Portals) don’t natively support Adaptive Cards directly in forms or lists, you can embed them using a mix of custom HTML, JavaScript, and web templates—often combined with Power Automate or Power Virtual Agents.
Use Cases
- Show personalized dashboard cards
 - Display notifications or approval status
 - Integrate chatbot responses (e.g., Power Virtual Agents)
 - Render data dynamically (e.g., ticket summaries, alerts)
 
How to Implement Adaptive Cards
Option 1: Embed Static Adaptive Cards
- Use the Adaptive Cards Designer to build your JSON card layout.
 - In your Power Pages Web Template, use the HTML + JavaScript to render it: 
<div id="adaptiveCardContainer"></div> <script src="https://unpkg.com/adaptivecards/dist/adaptivecards.min.js"></script> <script> const card = { "type": "AdaptiveCard", "body": [ { "type": "TextBlock", "text": "Hello from Power Pages!", "size": "Large" } ], "actions": [ { "type": "Action.OpenUrl", "title": "More Info", "url": "https://yourportal.com" } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.4" }; const adaptiveCard = new AdaptiveCards.AdaptiveCard(); adaptiveCard.parse(card); const renderedCard = adaptiveCard.render(); document.getElementById("adaptiveCardContainer").appendChild(renderedCard); </script> 
Option 2: Dynamic Adaptive Cards from Power Automate
- Trigger a Power Automate Flow via form submission or portal event.
 - Generate an Adaptive Card payload in the flow.
 - Send back the card to be rendered in Power Pages via API or context variable.
 - Use Liquid/JavaScript to inject the dynamic JSON card into the page.
 
Option 3: Use with Power Virtual Agents
- Power Virtual Agents bots embedded in Power Pages can return Adaptive Cards as part of conversation.
 - Ensure the chat is set up correctly, and cards are built within the PVA bot using standard templates.
 
Security Tips
- Never include sensitive user data directly in the card without verifying roles/permissions.
 - Sanitize any dynamic inputs in the card payload.
 - Ensure actions (like OpenUrl or Submit) are secure and validated.
 
