Building and customizing solutions using Microsoft 365 Copilot APIs and tools
Microsoft 365 Copilot declarative agent Action.Execute ignores verb and card inputs and replays the original API request
I am developing a Microsoft 365 Copilot declarative agent with an OpenAPI API plugin and an Adaptive Card. The Adaptive Card is displayed successfully, but its Action.Execute submit button does not invoke the configured function or pass the card inputs.
I originally reported this to the Microsoft 365 Agents Toolkit repository. A Toolkit contributor reviewed the issue and advised that it appears to be a Microsoft 365 Copilot platform runtime issue rather than an Agents Toolkit issue.
Original report: https://github.com/OfficeDev/microsoft-365-agents-toolkit/issues/16467
Configuration
The API plugin contains two functions:
showFeedbackForm displays the feedback Adaptive Card.
submitFeedback receives the rating and comments and sends them to the backend.
The button in the displayed Adaptive Card is configured as follows:
{
"type": "Action.Execute",
"id": "submitFeedbackAction",
"verb": "submitFeedback",
"title": "Submit feedback",
"associatedInputs": "auto",
"data": {
"agentArea": "${agentArea}",
"agentVersion": "${agentVersion}"
}
}
The card contains these inputs:
{
"type": "Input.ChoiceSet",
"id": "rating",
"isRequired": true
}
{
"type": "Input.Text",
"id": "comments",
"isMultiline": true,
"maxLength": 2000
}
The plugin function name, Adaptive Card verb, and OpenAPI operationId all use the exact same value:
submitFeedback
Expected behaviour
After the user selects a rating, enters comments and selects Submit feedback, the Microsoft 365 Copilot client should:
Collect the rating and comments fields because associatedInputs is set to auto.
Merge those values with agentArea and agentVersion from the action’s data.
Invoke the submitFeedback plugin function.
Send a request similar to:
{
"rating": "6",
"comments": "The response was helpful.",
"agentArea": "GMLP",
"agentVersion": "1.0.0"
}
Render the response template associated with submitFeedback.
Actual behaviour
When the button is selected:
The card visually refreshes.
submitFeedback is not invoked.
The submission endpoint receives no request.
The original showFeedbackForm API request is invoked again.
The selected rating, comments, configured verb, and action data are ignored.
The repeated request is:
{
"mode": "show",
"agentArea": "GMLP",
"agentVersion": "1.0.0"
}
As a result, the display flow runs again, the same form reappears, and no feedback is stored.
Controlled same-function test
To rule out a cross-function or cross-runtime routing issue, I changed the button to call the same function that originally displayed the card and supplied hard-coded data:
{
"type": "Action.Execute",
"id": "sameRuntimeExecuteTest",
"verb": "showFeedbackForm",
"title": "Test Action.Execute",
"associatedInputs": "none",
"data": {
"mode": "submit",
"rating": "6",
"comments": "SAME-RUNTIME-ACTION-EXECUTE-TEST",
"agentArea": "GMLP",
"agentVersion": "1.0.0"
}
}
The button click generated another request, but the client discarded all the hard-coded action data and repeated the original request:
{
"mode": "show",
"agentArea": "GMLP",
"agentVersion": "1.0.0"
}
This indicates that the button click is detected, but the Microsoft 365 Copilot client does not process the Action.Execute verb or data.
Validation already completed
I have confirmed that:
Both plugin functions are discovered by the declarative agent.
API-key authentication succeeds.
The display endpoint returns HTTP 200.
The Adaptive Card is correctly included in the deployed application package.
The card verb matches the plugin function name and OpenAPI operationId.
associatedInputs was tested with both auto and none.
Direct conversational invocation of submitFeedback works.
Direct invocation sends the correct rating and comments to the backend.
The backend flow processes the request and stores the values successfully.
The issue occurs only when the function is initiated through the Adaptive Card button.
The same-function and separate-function tests produce the same request-replay behaviour.
The test was repeated in a new conversation after provisioning an increased application version.
Environment
Agent type: Microsoft 365 Copilot declarative agent
Client: Microsoft 365 Copilot web (M365ChatClient)
Development method: Microsoft 365 Agents Toolkit extension for Visual Studio Code
Toolkit extension version: 6.13.2026072312
Declarative agent app version tested: 1.0.8
API plugin manifest schema: v2.4
Adaptive Card schema: 1.5
Deployment scope: Personal
Operating system: Windows 10, 64-bit
CLI used: No
Questions
Could you please confirm:
Is Action.Execute currently supported for this declarative-agent and OpenAPI-plugin scenario in Microsoft 365 Copilot web?
Is this feature controlled by a tenant or client rollout?
Is it unsupported when an advanced declarative agent is deployed at personal scope?
Is replaying the original API request instead of sending the action’s verb, data, and associated inputs a known platform-runtime issue?
Is there an alternative supported method for submitting user-entered Adaptive Card data from a declarative agent?
I can provide a sanitised minimal reproduction containing the plugin manifest, Adaptive Card templates and OpenAPI specifications. Tenant IDs, API signatures, workflow IDs, SharePoint addresses and internal identifiers have been removed.
I am developing a Microsoft 365 Copilot declarative agent with an OpenAPI API plugin and an Adaptive Card. The Adaptive Card is displayed successfully, but its Action.Execute submit button does not invoke the configured function or pass the card inputs.
I originally reported this to the Microsoft 365 Agents Toolkit repository. A Toolkit contributor reviewed the issue and advised that it appears to be a Microsoft 365 Copilot platform runtime issue rather than an Agents Toolkit issue.
Original report: [insert the URL of the original GitHub issue]
Configuration
The API plugin contains two functions:
showFeedbackForm displays the feedback Adaptive Card.
submitFeedback receives the rating and comments and sends them to the backend.
The button in the displayed Adaptive Card is configured as follows:
{
"type": "Action.Execute",
"id": "submitFeedbackAction",
"verb": "submitFeedback",
"title": "Submit feedback",
"associatedInputs": "auto",
"data": {
"agentArea": "${agentArea}",
"agentVersion": "${agentVersion}"
}
}
The card contains these inputs:
{
"type": "Input.ChoiceSet",
"id": "rating",
"isRequired": true
}
{
"type": "Input.Text",
"id": "comments",
"isMultiline": true,
"maxLength": 2000
}
The plugin function name, Adaptive Card verb, and OpenAPI operationId all use the exact same value:
submitFeedback
Expected behaviour
After the user selects a rating, enters comments and selects Submit feedback, the Microsoft 365 Copilot client should:
Collect the rating and comments fields because associatedInputs is set to auto.
Merge those values with agentArea and agentVersion from the action’s data.
Invoke the submitFeedback plugin function.
Send a request similar to:
{
"rating": "6",
"comments": "The response was helpful.",
"agentArea": "GMLP",
"agentVersion": "1.0.0"
}
Render the response template associated with submitFeedback.
Actual behaviour
When the button is selected:
The card visually refreshes.
submitFeedback is not invoked.
The submission endpoint receives no request.
The original showFeedbackForm API request is invoked again.
The selected rating, comments, configured verb, and action data are ignored.
The repeated request is:
{
"mode": "show",
"agentArea": "GMLP",
"agentVersion": "1.0.0"
}
As a result, the display flow runs again, the same form reappears, and no feedback is stored.
Controlled same-function test
To rule out a cross-function or cross-runtime routing issue, I changed the button to call the same function that originally displayed the card and supplied hard-coded data:
{
"type": "Action.Execute",
"id": "sameRuntimeExecuteTest",
"verb": "showFeedbackForm",
"title": "Test Action.Execute",
"associatedInputs": "none",
"data": {
"mode": "submit",
"rating": "6",
"comments": "SAME-RUNTIME-ACTION-EXECUTE-TEST",
"agentArea": "GMLP",
"agentVersion": "1.0.0"
}
}
The button click generated another request, but the client discarded all the hard-coded action data and repeated the original request:
{
"mode": "show",
"agentArea": "GMLP",
"agentVersion": "1.0.0"
}
This indicates that the button click is detected, but the Microsoft 365 Copilot client does not process the Action.Execute verb or data.
Validation already completed
I have confirmed that:
Both plugin functions are discovered by the declarative agent.
API-key authentication succeeds.
The display endpoint returns HTTP 200.
The Adaptive Card is correctly included in the deployed application package.
The card verb matches the plugin function name and OpenAPI operationId.
associatedInputs was tested with both auto and none.
Direct conversational invocation of submitFeedback works.
Direct invocation sends the correct rating and comments to the backend.
The backend flow processes the request and stores the values successfully.
The issue occurs only when the function is initiated through the Adaptive Card button.
The same-function and separate-function tests produce the same request-replay behaviour.
The test was repeated in a new conversation after provisioning an increased application version.
Environment
Agent type: Microsoft 365 Copilot declarative agent
Client: Microsoft 365 Copilot web (M365ChatClient)
Development method: Microsoft 365 Agents Toolkit extension for Visual Studio Code
Toolkit extension version: 6.13.2026072312
Declarative agent app version tested: 1.0.8
API plugin manifest schema: v2.4
Adaptive Card schema: 1.5
Deployment scope: Personal
Operating system: Windows 10, 64-bit
CLI used: No
Questions
Could you please confirm:
Is Action.Execute currently supported for this declarative-agent and OpenAPI-plugin scenario in Microsoft 365 Copilot web?
Is this feature controlled by a tenant or client rollout?
Is it unsupported when an advanced declarative agent is deployed at personal scope?
Is replaying the original API request instead of sending the action’s verb, data, and associated inputs a known platform-runtime issue?
Is there an alternative supported method for submitting user-entered Adaptive Card data from a declarative agent?
I can provide a sanitised minimal reproduction containing the plugin manifest, Adaptive Card templates and OpenAPI specifications. Tenant IDs, API signatures, workflow IDs, SharePoint addresses and internal identifiers have been removed.