Microsoft Teams Adaptive Card JSON Generator for Approvals
Adaptive Cards are the JSON format Microsoft Teams uses for rich interactive messages. This generator outputs an approval card with a fact list, a comment box and decision buttons, ready to post from your ERP integration.
Fill in
Message body to POST to your Teams Workflows webhook URL
{
"type": "message",
"attachments": [
{
"contentType": "application/vnd.microsoft.card.adaptive",
"contentUrl": null,
"content": {
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.4",
"body": [
{ "type": "TextBlock", "text": "Purchase order approval needed", "weight": "Bolder", "size": "Medium", "wrap": true },
{ "type": "TextBlock", "text": "Submitted from ERP purchasing", "isSubtle": true, "wrap": true },
{
"type": "FactSet",
"facts": [
{ "title": "Requester", "value": "Rahul Mehta" },
{ "title": "Document", "value": "PO-48213" },
{ "title": "Vendor", "value": "Northline Castings" },
{ "title": "Amount", "value": "USD 18,450.00" },
{ "title": "Needed by", "value": "2026-11-12" }
]
},
{ "type": "Input.Text", "id": "comment", "isMultiline": true, "placeholder": "Add a comment (required for Reject)" }
],
"actions": [
{ "type": "Action.Submit", "title": "Approve", "style": "positive", "data": { "decision": "approve", "doc": "PO-48213" } },
{ "type": "Action.Submit", "title": "Reject", "style": "destructive", "data": { "decision": "reject", "doc": "PO-48213" } },
{ "type": "Action.OpenUrl", "title": "Open in ERP", "url": "https://erp.example.com/po/48213" }
]
}
}
]
}Action.Submit only returns data to a bot or an app that handles the submit. A plain incoming webhook cannot receive the click, so for a real approval loop use the Teams Approvals app, a Power Automate flow that waits for a response, or a bot. Validate the JSON in the Adaptive Cards designer and confirm the card version your Teams client supports.
Approvals from ERP into Teams
Optional: we can review your approval flows and suggest which are safe to move into Teams.
Optional. The tool and every export work without this. No spam.
How to use it
Fill in the document facts you want an approver to see without opening the ERP: requester, number, vendor, amount and need date. Copy the JSON and post it to the HTTP endpoint of a Teams Workflows flow that is set up to post a card to a chat or channel. Keep the Open in ERP link so the approver can drill down when the facts are not enough. Test in a private channel first, and keep the card short, because approvers act on mobile.
Getting the decision back
A card is only half an approval. The decision must reach your system and be recorded against the document. There are three practical routes: a Power Automate approval action that posts its own card and returns the outcome, a bot registered in Azure that receives the Action.Submit payload, or a link button that opens an ERP approval page with single sign-on. Pick the one your security team accepts, and write the approver identity and time to the audit trail.
- Never approve based only on a name typed in a field
- Record the Entra ID user that clicked
- Make decisions idempotent so a double click is harmless
Common mistakes
Frequent problems include setting a card version newer than the client supports, forgetting wrap on long text so values truncate, hardcoding a webhook URL in source control, and stuffing a whole line item table into the card. Retired Office 365 connector webhooks are being replaced by Workflows, so check which one your tenant uses. Escape quotes in vendor names before inserting values into JSON in code.
Frequently Asked Questions
Can I use this card with a classic incoming webhook?
Display works, but button clicks cannot return to a plain webhook. Use a Workflows or Power Automate flow, a bot, or link buttons that open a page in your system.
What card version should I choose?
Version 1.4 renders broadly in Teams. Newer versions add features such as Action.Execute with refresh, but you must confirm client support in your tenant.
How do I show a table of line items?
Use a ColumnSet for a few rows, or show a count and total with a link to the ERP for the full list. Large tables make cards hard to read on a phone.
Is the card secure for financial approvals?
Security depends on the receiving side. Authenticate the clicking user, verify they hold approval rights in the ERP, and log the decision. The card JSON itself is only a display format.
Netray can connect your ERP approval workflows to Teams with read-only defaults and human approval on every write-back.
Related Tools
Slack Block Kit Approval Message Generator
Creates a chat.postMessage body with Block Kit sections, fields and Approve and Reject action buttons for ERP approval workflows.
ERP OperationsERP Notification Matrix Worksheet
Map every ERP event to an audience, channel, priority and template, and see monthly volume per channel before you build.
Compliance & ContractsMessaging Integration Security Checklist
A 30 point checklist covering tokens, webhook verification, approver identity, data minimization, logging and incident handling for chat integrations.
ERP OperationsMessaging Channel SLA and Escalation Worksheet
Define how fast each alert type must be acknowledged, who is escalated to and which fallback channel is used. Exports to Excel.
More Developer Tools tools
See all- SAP Sales Order ABAP SELECT Generator (VBAK, VBAP, VBFA)
- SAP Sales Order Create BAPI ABAP Generator (BAPI_SALESORDER_CREATEFROMDAT2)
- SAP ABAP Open Items SELECT Generator
- SAP ACDOCA SQL Query Generator
- SAP QM Inspection Lot ABAP SELECT Generator
- SAP Quality Notification Pareto SQL Query Generator
- SAP QM Usage Decision BAPI Skeleton
- ABAP Custom Exception Class Generator
- ABAP Unit Test Class Generator