{"id":109134,"date":"2016-06-08T03:27:04","date_gmt":"2016-06-08T10:27:04","guid":{"rendered":""},"modified":"2025-06-11T08:18:25","modified_gmt":"2025-06-11T15:18:25","slug":"building-a-custom-api-for-powerapps-using-azure-app-service-web-apps","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/","title":{"rendered":"Building a Custom API for PowerApps using Azure App Service Web Apps"},"content":{"rendered":"<p>\nOne of the most powerful features that PowerApps offers is the ability to extend its capabilities by creating Custom APIs. Custom APIs are normal REST APIs that expose some functionality. Whether you are trying to build some complex logic or connecting to your existing systems, you can simply create a REST API in your favorite platform using any language, describe it using <a href=\"http:\/\/swagger.io\/\" target=\"_blank\" rel=\"noopener\">Swagger<\/a> and use it in PowerApps. We support a few authentication mechanisms such as Azure Active Directory and Basic Authentication, and will add others over time.<\/p>\n<p>The purpose of this blog is to show you how easy it is to build a Custom API using Azure App Service Web Apps and consume it in PowerApps.<\/p>\n<p><strong><a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/app-service\/web\/\" target=\"_blank\" rel=\"noopener\">Azure App Service Web Apps<\/a> <\/strong>is a managed compute environment that provides a very powerful platform for building and hosting sites, web applications, APIs and more. It allows developers to use their favorite development tools and programming languages, including C#, Java, Node.js, PHP, Python and more. It has a rich set of advanced features such as continuous delivery support with Git, GitHub, Dropbox, VSTS and others, multiple slots (for scenarios like managing multiple environments, A\/B testing, etc.), on-premise connectivity, SSL, custom domains, FTP, analytics, and much more.<\/p>\n<p><strong>Did I mention that you can use it for free<\/strong>? App Service will give you 10 free web sites, so go and create your subscription <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/app-service\/\" target=\"_blank\" rel=\"noopener\">here<\/a>. To develop the API below you can use <a href=\"https:\/\/www.visualstudio.com\/en-us\/products\/visual-studio-community-vs.aspx\">Visual Studio Community 2015<\/a> or <a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener\">Visual Studio Code<\/a> which both are free for you to use.<\/p>\n<p>\u00a0<\/p>\n<h2>What we\u2019ll be building<\/h2>\n<p>In this example, we will build a REST API using ASP.NET Web API in C# that includes an endpoint called HRApi that will return a list of employees. To keep it simple we will keep those records in a list in memory so that we can focus on how to put the API together and not get distracted with the specific technologies for data access.<\/p>\n<p>At a high level the steps we will follow are:<\/p>\n<ol>\n<li>Use Visual Studio to create the REST API<\/li>\n<li>Deploy the API to Azure App Service<\/li>\n<li>Register the Custom API to use in PowerApps<\/li>\n<li>Build a PowerApp that consumes the API<\/li>\n<\/ol>\n<p>\u00a0<\/p>\n<h2>Build the Web API using Visual Studio 2015<\/h2>\n<p>REST APIs can be created in any platform and any language. In this case we will use <a href=\"https:\/\/www.asp.net\/web-api\" target=\"_blank\" rel=\"noopener\">ASP.NET Web API<\/a> since it provides a framework that makes it very easy to build REST API\/services. The main class for building ASP.NET Web API services is called <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/system.web.http.apicontroller.aspx\" target=\"_blank\" rel=\"noopener\">ApiController<\/a>.<\/p>\n<p>Create the API Controller<\/p>\n<h3>\u00a0<\/h3>\n<ul>\n<li>Launch Visual Studio 2015 and select File-&gt;New Project<\/li>\n<li>Select the template Visual C#-&gt;Web-&gt;ASP.NET Web Application. In this case I will call my API \u201cHR\u201d.<br \/>\n<img loading=\"lazy\" decoding=\"async\" alt=\"new-project\" border=\"0\" height=\"404\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/000ca97c-7683-4bda-a0bd-9f7844dcf770.png\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto\" title=\"new-project\" width=\"610\"\/><\/li>\n<p><\/p>\n<li>You can use different templates to build an API such as Empty, MVC, WebAPI, and Azure API App. Each of those templates adds additional references and files to help get you started quickly with different scenarios. In this case I will choose the <strong>Empty <\/strong>template to show that it is very easy to build one from scratch. So select the \u201cEmpty\u201d template and check the \u201c<strong>Web API<\/strong>\u201d checkbox in the \u201cAdd folders and core references\u201d so that it adds a reference to the assemblies required to use Web API. Click Ok.<br \/>\n<img loading=\"lazy\" decoding=\"async\" alt=\"aspnet-project\" border=\"0\" height=\"476\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/9f0ec9d2-9efd-4bbb-9434-00bd4904d516.png\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto\" title=\"aspnet-project\" width=\"610\"\/><\/li>\n<p><\/p>\n<li>Now we will add an API controller to implement the logic. For that, right click the \u201cControllers\u201d folder in Solution Explorer and select the option Add-&gt;Controller.. \u201cWe\u2019ll use the \u201c<strong>Web API 2 Controller \u2013 Empty<\/strong>\u201d option, and we\u2019ll call it <strong>\u201cEmployeesController<\/strong>\u201d. There are several templates you can choose to get started such as ones that will help you generate CRUD APIs using Entity Framework and others.\u00a0<\/li>\n<li>Copy and Paste the following code.\n<pre class=\"prettyprint\">\nusing Swashbuckle.Swagger.Annotations;\nusing System.Collections.Generic;\nusing System.Web.Http;\nnamespace HR.Controllers\n{\n    public class EmployeesController : ApiController\n    {\n        [SwaggerOperation(\"GetEmployees\")]\n        public IEnumerable&lt;Employee&gt; Get()\n        {\n            return employees;\n        }\n        public class Employee\n        {\n            public string ID { get; set; }\n            public string FirstName { get; set; }\n            public string LastName { get; set; }\n            public string Title { get; set; }\n        }\n        static List&lt;Employee&gt; employees = new List&lt;Employee&gt;()\n        {\n            new Employee() { ID = \"01\", FirstName = \"Employee 001\", LastName=\"LastName 01\", Title = \"CEO\"},\n            new Employee() { ID = \"02\", FirstName = \"Employee 002\", LastName=\"LastName 02\", Title = \"CTO\"},\n            new Employee() { ID = \"03\", FirstName = \"Employee 003\", LastName=\"LastName 03\", Title = \"CMO\"},\n        };\n    }\n}\n<\/pre>\n<\/li>\n<li>The code above defines a type called Employee and holds a list of three employees in a list in memory. It also includes a method called \u201cGet\u201d that is exposed through swagger as \u201cGetEmployees\u201d.<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<h3>Add Swagger support<\/h3>\n<p>Swagger is a JSON format that helps describing the operations (paths), responses and parameters that a REST api has. You could spend a long time authoring JSON\/swagger manually or using tools on the web for converting YAML to swagger, however, one big challenge with that is that it tends to diverge from the actual code, or you can easily have typos and have an invalid API definition. One great thing about using .NET and its strongly typed model, metadata and reflection capabilities is that it allows for tools to easily inspect the code and auto-generate things for you. In this case, we will use <a href=\"https:\/\/www.nuget.org\/packages\/Swashbuckle\" target=\"_blank\" rel=\"noopener\">Swashbuckle<\/a>, a great package available in NuGet that can auto-generate Swagger based on an API Controller. This way it will always be kept up to date and correct. To do that follow the next steps:<\/p>\n<ul>\n<li>In the Solution Explorer panel right-click the \u201cReferences\u201d node and select \u201c<strong>Manage NuGet Packages<\/strong>\u201d option.<\/li>\n<li>Select the \u201c<strong>Browse<\/strong>\u201d tab, and search for \u201c<strong>Swashbuckle<\/strong>\u201d and install the latest version (at the time of this write up it is 5.3.2)<img loading=\"lazy\" decoding=\"async\" alt=\"add-swashbuckle\" border=\"0\" height=\"355\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/72c4777f-5c97-4bd3-afae-9a0575b0095f.png\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto\" title=\"add-swashbuckle\" width=\"640\"\/><\/li>\n<li>And that is all you need to do. To test, just press \u201cF5\u201d and it will launch a browser and navigate to the root \u201c\/\u201d directory. You will encounter a \u201c403.14\u201d Forbidden message since there is content at the root of the site, so instead add \u201c<strong>\/swagger<\/strong>\u201d to the URL. This route is handled by Swashbuckle to automatically generate a User Interface where you can view and test your swagger, and exercise your API. <img loading=\"lazy\" decoding=\"async\" alt=\"swagger-ui\" border=\"0\" height=\"459\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/42be3588-2e46-457e-a605-ff0b849e7850.png\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto\" title=\"swagger-ui\" width=\"610\"\/><\/li>\n<\/ul>\n<h2>Deploy to Azure App Service Web App<\/h2>\n<p>To deploy to Azure App Service you will need to create an Azure Subscription first, and you can do that at <a href=\"https:\/\/aka.ms\/azuretrial\" target=\"_blank\" rel=\"noopener\">here<\/a>, where you can get a perpetual free tier for services such as Azure Active Directory, Web sites on App Service, and more, as well as a free trial for other services such as Virtual Machines, etc. Once you have created your subscription, you can go back to Visual Studio and continue with the following steps.<\/p>\n<ul>\n<li>Back in Visual Studio, in Solution Explorer right-click and select <strong>Publish\u2026 <\/strong><\/li>\n<li>In the \u201cPublish Web\u201d dialog select the option \u201cMicrosoft Azure App Service\u201d<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"publish-web\" border=\"0\" height=\"379\" src=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2024\/06\/1c265a82-fd84-4f09-b42a-4a9aa128be74.png\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto\" title=\"publish-web\" width=\"480\"\/><\/p>\n<ul>\n<li>In this dialog you can choose an existing Web App that you want to deploy to, but in this case I will create a new one, so select the option \u201c<strong>New\u2026<\/strong>\u201d<img loading=\"lazy\" decoding=\"async\" alt=\"create-web-app\" border=\"0\" height=\"360\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/94dce5ed-8fd9-487c-8cd9-18697d3d7c3c.png\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto\" title=\"create-web-app\" width=\"480\"\/><\/li>\n<li>Enter all the details about your subscription and resource group. In my case I will use <strong>hrapi<\/strong> as the name of the API which will be part of the URL to access the service such as <a href=\"http:\/\/hrapi.azurewebsites.net:80\/swagger\/docs\/v1\" title=\"http:\/\/hrapi.azurewebsites.net:80\/swagger\/docs\/v1\">http:\/\/<strong>hrapi<\/strong>.azurewebsites.net:80\/swagger\/docs\/v1<\/a>, and click publish, that will create a new Web App and deploy the retail version of your code using Web Deploy.<\/li>\n<\/ul>\n<h2>Configure Custom API in PowerApps<\/h2>\n<p>To configure a Custom API in PowerApps we will need the Swagger file to describe the REST API and an Image to use as the icon for the API. To get the swagger you can navigate to the Web App you created and add<strong> \/swagger<\/strong> just as we did locally. In that User Interface you will see a URL at the top which should look something like: <a href=\"http:\/\/hrapi.azurewebsites.net:80\/swagger\/docs\/v1\" title=\"http:\/\/hrapi.azurewebsites.net:80\/swagger\/docs\/v1\">http:\/\/<strong>hrapi<\/strong>.azurewebsites.net:80\/swagger\/docs\/v1<\/a> (just replace the hrapi for the name you used when creating your Web App). Navigate to that URL and save the contents as \u201cHRApi.json\u201d on your machine.<\/p>\n<ul>\n<li>To register a Custom API in PowerApps simply navigate to <a href=\"https:\/\/web.powerapps.com\/#\/connections\/available\/custom\/create\">https:\/\/web.powerapps.com\/#\/connections\/available\/custom\/create<\/a>, or navigate to <a href=\"https:\/\/web.powerapps.com\">https:\/\/web.powerapps.com<\/a> and click Manage-&gt;Connections-&gt;New Connection-&gt;Custom-&gt;New Custom API<\/li>\n<li><img loading=\"lazy\" decoding=\"async\" alt=\"create-custom-api\" border=\"0\" height=\"363\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/d0b4cb1d-5b46-449a-9f71-d7786069c7e8.png\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto\" title=\"create-custom-api\" width=\"480\"\/><\/li>\n<li>Click Next. In this case we are not using any Authentication so we can just click Create. This will upload the Swagger and register a new Connection Provider for you to be able to create connections.<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<h2>Using the new Custom API in PowerApps<\/h2>\n<p>To use the newly created Custom API, just:<\/p>\n<h2>\u00a0<\/h2>\n<h2>Summary<\/h2>\n<p>In this example we saw how easy it is to create a REST api using ASP.NET Web API and deploy it to Azure App Service Web Apps, and how to use Swashbuckle to automatically generate the right Swagger to describe the API so that it can be used in PowerApps as a Custom API.<\/p>\n<p>\u00a0<\/p>\n<p><strong>One final note<\/strong>: It is worth calling out that the sample above is accessible using anonymous authentication. Azure App Service has the ability to protect your App Service web apps using Azure Active Directory which you can learn more about <a href=\"https:\/\/azure.microsoft.com\/en-us\/documentation\/articles\/app-service-mobile-how-to-configure-active-directory-authentication\/\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<ul>\n<li>Launch PowerApps Studio<\/li>\n<li>Create a new PowerApp, in my case I used New \u2013&gt;Blank App \u2013&gt;Phone Layout<\/li>\n<li>Go to the Content option in the ribbon and click DataSources.<\/li>\n<li>In the Data sources panel click the \u201cAdd data source\u201d button, click \u201c+ Add Connection\u201d, and select your Custom API. Click Add Data source. <img loading=\"lazy\" decoding=\"async\" alt=\"use-custom-api\" border=\"0\" height=\"448\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/44863f3e-ba86-460c-97f8-92b0d828e3b2.png\" style=\"border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto\" title=\"use-custom-api\" width=\"614\"\/><\/li>\n<li>Once you add it, PowerApps will expose the all operations in the API as new functions that you can use that behave just like any other built-in functions but that will asynchronously execute the correct HTTP request to call your API. In this case add a Gallery (Click Insert-&gt;Gallery-&gt;Vertical), and in the formula for the Items property start typing HRAPI which will help you listing the APIs<img loading=\"lazy\" decoding=\"async\" alt=\"use-custom-api-in-gallery\" border=\"0\" height=\"444\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/228412d3-3fe6-442e-b364-c92419b5824e.png\" style=\"border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto\" title=\"use-custom-api-in-gallery\" width=\"610\"\/><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>One of the most powerful features that PowerApps offers is the ability to extend its capabilities by creating Custom APIs.<\/p>\n","protected":false},"author":158,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","ms-ems-related-posts":[],"footnotes":""},"audience":[3378],"content-type":[],"job-role":[],"product":[3473],"property":[],"topic":[3421],"coauthors":[2084],"class_list":["post-109134","post","type-post","status-publish","format-standard","hentry","audience-it-professional","product-power-apps","topic-application-modernization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Building a Custom API for PowerApps using Azure App Service Web Apps - Microsoft Power Platform Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building a Custom API for PowerApps using Azure App Service Web Apps - Microsoft Power Platform Blog\" \/>\n<meta property=\"og:description\" content=\"One of the most powerful features that PowerApps offers is the ability to extend its capabilities by creating Custom APIs.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Power Platform Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-06-08T10:27:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-11T15:18:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/000ca97c-7683-4bda-a0bd-9f7844dcf770.png\" \/>\n<meta name=\"author\" content=\"Carlos Aguilar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlos Aguilar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/\"},\"author\":[{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/carlos-aguilar\/\",\"@type\":\"Person\",\"@name\":\"Carlos Aguilar\"}],\"headline\":\"Building a Custom API for PowerApps using Azure App Service Web Apps\",\"datePublished\":\"2016-06-08T10:27:04+00:00\",\"dateModified\":\"2025-06-11T15:18:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/\"},\"wordCount\":1539,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/000ca97c-7683-4bda-a0bd-9f7844dcf770.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/\",\"name\":\"Building a Custom API for PowerApps using Azure App Service Web Apps - Microsoft Power Platform Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/000ca97c-7683-4bda-a0bd-9f7844dcf770.png\",\"datePublished\":\"2016-06-08T10:27:04+00:00\",\"dateModified\":\"2025-06-11T15:18:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#primaryimage\",\"url\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/000ca97c-7683-4bda-a0bd-9f7844dcf770.png\",\"contentUrl\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/000ca97c-7683-4bda-a0bd-9f7844dcf770.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building a Custom API for PowerApps using Azure App Service Web Apps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\",\"name\":\"Microsoft Power Platform Blog\",\"description\":\"Innovate with Business Apps\",\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\",\"name\":\"Microsoft Power Platform Blog\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"width\":194,\"height\":145,\"caption\":\"Microsoft Power Platform Blog\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/person\/a14004f1b33f6b17a85f515269733e70\",\"name\":\"Carlos Aguilar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c2c12ef6cd4d6328e647b6fbdf4a6d7a2edb5a48643971fb7660c4f79c930544?s=96&d=mm&r=ge1854c03dc2bb1b72a2805d375d4d777\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c2c12ef6cd4d6328e647b6fbdf4a6d7a2edb5a48643971fb7660c4f79c930544?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c2c12ef6cd4d6328e647b6fbdf4a6d7a2edb5a48643971fb7660c4f79c930544?s=96&d=mm&r=g\",\"caption\":\"Carlos Aguilar\"},\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/carlosag\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building a Custom API for PowerApps using Azure App Service Web Apps - Microsoft Power Platform Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/","og_locale":"en_US","og_type":"article","og_title":"Building a Custom API for PowerApps using Azure App Service Web Apps - Microsoft Power Platform Blog","og_description":"One of the most powerful features that PowerApps offers is the ability to extend its capabilities by creating Custom APIs.","og_url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/","og_site_name":"Microsoft Power Platform Blog","article_published_time":"2016-06-08T10:27:04+00:00","article_modified_time":"2025-06-11T15:18:25+00:00","og_image":[{"url":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/000ca97c-7683-4bda-a0bd-9f7844dcf770.png","type":"","width":"","height":""}],"author":"Carlos Aguilar","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Carlos Aguilar","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#article","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/"},"author":[{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/carlos-aguilar\/","@type":"Person","@name":"Carlos Aguilar"}],"headline":"Building a Custom API for PowerApps using Azure App Service Web Apps","datePublished":"2016-06-08T10:27:04+00:00","dateModified":"2025-06-11T15:18:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/"},"wordCount":1539,"commentCount":0,"publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#primaryimage"},"thumbnailUrl":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/000ca97c-7683-4bda-a0bd-9f7844dcf770.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/","name":"Building a Custom API for PowerApps using Azure App Service Web Apps - Microsoft Power Platform Blog","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#primaryimage"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#primaryimage"},"thumbnailUrl":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/000ca97c-7683-4bda-a0bd-9f7844dcf770.png","datePublished":"2016-06-08T10:27:04+00:00","dateModified":"2025-06-11T15:18:25+00:00","breadcrumb":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#primaryimage","url":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/000ca97c-7683-4bda-a0bd-9f7844dcf770.png","contentUrl":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/000ca97c-7683-4bda-a0bd-9f7844dcf770.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2016\/06\/08\/building-a-custom-api-for-powerapps-using-azure-app-service-web-apps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/"},{"@type":"ListItem","position":2,"name":"Building a Custom API for PowerApps using Azure App Service Web Apps"}]},{"@type":"WebSite","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/","name":"Microsoft Power Platform Blog","description":"Innovate with Business Apps","publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization","name":"Microsoft Power Platform Blog","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","contentUrl":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","width":194,"height":145,"caption":"Microsoft Power Platform Blog"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/person\/a14004f1b33f6b17a85f515269733e70","name":"Carlos Aguilar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c2c12ef6cd4d6328e647b6fbdf4a6d7a2edb5a48643971fb7660c4f79c930544?s=96&d=mm&r=ge1854c03dc2bb1b72a2805d375d4d777","url":"https:\/\/secure.gravatar.com\/avatar\/c2c12ef6cd4d6328e647b6fbdf4a6d7a2edb5a48643971fb7660c4f79c930544?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c2c12ef6cd4d6328e647b6fbdf4a6d7a2edb5a48643971fb7660c4f79c930544?s=96&d=mm&r=g","caption":"Carlos Aguilar"},"url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/carlosag\/"}]}},"bloginabox_animated_featured_image":null,"bloginabox_display_generated_audio":false,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Power Platform Blog","distributor_original_site_url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/109134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/users\/158"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/comments?post=109134"}],"version-history":[{"count":1,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/109134\/revisions"}],"predecessor-version":[{"id":128809,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/109134\/revisions\/128809"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/media?parent=109134"}],"wp:term":[{"taxonomy":"audience","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/audience?post=109134"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/content-type?post=109134"},{"taxonomy":"job-role","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/job-role?post=109134"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/product?post=109134"},{"taxonomy":"property","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/property?post=109134"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/topic?post=109134"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/coauthors?post=109134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}