{"id":46418,"date":"2026-10-06T16:29:40","date_gmt":"2026-10-06T10:59:40","guid":{"rendered":"https:\/\/www.inogic.com\/blog\/?p=46418"},"modified":"2026-10-06T16:29:40","modified_gmt":"2026-10-06T10:59:40","slug":"web-api-plugin-for-declarative-agents-in-microsoft-365-copilot","status":"publish","type":"post","link":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/","title":{"rendered":"Web API Plugin for Declarative Agents in Microsoft 365 Copilot"},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignnone size-full wp-image-46432\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner.png\" alt=\"Web API Plugin for Declarative Agents in Microsoft 365 Copilot\" width=\"2100\" height=\"1200\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner.png 2100w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner-300x171.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner-1024x585.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner-768x439.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner-1536x878.png 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner-2048x1170.png 2048w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner-660x377.png 660w\" sizes=\"(max-width: 2100px) 100vw, 2100px\" \/><br \/>\nSales and business users often need quick access to CRM information such as customer names, telephone numbers, revenue, location, and account details.<\/p>\n<p>we will build a real world Account Assistant that connects Microsoft 365 Copilot to an existing ASP.NET Core REST API. The REST API queries the Microsoft Dataverse Account table and exposes an account-search operation through an OpenAPI definition.<\/p>\n<p>We will then use Microsoft 365 Agents Toolkit to create an API plugin for a declarative agent and make the API available to Microsoft 365 Copilot.<\/p>\n<p>Suppose a sales representative asks:<\/p>\n<p>&#8220;Find Contoso.&#8221;<\/p>\n<p>Instead of opening Dynamics 365 and manually searching the Account table, the user can ask the same question through the custom agent in Microsoft 365 Copilot.<\/p>\n<p>The agent identifies that an account-search operation is required, sends the search term to our API, and the API queries Dataverse.<\/p>\n<h2><strong>Key Takeaways<\/strong><\/h2>\n<ul>\n<li>Reuse your existing REST API with Copilot, no rebuild needed.<\/li>\n<li>Write a clear OpenAPI description so the agent knows when to call it.<\/li>\n<li>Test locally first, then expose the API over HTTPS (ngrok works for demos).<\/li>\n<li>Let Agents Toolkit generate the plugin from your OpenAPI file.<\/li>\n<li>Enable custom app upload and Copilot access before testing.<\/li>\n<\/ul>\n<h2><strong>Prerequisites<br \/>\n<\/strong><\/h2>\n<p>Before starting, make sure you have:<\/p>\n<ol>\n<li>Visual Studio Code<\/li>\n<li>NET SDK<\/li>\n<li>An ASP.NET Core Web API project<\/li>\n<li>Microsoft Dataverse environment<\/li>\n<li>Microsoft Entra application registration<\/li>\n<li>ngrok (we have taken this you can use your own)<\/li>\n<li>Microsoft 365 account<\/li>\n<li>Microsoft 365 Agents Toolkit<\/li>\n<li>Permission to upload custom applications in the Microsoft 365 environment<\/li>\n<\/ol>\n<h3><strong>Step 1: Create the .NET Folder and API Project<br \/>\n<\/strong><\/h3>\n<p>Create a folder for the demonstration and create the ASP.NET Core Web API project.<\/p>\n<p>dotnet new webapi -n CustomerCreditApi<\/p>\n<p>Open the project in Visual Studio Code.<\/p>\n<p>The project contains the API code that will eventually sit between Microsoft 365 Copilot and Dataverse.<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-46421 size-full\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-1.png\" alt=\"Create the .NET Folder and API Project\" width=\"1437\" height=\"854\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-1.png 1437w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-1-300x178.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-1-1024x609.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-1-768x456.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-1-660x392.png 660w\" sizes=\"(max-width: 1437px) 100vw, 1437px\" \/><\/p>\n<h3><strong>Step 2: Build and Test the API Locally<\/strong><\/h3>\n<p>The API was configured to connect to Dataverse using an application identity.<\/p>\n<p>The Dataverse service obtains an access token and calls the Dataverse Web API.<\/p>\n<p>The Account endpoint exposes:<\/p>\n<p>GET \/api\/account\/search?search=Contoso<\/p>\n<p>Run the project:<\/p>\n<p>dotnet run<\/p>\n<p>The API runs locally on:<\/p>\n<p>http:\/\/localhost:5041<\/p>\n<p>Test the endpoint:<\/p>\n<p>http:\/\/localhost:5041\/api\/account\/search?search=Contoso<\/p>\n<p>The API returns the matching Dataverse Account records.<\/p>\n<p>For example:<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-46422\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-2.png\" alt=\"\" width=\"1433\" height=\"853\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-2.png 1433w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-2-300x179.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-2-1024x610.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-2-768x457.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-2-660x393.png 660w\" sizes=\"(max-width: 1433px) 100vw, 1433px\" \/><\/p>\n<h3><strong>Step 3: Test the API Locally with Azure\/Entra App Registration<br \/>\n<\/strong><\/h3>\n<p>Before exposing the API to Microsoft 365 Copilot, verify that the complete API \u2192 Microsoft Entra ID \u2192 Dataverse connection works locally.<\/p>\n<p>Create\/configure an application registration in the Microsoft Entra admin center \/ Azure portal and use:<\/p>\n<ul>\n<li>Tenant ID<\/li>\n<li>Client ID<\/li>\n<li>Client Secret<\/li>\n<li>Dataverse environment URL<\/li>\n<\/ul>\n<p>in the API configuration.<\/p>\n<p>For example:<\/p>\n<pre class=\"lang:css gutter:true start:1\">{\r\n\"Dataverse\": {\r\n\"Url\": \"<a href=\"https:\/\/your\/\">https:\/\/your<\/a><a href=\"https:\/\/azuremapcopilot.api.crm.dynamics.com\/\">url.api.crm.dynamics.com<\/a>\",\r\n\"TenantId\": \"&lt;TENANT-ID&gt;\",\r\n\"ClientId\": \"&lt;CLIENT-ID&gt;\",\r\n\"ClientSecret\": \"&lt;CLIENT-SECRET&gt;\"\r\n}\r\n}\r\n<\/pre>\n<p>The API uses these credentials to obtain an access token and call the Dataverse Web API.<\/p>\n<p>Run the API:<\/p>\n<p>dotnet run<\/p>\n<p>Then test locally:<\/p>\n<p>http:\/\/localhost:5041\/api\/account\/search?search=Contoso<\/p>\n<p>If the configuration and Dataverse permissions are correct, the API should return the real Account records from Dataverse.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-46423\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-3.png\" alt=\"\" width=\"1437\" height=\"605\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-3.png 1437w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-3-300x126.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-3-1024x431.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-3-768x323.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-3-660x278.png 660w\" sizes=\"(max-width: 1437px) 100vw, 1437px\" \/><\/p>\n<h3><strong>Step 4: Install and Configure ngrok<br \/>\n<\/strong><\/h3>\n<p>Now that the API has been successfully tested locally, expose it through a public HTTPS endpoint so Microsoft 365 services can reach it.<\/p>\n<p>Start the API:<\/p>\n<p>dotnet run<\/p>\n<p>Then start ngrok:<\/p>\n<p>ngrok http 5041<\/p>\n<p>ngrok provides a public HTTPS URL:<\/p>\n<p>https:\/\/&lt;your-ngrok-domain&gt;.ngrok-free.dev<\/p>\n<p>The Account Search endpoint can then be accessed as:<\/p>\n<p>https:\/\/&lt;your-ngrok-domain&gt;.ngrok-free.dev\/api\/account\/search?search=Contoso<\/p>\n<p>Test this URL and confirm that it returns the same Dataverse data as the local endpoint.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-46424\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-4.png\" alt=\"\" width=\"1439\" height=\"591\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-4.png 1439w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-4-300x123.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-4-1024x421.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-4-768x315.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-4-660x271.png 660w\" sizes=\"(max-width: 1439px) 100vw, 1439px\" \/> <img decoding=\"async\" class=\"alignnone size-full wp-image-46425\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-5.png\" alt=\"\" width=\"1439\" height=\"815\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-5.png 1439w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-5-300x170.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-5-1024x580.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-5-768x435.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-5-660x374.png 660w\" sizes=\"(max-width: 1439px) 100vw, 1439px\" \/><\/p>\n<h3><strong>Step 5: Add the OpenAPI Definition and Connect the Toolkit to the Environment<br \/>\n<\/strong><\/h3>\n<p>The REST API is described using an openapi.json file.<\/p>\n<p>The OpenAPI definition describes the operation:<\/p>\n<p>GET \/api\/account\/search<\/p>\n<p>and its parameter:<\/p>\n<p>search<\/p>\n<p>The operation description is important because it helps the agent understand when the API operation should be used.<\/p>\n<p>For example:<\/p>\n<p>Search active Dataverse Account records by account name. Use this operation when the user asks to find, search, or look up an account.<\/p>\n<p>Using Microsoft 365 Agents Toolkit, create a Declarative Agent and add an action based on the existing OpenAPI description.<\/p>\n<p>The toolkit generates the plugin project containing the required configuration and manifest files.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-46426\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-6.png\" alt=\"\" width=\"1434\" height=\"853\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-6.png 1434w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-6-300x178.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-6-1024x609.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-6-768x457.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-6-660x393.png 660w\" sizes=\"(max-width: 1434px) 100vw, 1434px\" \/><\/p>\n<h3>Step 6: Install Microsoft 365 Agents Toolkit<\/h3>\n<p>Now that the REST API is working and publicly accessible, the next component is the Microsoft 365 Agents Toolkit.<\/p>\n<p>Open Visual Studio Code and install:<\/p>\n<p>Microsoft 365 Agents Toolkit<\/p>\n<p>The toolkit is used to create and package the API plugin for the Microsoft 365 declarative agent.<\/p>\n<p>Instead of manually creating the plugin structure, the toolkit can generate the required project from an existing OpenAPI description.<\/p>\n<p>Keep both windows (dotnet run and ngrok) running.<\/p>\n<ol>\n<li>Make sure your openapi.json is the corrected version. It should have &#8220;schemes&#8221;: [&#8220;https&#8221;], &#8220;host&#8221;: &#8220;untracked-napped-hydrant.ngrok-free.dev&#8221;, and the x-nullable fields (the file I gave you earlier).<\/li>\n<li>Create the project.<\/li>\n<li>Click the Agents Toolkit icon, then Create a New Agent\/App.<\/li>\n<li>Select Declarative Agent.<\/li>\n<li>Select Add an Action.<\/li>\n<li>Select Start with an OpenAPI Description Document.<\/li>\n<li>Select Browse and pick your json.<\/li>\n<li>Tick GET \/api\/account\/search and click OK.<\/li>\n<li>Choose a folder outside your API project<\/li>\n<li>Name it AccountAssistant.<\/li>\n<\/ol>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-46427\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-7.png\" alt=\"\" width=\"1439\" height=\"850\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-7.png 1439w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-7-300x177.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-7-1024x605.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-7-768x454.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-7-660x390.png 660w\" sizes=\"(max-width: 1439px) 100vw, 1439px\" \/><\/p>\n<h3>Step 7: Enable Custom App Upload in the Microsoft 365 Admin Center<\/h3>\n<p>Before testing the custom agent in Microsoft 365, ensure that the environment allows custom application uploads and that the required Microsoft Copilot access is enabled for the test account.<\/p>\n<p>This is an administrative configuration step and does not require any changes to the API or application code.<\/p>\n<ul>\n<li>Open the <a href=\"https:\/\/admin.teams.microsoft.com\/\" target=\"_blank\" rel=\"noopener\">Microsoft Teams Admin Center<\/a>.<\/li>\n<li>Navigate to Teams apps \u2192 Setup policies \u2192 App setup policies.<\/li>\n<li>Select the relevant app setup policy assigned to the test users.<\/li>\n<li>Verify that Upload custom apps is enabled\/allowed.<\/li>\n<li>Ensure the test account has the required Microsoft Copilot access\/licensing.<\/li>\n<li>Save the changes and allow some time for the policy to propagate before testing the custom agent.<\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-46428\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-8.png\" alt=\"\" width=\"1439\" height=\"767\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-8.png 1439w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-8-300x160.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-8-1024x546.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-8-768x409.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-8-660x352.png 660w\" sizes=\"(max-width: 1439px) 100vw, 1439px\" \/><\/p>\n<h3><strong>Step 8: Apply Provisioning<\/strong><\/h3>\n<p>Once the plugin project is configured, use the Provision action from Microsoft 365 Agents Toolkit.<\/p>\n<p>The provisioning process deploys the required application\/plugin configuration to the Microsoft 365 environment.<\/p>\n<p>The toolkit may request authentication or application information depending on the plugin configuration.<\/p>\n<p>After successful provisioning, the API plugin is ready to be tested with the declarative agent.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-46429\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-9.png\" alt=\"\" width=\"1439\" height=\"852\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-9.png 1439w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-9-300x178.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-9-1024x606.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-9-768x455.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-9-660x391.png 660w\" sizes=\"(max-width: 1439px) 100vw, 1439px\" \/><\/p>\n<h3><strong>Step 9: Check the Custom Agent<\/strong><\/h3>\n<p>After provisioning, open Microsoft 365 Copilot and verify that the custom Account Assistant agent is available.<\/p>\n<p>The important thing to verify at this stage is that the agent appears and can be selected.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-46430\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-10.png\" alt=\"\" width=\"1439\" height=\"771\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-10.png 1439w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-10-300x161.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-10-1024x549.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-10-768x411.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-10-660x354.png 660w\" sizes=\"(max-width: 1439px) 100vw, 1439px\" \/><\/p>\n<h3><strong>Step 10: Test the Account Assistant with Real Dataverse Data<\/strong><\/h3>\n<p>Now comes the most important part of the demonstration.<\/p>\n<p>Instead of using mocked data, ask the agent a real question against the Dataverse Account table.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-46431\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-11.png\" alt=\"\" width=\"1200\" height=\"760\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-11.png 1200w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-11-300x190.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-11-1024x649.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-11-768x486.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Technical-Blog-Image-11-660x418.png 660w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/p>\n<h2><strong>Conclusion:<\/strong><\/h2>\n<p>This walkthrough showed how to connect a real Dataverse Account API to Microsoft 365 Copilot using an API plugin and declarative agent. The same approach can be extended to expose additional CRM operations and business data through Copilot.<\/p>\n<h2><strong>FAQs<\/strong><\/h2>\n<p><strong>What is an API plugin for a declarative agent in Microsoft 365 Copilot?<\/strong><br \/>\nIt lets a custom agent in Copilot call your existing REST API, described by an OpenAPI file, to fetch or act on business data.<\/p>\n<p><strong>How do I connect a REST API to Microsoft 365 Copilot?<\/strong><br \/>\nDescribe the API in an OpenAPI file, then use Microsoft 365 Agents Toolkit to generate a declarative agent with an API plugin. Provision it and test it in Copilot.<\/p>\n<p><strong>Can Microsoft 365 Copilot query Dataverse data?<\/strong><br \/>\nYes, through your API. The API authenticates to Dataverse and returns the matching records, such as accounts, to the agent.<br \/>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [{\n    \"@type\": \"Question\",\n    \"name\": \"What is an API plugin for a declarative agent in Microsoft 365 Copilot?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"It lets a custom agent in Copilot call your existing REST API, described by an OpenAPI file, to fetch or act on business data.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"How do I connect a REST API to Microsoft 365 Copilot?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Describe the API in an OpenAPI file, then use Microsoft 365 Agents Toolkit to generate a declarative agent with an API plugin. Provision it and test it in Copilot.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"Can Microsoft 365 Copilot query Dataverse data?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Yes, through your API. The API authenticates to Dataverse and returns the matching records, such as accounts, to the agent.\"\n    }\n  }]\n}\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sales and business users often need quick access to CRM information such as customer names, telephone numbers, revenue, location, and account details. we will build a real world Account Assistant that connects Microsoft 365 Copilot to an existing ASP.NET Core REST API. The REST API queries the Microsoft Dataverse Account table and exposes an account-search\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/\">Read More: Web API Plugin for Declarative Agents in Microsoft 365 Copilot &raquo;<\/a><\/span><\/p>\n","protected":false},"author":15,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2746,2361,65],"tags":[],"class_list":["post-46418","post","type-post","status-publish","format-standard","hentry","category-copilot","category-technical","category-webapi"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"Learn how to connect a REST API to Microsoft 365 Copilot using an API plugin, OpenAPI, Agents Toolkit, ASP.NET Core, and Dataverse.\" \/>\n\t<meta name=\"robots\" content=\"max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n\t<meta name=\"author\" content=\"Sam Kumar\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Microsoft Dynamics 365 CRM Tips and Tricks - By Inogic\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"API Plugin for Microsoft 365 Copilot: Connect REST API to Dataverse\" \/>\n\t\t<meta property=\"og:description\" content=\"Learn how to connect a REST API to Microsoft 365 Copilot using an API plugin, OpenAPI, Agents Toolkit, ASP.NET Core, and Dataverse.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner.png\" \/>\n\t\t<meta property=\"og:image:width\" content=\"2100\" \/>\n\t\t<meta property=\"og:image:height\" content=\"1200\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-06T10:59:40+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-10-06T10:59:40+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inogicindia\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@inogic\" \/>\n\t\t<meta name=\"twitter:title\" content=\"API Plugin for Microsoft 365 Copilot: Connect REST API to Dataverse\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Learn how to connect a REST API to Microsoft 365 Copilot using an API plugin, OpenAPI, Agents Toolkit, ASP.NET Core, and Dataverse.\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@inogic\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner.png\" \/>\n\t\t<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t\t<meta name=\"twitter:data1\" content=\"Sam Kumar\" \/>\n\t\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/#blogposting\",\"name\":\"API Plugin for Microsoft 365 Copilot: Connect REST API to Dataverse\",\"headline\":\"Web API Plugin for Declarative Agents in Microsoft 365 Copilot\",\"author\":{\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/author\\\/sam-kumar\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Techbnical-blog-Banner.png\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/#articleImage\",\"width\":2100,\"height\":1200,\"caption\":\"Web API Plugin for Declarative Agents in Microsoft 365 Copilot\"},\"datePublished\":\"2026-10-06T16:29:40+05:30\",\"dateModified\":\"2026-10-06T16:29:40+05:30\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/#webpage\"},\"articleSection\":\"Copilot, Technical, WEB API\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/category\\\/webapi\\\/#listItem\",\"name\":\"WEB API\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/category\\\/webapi\\\/#listItem\",\"position\":2,\"name\":\"WEB API\",\"item\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/category\\\/webapi\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/#listItem\",\"name\":\"Web API Plugin for Declarative Agents in Microsoft 365 Copilot\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/#listItem\",\"position\":3,\"name\":\"Web API Plugin for Declarative Agents in Microsoft 365 Copilot\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/category\\\/webapi\\\/#listItem\",\"name\":\"WEB API\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/#organization\",\"name\":\"Microsoft Dynamics 365 CRM Tips and Tricks\",\"description\":\"By Inogic\",\"url\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/inogic-logo.png\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/#organizationLogo\",\"width\":1000,\"height\":325,\"caption\":\"inogic logo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/inogicindia\",\"https:\\\/\\\/twitter.com\\\/inogic\",\"https:\\\/\\\/www.instagram.com\\\/inogicindia\\\/\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCM4V7ousgLSu1hbOEv4DUuQ\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/inogicindia\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/author\\\/sam-kumar\\\/#author\",\"url\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/author\\\/sam-kumar\\\/\",\"name\":\"Sam Kumar\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ede4386d06665d3d5ee2ecccb6c36df60385d561e317372bd89dffb7e4b1de2f?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Sam Kumar\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/#webpage\",\"url\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/\",\"name\":\"API Plugin for Microsoft 365 Copilot: Connect REST API to Dataverse\",\"description\":\"Learn how to connect a REST API to Microsoft 365 Copilot using an API plugin, OpenAPI, Agents Toolkit, ASP.NET Core, and Dataverse.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/2026\\\/10\\\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/author\\\/sam-kumar\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/author\\\/sam-kumar\\\/#author\"},\"datePublished\":\"2026-10-06T16:29:40+05:30\",\"dateModified\":\"2026-10-06T16:29:40+05:30\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/\",\"name\":\"Microsoft Dynamics 365 CRM Tips and Tricks\",\"alternateName\":\"Inogic\",\"description\":\"By Inogic\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.inogic.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"API Plugin for Microsoft 365 Copilot: Connect REST API to Dataverse","description":"Learn how to connect a REST API to Microsoft 365 Copilot using an API plugin, OpenAPI, Agents Toolkit, ASP.NET Core, and Dataverse.","canonical_url":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/","robots":"max-snippet:-1, max-image-preview:large, max-video-preview:-1","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/#blogposting","name":"API Plugin for Microsoft 365 Copilot: Connect REST API to Dataverse","headline":"Web API Plugin for Declarative Agents in Microsoft 365 Copilot","author":{"@id":"https:\/\/www.inogic.com\/blog\/author\/sam-kumar\/#author"},"publisher":{"@id":"https:\/\/www.inogic.com\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner.png","@id":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/#articleImage","width":2100,"height":1200,"caption":"Web API Plugin for Declarative Agents in Microsoft 365 Copilot"},"datePublished":"2026-10-06T16:29:40+05:30","dateModified":"2026-10-06T16:29:40+05:30","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/#webpage"},"isPartOf":{"@id":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/#webpage"},"articleSection":"Copilot, Technical, WEB API"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.inogic.com\/blog\/#listItem","position":1,"name":"Home","item":"https:\/\/www.inogic.com\/blog\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.inogic.com\/blog\/category\/webapi\/#listItem","name":"WEB API"}},{"@type":"ListItem","@id":"https:\/\/www.inogic.com\/blog\/category\/webapi\/#listItem","position":2,"name":"WEB API","item":"https:\/\/www.inogic.com\/blog\/category\/webapi\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/#listItem","name":"Web API Plugin for Declarative Agents in Microsoft 365 Copilot"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.inogic.com\/blog\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/#listItem","position":3,"name":"Web API Plugin for Declarative Agents in Microsoft 365 Copilot","previousItem":{"@type":"ListItem","@id":"https:\/\/www.inogic.com\/blog\/category\/webapi\/#listItem","name":"WEB API"}}]},{"@type":"Organization","@id":"https:\/\/www.inogic.com\/blog\/#organization","name":"Microsoft Dynamics 365 CRM Tips and Tricks","description":"By Inogic","url":"https:\/\/www.inogic.com\/blog\/","logo":{"@type":"ImageObject","url":"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2023\/02\/inogic-logo.png","@id":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/#organizationLogo","width":1000,"height":325,"caption":"inogic logo"},"image":{"@id":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/inogicindia","https:\/\/twitter.com\/inogic","https:\/\/www.instagram.com\/inogicindia\/","https:\/\/www.youtube.com\/channel\/UCM4V7ousgLSu1hbOEv4DUuQ","https:\/\/www.linkedin.com\/company\/inogicindia"]},{"@type":"Person","@id":"https:\/\/www.inogic.com\/blog\/author\/sam-kumar\/#author","url":"https:\/\/www.inogic.com\/blog\/author\/sam-kumar\/","name":"Sam Kumar","image":{"@type":"ImageObject","@id":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/ede4386d06665d3d5ee2ecccb6c36df60385d561e317372bd89dffb7e4b1de2f?s=96&d=mm&r=g","width":96,"height":96,"caption":"Sam Kumar"}},{"@type":"WebPage","@id":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/#webpage","url":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/","name":"API Plugin for Microsoft 365 Copilot: Connect REST API to Dataverse","description":"Learn how to connect a REST API to Microsoft 365 Copilot using an API plugin, OpenAPI, Agents Toolkit, ASP.NET Core, and Dataverse.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.inogic.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/#breadcrumblist"},"author":{"@id":"https:\/\/www.inogic.com\/blog\/author\/sam-kumar\/#author"},"creator":{"@id":"https:\/\/www.inogic.com\/blog\/author\/sam-kumar\/#author"},"datePublished":"2026-10-06T16:29:40+05:30","dateModified":"2026-10-06T16:29:40+05:30"},{"@type":"WebSite","@id":"https:\/\/www.inogic.com\/blog\/#website","url":"https:\/\/www.inogic.com\/blog\/","name":"Microsoft Dynamics 365 CRM Tips and Tricks","alternateName":"Inogic","description":"By Inogic","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.inogic.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Microsoft Dynamics 365 CRM Tips and Tricks - By Inogic","og:type":"article","og:title":"API Plugin for Microsoft 365 Copilot: Connect REST API to Dataverse","og:description":"Learn how to connect a REST API to Microsoft 365 Copilot using an API plugin, OpenAPI, Agents Toolkit, ASP.NET Core, and Dataverse.","og:url":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/","og:image":"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner.png","og:image:secure_url":"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner.png","og:image:width":2100,"og:image:height":1200,"article:published_time":"2026-10-06T10:59:40+00:00","article:modified_time":"2026-10-06T10:59:40+00:00","article:publisher":"https:\/\/www.facebook.com\/inogicindia","twitter:card":"summary_large_image","twitter:site":"@inogic","twitter:title":"API Plugin for Microsoft 365 Copilot: Connect REST API to Dataverse","twitter:description":"Learn how to connect a REST API to Microsoft 365 Copilot using an API plugin, OpenAPI, Agents Toolkit, ASP.NET Core, and Dataverse.","twitter:creator":"@inogic","twitter:image":"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2026\/10\/Techbnical-blog-Banner.png","twitter:label1":"Written by","twitter:data1":"Sam Kumar","twitter:label2":"Est. reading time","twitter:data2":"6 minutes"},"aioseo_meta_data":{"post_id":"46418","title":"API Plugin for Microsoft 365 Copilot: Connect REST API to Dataverse","description":"Learn how to connect a REST API to Microsoft 365 Copilot using an API plugin, OpenAPI, Agents Toolkit, ASP.NET Core, and Dataverse.","keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":true,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"BlogPosting","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-10-06 10:09:37","updated":"2026-10-06 11:21:03","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.inogic.com\/blog\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.inogic.com\/blog\/category\/webapi\/\" title=\"WEB API\">WEB API<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tWeb API Plugin for Declarative Agents in Microsoft 365 Copilot\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.inogic.com\/blog\/"},{"label":"WEB API","link":"https:\/\/www.inogic.com\/blog\/category\/webapi\/"},{"label":"Web API Plugin for Declarative Agents in Microsoft 365 Copilot","link":"https:\/\/www.inogic.com\/blog\/2026\/10\/web-api-plugin-for-declarative-agents-in-microsoft-365-copilot\/"}],"_links":{"self":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/46418","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/comments?post=46418"}],"version-history":[{"count":2,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/46418\/revisions"}],"predecessor-version":[{"id":46434,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/46418\/revisions\/46434"}],"wp:attachment":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/media?parent=46418"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/categories?post=46418"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/tags?post=46418"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}